SSD人脸检测以及FDDB检测结果分析

前段时间使用caffe版本的SSD训练人脸检测,效果还不错,在FDDB上测试了下结果最终只有89%的准确率,但是误判率很低,结果如下:

这里写图片描述

为了分析训练的SSD在FDDB上对于哪些类型的人脸检测结果较差,结果如下:蓝色的椭圆为FDDB的原始标注,红色的矩形为现有的SSD检测结果。

这里写图片描述

可以看到:

  1. 很模糊的脸没有检测到

  2. 还有些基本上算不上脸

  3. 极少数是人脸的确实没有检测到

发现FDDB中不少人脸基本可以不算是人脸,因此对FDDB的检测结果的意义有点怀疑了。

最终还是自己建立了专门的评价数据集(共1000多张样本):

  1. 少数较为正常的人脸

  2. 遮挡较多

  3. 不同光照条件下的人脸

  4. 角度多变的人脸

检测结果如下(蓝线为检测的人脸框),效果还是不错的:

这里写图片描述

SSD做检测训练的时候注意:

  1. 自己没有必要做简单的数据增强(例如翻转啥的),SSD训练过程中会做数据集增强

  2. 训练的数据集,不要用很模糊的人脸,或者很小的人脸,这样会导致训练发散los=Nan如下图(可能),因为SSD训练会根据IOU选取一定比率的样本作为positive样本。

这里写图片描述

最后给大家推荐一个好用的开源图片标注工具 labelImg https://github.com/tzutalin/labelImg

用的时候注意:

  1. 在图片的后缀一定要和图片的真实格式一样,例如jpg格式的图片就不要命名为png后缀,否则标注的时候会报错。

  2. 这个工具标注坐标的时候仅支持VOC,YOLO格式的,我用的是SSD因此在标注完要将YOLO格式转化为SSD格式。代码如下:

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)

标注截图如下
这里写图片描述

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值