通过之前的原始CelebA数据集的训练,以及之后加入Wider_face数据集进行fine tuning之后,使用得到的权重文件进行实际测试发现,模型对人脸的检测比较准确,视频中非常小的人脸也能检测出来,连人的后脑勺都能检测出,但是boundingbox的位置在某些情况下预测的还是有些不准,比较突出的问题是视频中的人脸有微小位移的时候boundingbox的大小有时会出现突然变大的情况,初步判断应该是数据集中的boundingbox标注模式不统一导致训练出的模型在预测boundingbox时也很不稳定。
上面提及的可以识别远景的小人脸以及后脑勺,这在我的实际应用中并不需要,而且判断这些应当是从wider_face数据集中训练得到的,因此后续的训练决定不再使用wider_face数据集。
考虑要解决预测的boundingbox不稳定的问题,我需要将CelebA数据集中的boundingbox标签重做,通过五个landmarks来计算出boundingbox的位置,然后写入YOLO所需的label文本文档中。
经过思考以及实验,最终具体通过landmarks来计算boundingbox的方案如下:
左眼:leye 右眼:reye 鼻尖:nose 左嘴角:lmouth 右嘴角:rmouth
1. 计算出leye与reye的中点meye
2. 计算出lmouth与rmouth的中点mmouth
3. 计算出meye与mmouth的中点cface
4. 计算出leye与reye的距离deyes
5. 计算出lmouth与rmouth的距离dmouth
6. 计算出leye与lmouth的距离dleyelmouth
7. 计算出reye与rmouth的距离dreyermouth
10. 计算出maxdis = ma