下载  >  人工智能  >  机器学习  > 人脸检测算法之S3FD

人脸检测算法之S3FD 评分:

人脸相对于其他物体来说有一个普遍的特点,就是在图像中所占像素少。比如,coco数据集中,有一个分类是“人”,但是人脸在人体中只占很少一部分,在全图像上所占比例就更少了。本文所要介绍的S3FD[1](Single Shot Scale-invariant Face Detector)正是要解决这个问题。
Extra Feature Layers VGG-16 through Convo 3 laye Classifier: Corv: 3x3x(4x(Classest4)) Classifier: Conv: 3K3x(6x(Classes+4)) 岛/743mAP Conv canv3x3×4xas8s:4)g Conva Convy 2 Corvi Corv: 3x3x1024 Conv, 1xfx1024 Conv: 1x1x256 Conv: 1xix128 Conv: 1xix128 Con:1xix128 Canv: 3x3x512-s2 Conv: 3x3x256-52 Conv: 3x3x256-s1 Con: 3x3x256-S1 YOLO Customized Architecture 063.4mAP 45FPS Fully Connected Fully Connected 如图为SsD和YoLO的网络结构,他们也是最早的一批实现了one- - stage检测的算法。 可以看到,SSD为全卷积网络,并且通过不同位置的 layer进行预测。换句话说,用低 层网络检测小物体,高层网络检测大物体 当然了,SSD也有一些明显的问题,比如对于小物体的recl很一般。部分原因是在利 用低层网络做预测时,由于网络不够深,不能提取到有效的语义信息。 总之,SSD检测速度可以和YoLo媲美的同时,精度又可以和 Faster rann媲美,而且 很适合作为基础框架进行进一步的改进 传统 anchor机制在小人脸中遇到的问题 (以下图片均来自[1]) 回mm Receptive field Stride 8or16 Pre-set anchor few features Small face Small face cnn for detection D positive anchor (face) anegative anchor (background) average line outer face eg os: 1 neg Scale of face Note: for clearness, we omit the overlapped anchors. C (d) 本文作者提出了四个问题 1.人脸区域本身就小,经过几个 stride之后,特征图上就不剩什么了 相比于感受野和 anchor的尺寸来说,人脸的尺寸小的可怜 对于现有的 anchor匹配策略,我们可以看到,人脸像素小于10*10的 tiny face 基本上一个 ancho都匹配不到。而 outer face这个问题其实是 anchor-based方 法的通病,每级 anchor间大小差距越大,中间尺寸的 mismatch现象就越严重 4.图中每一个网格可以看成是某个特定尺寸的 anchor。可以看到对于左边的小人 脸,正负比例严重失衡,这在训练时,尤其是 first layer,需要特别考虑。 本文算法就是为了解决这几个问题。 网络结构 Base Convolutional Layers Extra Convolutional Layers (VGG16 through Pools layer) ⊥60 Cory Cony 3x3x10241x1×10241x1x2553x3x512s21xl×a283x3×256 Normalization Layers Detection Layers Predicted Conv 3 Convolutional Conv 3 Layers Conv 3 Conv fc7 CM-Lecihal Conv 2 Multi-task Loss Layer: SoftmaxLoss and SmoothL1Loss 1.输入大小640*640,从 feature map大小为160*160开始,一直到最后5*5,共 有6级预测网络, anchor scale从16*16到最后512*512,依次指数加一(看了 网络结构强迫症表示很舒服)。 每一个预测层,每个位置 anchor只有一个(一个 scale,rato为1:1),因为在 不扭曲图片的场景下,人脸的比例大概就是11(可能有少部分大长脸比例达到 了1:2,但是太少了忽略不计)。因此,预测conν输出的特征维度是2+4=6 3.在作为预测的最低层的 layer(即 feature map大小为160*160)下面可以看到预 测出来的特征维度为N+4,不是2+4,然后跟了一个叫Max- out Background abel的东西,这个后面会讲到。 4.中间的 cony fc6,conf7是从vGG的f层提取出来然后 reshape,作为初始 权重。 5. Normalization layers就是 SSD caffe中的 Normalize。感兴趣的可以去 Github看 weiliu89的SD版本的Caft代码[2]。 如何解决问题: 1. Anchor与 anchor之间重叠区域多。比如第一级, stride是4,但是 anchor scale 是16,所以相邻两个 anchor之间有很大一块重叠区域,一定程度上解决了前 文提到的 outer face的问题 2.改进了 anchor匹配策略 如果按照SSD中的匹配策略, jaccard overlap高于阈值(一般取0.5),平均每 个人脸只能匹配到3个 anchor,而且 tiny face和 outer face能匹配的 anchor数 量大部分为0 作者设计了新的匹配策略 第一步,将阈值从0.5降到0.35 第二步,对于那些仍然匹配不到anηchor的人脸,直接将阈值降到0.1,然后将 匹配到的 anchor按照 jaccard overlap排序,选取topN个。这个N作者设计为 第一步中匹配到 anchor的平均值。 再来直观的对比一下新老匹配策略 23.5 average line 1 outer face Scale of face Scale of face 可以看到, average line和局部都有所提升。 3.前面提到,小人脸导致正负样本比例严重失衡。尤其对于最浅层的预测层 方面 anchor本来就多(像本文中的结构,第一级中 anchor就占了总数的 75%),另一方面由于大部分 anchor是背景,导致 false positive显著增高。所 以为了减少这里的 false positive,作者采用了max- out background。 前面我们看到第一级预测出来的特征维度是N+4,这里Ns=Nm+1。对于不采用 max-out策略的网络层,Nm可以看成是1,即只预测一个该 anchon为背景的分 数。但是这里取3,可以理解为重复三次预测该 anchor为背景的分数,然后取 这三个分数中最高的那一个。最直接的结果就是提高了该 anchor被预测为背景 的概率,因此能够减小 false positiⅳe。 最后在 widerface mediun和hard等级上看看本文的成果(测试代码可以在作者提供的 github代码中查看[3]) 0.9 0.9 0.8 0.7 0.7 0.6 0.5 0.5 0.4 0.4 -Ours-0 924 Ours-0 852 0.3HCMS-RCNN-0874 0.3H-CMS-RCNN-0624 Multitask Cascade cNn.0.825 Multitask Cascade CNN-0598 02LDcF+0769 Multiscale Cascade CNN-0 664 0.2 LDCF+-0522 Multiscale Cascade cNN-0 424 Faceness-WIDER-0634 Faceness-WIDER-0345 0. 1 H-Two-stage CNN-0618 0. 1H-Two-stage CNN-0323 ACF-WIDER-0541 ACF-WIDER-0273 0.2 0.4 0.6 08 02 0.4 0.6 0.8 Recall Recall (b) val: Medium (c)Val: Hard 0.9 0.8 0,8 0.7 0.6 D.4 0,4 Ours.0. 913 Ours-0840 0.3H CMS-RCNN-0874 CMS-RCNN-0 643 Multitask Cascade CNN-0 820 0.3 Multitask Cascade CNN-0607 02LDcF+0.72 Multiscale Cascade CNN-0636 02LDcF+0.564 Multiscale Cascade cnn-0400 o. 1-Faceness-WIDER-0604 Faceness-WIDER-0,315 0.1H-Two-stage CNN-0304 ACF. WIDER-0588 -ACF-WIDER-0,290 02 0 0.6 0.8 0 0.2 0.4 06 0.8 Recall Recall (e) Test: Medium (f Test: Hard 可以看到尤其是hard等级上,本文算法有巨大的提升。 参考文献 [3]https:/github.com/weiliu89/caffe 4]https:/github.com/sfzhang15/sfd 推孝阋读 「1机器学习-波澜壮訚40年 SIGAL2018.4.13 2]学好机器学习需要哪些数学知识? SIGAL2018.4 L3人脸识别算法演化史 SIGAI2018.4.20 「4]基于深度学习的目标检测算法综述 SIGAI2018.4.24. [5]卷积神经网络为什么能够称霸计算机视觉领域? SIGAL2018.4.26. [6用一张图理解SWM的脉络 SIGAL2018.4.28 [7]人脸检测算法综述 SIGAL2018.5.3 「8理解神经网络的激活函数 SIGAL2018.5.5. [9深度卷积神经网络演化历史及结构改进脉络-40贞长文全面解读 SIGAI2018.5.8. [10]理解梯度下降法 SIGAL2018.5.11 [l]循环神经网络综述一语音识别与自然语言处理的利器 SIGAL2018.5.15 [12]理解凸优化 SIGAL2018.5.18 [13]【实验】理解SWM的核函数和参数SIGAⅠI2018.5.22 [14]【SIGA综述】行人检测算法SGAL2018.5.25 [15]机器学习在自动驾驶中的应用一以百度阿波罗平台为例(上) SIGAI2018.5.29 [16]理解牛顿法 SIGAI2018.5.31 [I7]【群话题精华】5月集锦一机器学习和深度学习中一些值得思考的问题 SIGAL208.6. [18]大话 Adaboost算法 SIGAL2018.6.2 [!9]F1 owNet到 FlowNet2.0:基于卷积神经网终的光流预测算法 SIGAL2018.6.4 [20]理解主成分分析CA)SGA2018.6.6 [21]人休骨骼关键点检测综述 SIGAI2018.6.8 [22]理解决策树 SIGAI2018.6.11 [2:3]用一句话总结常用的机器学习算法 SIGAL2018.6.13 L24」日标检测算法之YO0 SIGAL2018.6.15 「251理解过拟合 SIGAI2018.6.18 理解计算:从√2到Apha—第1季从√2谈起SlGA218.6 场景文本检测一CTN算法介绍SIGI2018.6.22 [28]卷积神经网络的压缩和加速 SIGAL2018.6.25 [29]k近邻算法SGA|2018.6.27 L30」自然场景文本检测识别技术综述 SIGAI2018.6.27 311理解计算:从√2到 AlphaG——第2季神经计算的历史背景 SIGAI2018.7.4 [32]机器学习算法地图 SIGAL2018.7.6 L33」反向传播算法推导-全连接神经网络 SIGAL2018.7.9 「341生成式对抗网络模型综述 SIGAL0709 [35]怎样成为一名优秀的算法工程师SIGA071 [36].理解计算:从根号2到 AlphaL第三季神经网络的数学模型SIGA0716 原创声明:本文为SGA原创文章,仅供个人学习使用,未经允许,不得转载,不能 用于商业目的。

...展开详情
2018-08-13 上传 大小:1.74MB
举报 收藏
分享