版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1338332
前段时间使用caffe
版本的SSD
训练人脸检测,效果还不错,在FDDB上测试了下结果最终只有89%的准确率,但是误判率很低,结果如下:
为了分析训练的SSD在FDDB上对于哪些类型的人脸检测结果较差,结果如下:蓝色的椭圆为FDDB的原始标注,红色的矩形为现有的SSD检测结果。
可以看到:
发现FDDB中不少人脸基本可以不算是人脸,因此对FDDB的检测结果的意义有点怀疑了。
最终还是自己建立了专门的评价数据集(共1000多张样本):
检测结果如下(蓝线为检测的人脸框),效果还是不错的:
SSD做检测训练的时候注意:
最后给大家推荐一个好用的开源图片标注工具 labelImg
https://github.com/tzutalin/labelImg 。
用的时候注意:
jpg
格式的图片就不要命名为png
后缀,否则标注的时候会报错。def yolo_format_2_ssd(lst, w, h):
"""yolo format annotation([x1_ratio, y1_ratio, x_box_ratio, y_box_ratio])
to [x1, y1, x2, y2]
lst: yolo format
w, h: image width, height
"""
b_w, b_h = int(lst[2] * w), int(lst[3] * h)
center_x1, center_y1 = int(lst[0] * w), int(lst[1] * h)
x1, y1 = center_x1 - (b_w / 2), center_y1 - (b_h / 2)
x2, y2 = center_x1 + (b_w / 2), center_y1 + (b_h / 2)
return [x1, y1, x2, y2]
def check_show_img():
path = '/home/xy/face_tools/annotate_sample/face_de_sample/0a4b4e98aea6923a2bf8cd0462227af0.jpg'
lst_ratio = [0.419792, 0.494792, 0.352083, 0.452083]
img = cv2.imread(path)
h, w, _ = img.shape
print 'img, w, h: %s %s' % (h, w)
x1, y1, x2, y2 = yolo_format_2_ssd(lst_ratio, w, h)
p1, p2 = (x1, y1), (x2, y2)
cv2.rectangle(img, p1, p2, (0, 0, 255), 2)
cv2.imshow('img', img)
cv2.waitKey(0)
标注截图如下