人脸检测算法之 S3FD
SIGAI 特约作者
Baoming
算法研究员
导言
自从 anchor-based method 出现之后,物体检测基本上就离不开这个神奇的 anchor 了。只因有了它的协助,人类才在检测任务上第一次看到了 real time 的曙光。但是,夹杂在通用物体检测中,某些特定物体的检测任务由于应用量巨大,以及该物体的特殊性,需要单独拎出来考虑。其中最有代表性的就是人脸检测。
人脸相对于其他物体来说有一个普遍的特点,就是在图像中所占像素少。比如,coco 数据集中,有一个分类是“人”,但是人脸在人体中只占很少一部分,在全图像上所占比例就更少了。本文所要介绍的 S3FD[1](Single Shot Scale-invariant Face Detector)正是要解决这个问题。
人脸检测专用数据集—widerface
Widerface 可以说是目前人脸检测数据集中最难的,放一张图大家感受一下
(图片来自 widerface 数据集)
图片像素 1024732,平均人脸像素 1013,难度可想而知。(一共标注了 132 个人脸,吃饱了撑的读者可以数数看)
当然了,这张照片只是展示了人脸的大小引发的问题,还有其他像遮挡,大角度,旋转等问题,由于不是本文的重点,不予过多讨论。
SSD 简介
由于该算法是基于 SSD 来做的改进,首
SD[2]。
(图片来自 [2])
如图为 SSD 和 YOLO 的网络结构,他们也是最早的一批实现了 one-stage 检测的算法。可以看到,SSD 为全卷积网络,并且通过不同位置的 layer 进行预测。换句话说,用低层网络检测小物体,高层网络检测大物体。
当然了,SSD 也有一些明显的问题,比如对于小物体的 recall 很一般。部分原因是在利用低层网络做预测时,由于网络不够深,不能提取到有效的语义信息。
总之,SSD 检测速度可以和 YOLO 媲美的同时,精度又可以和 Faster RCNN 媲美,而且很适合作为基础框架进行进一步的改进。
传统 anchor 机制在小人脸中遇到的问题
(以下图片均来自 [1])
本文作者提出了四个问题:
1. 人脸区域本身就小,经过几个 stride 之后,特征图上就不剩什么了
2. 相比于感受野和 anchor 的尺寸来说,人脸的尺寸小的可怜
3. 对于现有的 anchor 匹配策略,我们可以看到,人脸像素小于 10*10 的 tiny face 基本上一个 anchor 都匹配不到。而 outer face 这个问题其实是 anchor-based 方法的通病,每级 anchor 间大小差距越大,中间尺寸的 mismatch 现象就越严重。
4. 图中每一个网格可以看成是某个特定尺寸的 anchor。可以看到对于左边的小人脸,正负比例严重失衡,这在训练时,尤其是 first layer,需要特别考虑。
- 本文地址:http://www.6aiq.com/article/1531733692788
- 本文版权归作者和AIQ共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出
- 知乎专栏 点击关注
网络结构
- 输入大小 640640,从 feature map 大小为 160160 开始,一直到最后 55,共有 6 级预测网络,anchor scale 从 1616 到最后 512*512,依次指数加一(看了网络结构强迫症表示很舒服)。
- 每一个预测层,每个位置 anchor 只有一个(一个 scale,ratio 为 1:1),因为在不扭曲图片的场景下,人脸的比例大概就是 1:1(可能有少部分大长脸比例达到了 1:2,但是太少了忽略不计)。因此,预测 conv 输出的特征维度是 2+4=6
- 在作为预测的最低层的 layer(即 feature map 大小为 160*160)下面可以看到预测出来的特征维度为 Ns+4,不是 2+4,然后跟了一个叫 Max-out Background label 的东西,这个后面会讲到。
- 中间的 conv_fc6,conv_fc7 是从 VGG 的 fc 层提取出来然后 reshape,作为初始权重。
-
Normalization layers 就是 SSD_caffe 中的 Normalize。感兴趣的可以去 Github 看 weiliu89 的 SSD 版本的 Caffe 代码 [2]。
如何解决问题 - Anchor 与 anchor 之间重叠区域多。比如第一级,stride 是 4,但是 anchor scale 是 16,所以相邻两个 anchor 之间有很大一块重叠区域,一定程度上解决了前文提到的 outer face 的问题。
-
改进了 anchor 匹配策略。
如果按照 SSD 中的匹配策略,jaccard overlap 高于阈值(一般取 0.5),平均每个人脸只能匹配到 3 个 anchor,而且 tiny face 和 outer face 能匹配的 anchor 数量大部分为 0。
作者设计了新的匹配策略:
第一步,将阈值从 0.5 降到 0.35
第二步,对于那些仍然匹配不到 anchor 的人脸,直接将阈值降到 0.1,然后将匹配到的 anchor 按照 jaccard overlap 排序,选取 top-N 个。这个 N 作者设计为第一步中匹配到 anchor 的平均值。
再来直观的对比一下新老匹配策略:
可以看到,average line 和局部都有所提升。
-
前面提到,小人脸导致正负样本比例严重失衡。尤其对于最浅层的预测层,一方面 anchor 本来就多(像本文中的结构,第一级中 anchor 就占了总数的 75%),另一方面由于大部分 anchor 是背景,导致 false positive 显著增高。所以为了减少这里的 false positive,作者采用了 max-out background。
前面我们看到第一级预测出来的特征维度是 Ns+4,这里 NS=Nm+1。对于不采用 max-out 策略的网络层,Nm 可以看成是 1,即只预测一个该 anchor 为背景的分数。但是这里取 3,可以理解为重复三次预测该 anchor 为背景的分数,然后取这三个分数中最高的那一个。最直接的结果就是提高了该 anchor 被预测为背景的概率,因此能够减小 false positive。
最后在 widerface medium 和 hard 等级上看看本文的成果(测试代码可以在作者提供的 github 代码中查看 [3])
可以看到尤其是 hard 等级上,本文算法有巨大的提升。
参考文献
[1] Zhang, S., Zhu, X., Lei, Z., Shi, H., Wang, X., & Li, S. Z. (2017, October). S^ 3FD: Single Shot Scale-Invariant Face Detector. In Computer Vision (ICCV), 2017 IEEE International Conference on (pp. 192-201). IEEE.
[2] Liu, W., Anguelov, D., Erhan, D., Szegedy, C., Reed, S., Fu, C. Y., & Berg, A. C. (2016, October). Ssd: Single shot multibox detector. In European conference on computer vision (pp. 21-37). Springer, Cham.
[3] https://github.com/weiliu89/caffe
[4] https://github.com/sfzhang15/SFD
推荐阅读:
关注 SIGAICN 公众号,回复文章获取码,即可获得全文链接
[1] 机器学习 - 波澜壮阔 40 年 【获取码】SIGAI0413.
[2] 学好机器学习需要哪些数学知识?【获取码】SIGAI0417.
[3] 人脸识别算法演化史 【获取码】SIGAI0420.
[4] 基于深度学习的目标检测算法综述 【获取码】SIGAI0424.
[5] 卷积神经网络为什么能够称霸计算机视觉领域?【获取码】SIGAI0426.
[6] 用一张图理解 SVM 的脉络 【获取码】SIGAI0428.
[7] 人脸检测算法综述 【获取码】SIGAI0503.
[8] 理解神经网络的激活函数 【获取码】SIGAI0505.
[9] 深度卷积神经网络演化历史及结构改进脉络 -40 页长文全面解读 【获取码】SIGAI0508.
[10] 理解梯度下降法 【获取码】SIGAI0511.
[11] 循环神经网络综述—语音识别与自然语言处理的利器 【获取码】SIGAI0515.
[12] 理解凸优化 【获取码】SIGAI0518.
[13] 【实验】理解 SVM 的核函数和参数 【获取码】SIGAI0522.
[14] 【SIGAI 综述】行人检测算法 【获取码】SIGAI0525.
[15] 机器学习在自动驾驶中的应用—以百度阿波罗平台为例 (上)【获取码】SIGAI0529.
[16] 理解牛顿法 SIGAI 2018.5.31
[17] 【群话题精华】5 月集锦—机器学习和深度学习中一些值得思考的问题 【获取码】SIGAI0601.
[18] 大话 Adaboost 算法 【获取码】SIGAI0602.
[19] FlowNet 到 FlowNet2.0:基于卷积神经网络的光流预测算法 【获取码】SIGAI0604.
[20] 理解主成分分析 (PCA)【获取码】SIGAI0606.
[21] 人体骨骼关键点检测综述 【获取码】SIGAI0608.
[22] 理解决策树 【获取码】SIGAI0611.
[23] 用一句话总结常用的机器学习算法 【获取码】SIGAI0613.
[24] 目标检测算法之 YOLO 【获取码】SIGAI0615.
[25] 理解过拟合 【获取码】SIGAI0618.
[26] 理解计算:从√2 到 AlphaGo ——第 1 季 从√2 谈起 【获取码】SIGAI0620.
[27] 场景文本检测——CTPN 算法介绍 【获取码】SIGAI0622.
[28] 卷积神经网络的压缩和加速 【获取码】SIGAI0625.
[29] k 近邻算法 【获取码】SIGAI0627.
[30] 自然场景文本检测识别技术综述 【获取码】SIGAI0629.
[31] 理解计算:从√2 到 AlphaGo ——第 2 季 神经计算的历史背景 【获取码】SIGAI0702.
[32] 机器学习算法地图 【获取码】SIGAI0704.
[33] 反向传播算法推导 - 全连接神经网络 【获取码】SIGAI0706.
[34] 生成式对抗网络模型综述 【获取码】SIGAI0709.
[35] 怎样成为一名优秀的算法工程师【获取码】SIGAI0711.
[36] 理解计算:从√2 到 AlphaGo ——第 3 季 神经网络的数学模型【获取码】SIGAI0702.
原创声明:本文为 SIGAI 原创文章,仅供个人学习使用,未经允许,不得转载,不能用于商业目的。
Text only
时间:2019-09-22 09:40 来源: 转发量:次
声明:本站部分作品是由网友自主投稿和发布、编辑整理上传,对此类作品本站仅提供交流平台,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,不为其版权负责。如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时修改或删除。
相关文章:
- [机器学习]机器学习基础图表:概念、原理、历史、趋势和算法
- [机器学习]ResNet、Faster RCNN、Mask RCNN是专利算法吗?盘点何恺
- [机器学习]YOLO算法最全综述:从YOLOv1到YOLOv5
- [机器学习]推荐系统架构与算法流程详解
- [机器学习]YOLO算法最全综述:从YOLOv1到YOLOv5
- [机器学习]Repulsion Loss 遮挡场景下的目标检测
- [机器学习]Repulsion Loss 遮挡场景下的目标检测
- [机器学习]GitHub:小目标检测最全资料集锦
- [机器学习]贝尔实验室和周公“掰手腕”:AI算法解梦成为现
- [机器学习]性能超越GPU、FPGA,华人学者提出软件算法架构加
相关推荐:
网友评论: