In parse_facials_webface(facials), it is clearly given that if a landmark doesn't exist, then it is not recorded.
E.g., you may just have half a face in an image, then the landmarks may be less than 5 points
if len(facial) >= 19:
landmarks = []
for i in range(5):
x, y, t = facial[i * 3 + 4:i * 3 + 4 + 3]
if t == -1:
landmarks = None
break #(continue should be better,if used landmark_gt_mask recording method should be updated consequently)
landmarks.append([x, y])
while in LDataset.getitem, this program will crash if number of landmarks is not 5,
To correct this probblem, changes are made in the following link (where a "bymc" keyword can be found nearby) https://github.com/SpaceView/DBFace/blob/master/train/small/train-small-H-keep12-ignoresmall.py
Description
In parse_facials_webface(facials), it is clearly given that if a landmark doesn't exist, then it is not recorded. E.g., you may just have half a face in an image, then the landmarks may be less than 5 points
while in LDataset.getitem, this program will crash if number of landmarks is not 5,
Changes made
add a landmark_gt_mask
to indicate any special points where landmark values doesn't exist
Now the non-existing landmark_gt should contribute nothing to wingloss, thus
Hope this is sufficient to cope this problem, please check.