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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haluoluo211/article/details/82083846

前段时间使用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)

标注截图如下

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏深度学习思考者

DL开源框架Caffe | 模型微调 (finetune)的场景、问题、技巧以及解决方案

前言 什么是模型的微调?   使用别人训练好的网络模型进行训练,前提是必须和别人用同一个网络,因为参数是根据网络而来的。当然最后一层是可以修改的,因为我们...

6166
来自专栏机器之心

教程 | 使用Keras实现多输出分类:用单个模型同时执行两个独立分类任务

之前我们介绍了使用 Keras 和深度学习的多标签分类(multi-label classification),参阅 https://goo.gl/e8RXtV...

6862
来自专栏目标检测和深度学习

教程 | 先理解Mask R-CNN的工作原理,然后构建颜色填充器应用

选自matterport 作者:Waleed Abdulla 机器之心编译 参与:刘晓坤 上年 11 月,matterport 开源了 Mask R-CNN 实...

2395
来自专栏机器学习原理

深度学习——LeNetLeNet解析

2074
来自专栏kalifaの日々

机器学习CS229:lesson1&exercise1

一边打开MATLAB练习题目一“给出身高与年龄的线性关系”,一边看了第一课。 按顺序依次实现了三种最小二乘法求拟合曲线的算法。 算法一、批量梯度下降 J(θ)是...

36110
来自专栏宏伦工作室

动手实现notMNIST数据集图片分类

2053
来自专栏生信小驿站

无监督学习 聚类分析②划分聚类分析

同样是聚类分析,上一次介绍的是层次聚类分法,这种方法输出的聚类树状图是其最大的优点,但是层次分析法的缺点就在于适合的样本数比较小,大概在150个左右。所以,当我...

981
来自专栏人工智能头条

Azure Machine Learning 上如何选择合适的机器学习算法

1496
来自专栏磐创AI技术团队的专栏

实用 | 分享一个决策树可视化工具

【磐创AI导读】:这篇文章希望跟大家分享一个可视化决策树或者随机森林的工具。这可以帮助我们更好的去理解或解释我们的模型。想要获取更多的机器学习、深度学习资源。欢...

2351
来自专栏Petrichor的专栏

深度学习: Full Connection (全连接层)

在 Caffe 中,全连接层 的 type (层类型) 为 Inner Product 。 输出一个简单向量(把输入数据blobs的width和height...

1.1K3

扫码关注云+社区

领取腾讯云代金券