之前一直都在做通用物体检测,现在也要开始接触到专用网络了,由于自己需求通常都是进行小目标的检测,而小目标检测也是人脸检测急需解决的一个问题,所以人脸检测是学习小目标检测方法的不二之选!今天我们来介绍2016年中科院深圳先进科技研究所和香港中文大学联合的一篇论文--Multi-task Cascaded Convolutional Network!
论文地址:
Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networksarxiv.org代码链接:
YYuanAnyVision/mxnet_mtcnn_face_detectiongithub.com首先我们要理清几个概念:
- face detection:区分人脸和非人脸,并标定位置
- face alignment : 将人脸用几个点表示,并通过位置来确定人脸是否为正脸,并进行变换
- face recognition : 人脸识别,很简单就是判断两张人脸是否为同一个人
算法总览
鉴于之前的人脸检测算法,作者总结了一下,由于CNN对于计算视觉中特征提取产生了天翻地覆的变化,现在CNN based的模型越来越多,但是大多数的模型将face detection and alignment两者分开,单独进行训练,从而忽略了这两个任务之间的相关性,虽然后来又人将这两者进行结合变为了multi-task的模型,但模型的精度较低!
另一方面,在训练阶段,虽然mining hard samples加强了检测器的性能,但是由于传统的方法都是人工筛选,所以作者提出了一种Online形式的难例样本挖掘。除此以外,作者设计了多个网络级联的结构,用于提高模型的精度,由于每个网络都是轻量化的,所以算法的速度还是很快的!
作者设计了三个结构级联的形式:(NMS用于训练阶段)
- 在第一阶段设计了一个全卷积网络,类似于RPN的结构,我们叫做Proposal Network(P-net)。用于产生候选区域,接着利用预测的BB回归框进行校准,然后使用NMS来融合相互交叠的预选框。
- 所有产生大的候选区域我们喂给另外一个CNN网络,叫做Refine Network(R-net),这个网络会抑制掉大量的负样本,接着使用BB Regression进行校准,使用NMS进行预选框融合。
- 第三阶段和第二阶段类似,叫做Output Network(O-net),但不同的是,增加了关键点landmark的预测,使得输入的框更加精确,实际操作中,输出5个脸部关键点。
网络结构
Online Hard Sample Mining
传统的Hard sample mining在网络模型训练好了之后,进行人工挑选,作者提出了一种在线的难例样板挖掘的思路,在mini-batch中,我们会根据前向传播之后的loss值得排序,选择loss值最高的70%作为Hard sample,然后我们只计算这些Hard sample的梯度并进行反向传播,也就是说我们忽略那些比较容易区分的样本,只关注那些难以区分的!
多级联训练
我们知道MTCNN中有三个网络,分别是P-net, R-net, O-net,那我们如何进行训练呢?我还没有尝试,只是根据论文的解释。首先这个网络有三个loss函数,分类loss/BB回归loss/landmark回归loss。对于landmark我们直接采用欧几里得距离,与边框回归思路类似!
分类loss:(交叉熵损失)
BB回归:(欧几里得距离,是不是应该为L1更合适)
Landmark loss: (欧几里得距离)
最后的目标loss为:
其中
算法性能
a为FDDB数据集,而b-d为WIDER FACE数据集!在当时state of art!
而在速度方面,可以达到16fps on CPU(2.60GHz)和99fps on GPU(Nvidia Titan Black)
参考链接
【1】S. Yang, P. Luo, C. C. Loy, and X. Tang, “WIDER FACE: A Face Detection Benchmark”. arXiv preprint arXiv:1511.06523.
【2】 V. Jain, and E. G. Learned-Miller, “FDDB: A benchmark for face detection in unconstrained settings,” Technical Report UMCS-2010-009, University of Massachusetts, Amherst, 2010.