STN系列之人脸检测

介绍一篇微软用STN做人脸检测的工作。Supervised Transformer Network for Efficient Face Detection;Dong Chen, Gang Hua, Fang Wen, and Jian Sun

Motivation:

前面介绍过了STN(spatial transformer network)做识别任务的工作,在人脸这个问题上利用landmark对齐是一个传统的标准做法,旋转平移变换到一个标准脸上再进 行后续的识别。那么在检测里面预测都会输出一个分类的概率来表示当前这个框选物体是否为目标物体,即是不是一个误检,如果没有做对齐的话因为姿态、表情等变化可能会导致这个分类问题变难。在我们实际做的时候也是会基于landmark的信息来单独训练分类器去实现误检判断的,这里基于STN的思想,作者提出了让网络自己学习对齐方法,在faster rcnn的框架下提升检测的效果。除了STN之外,作者还研究了ROI convolution对结果的影响,也是十分直观合理的做法。

基本原理:

 STN系列之人脸检测

直接上图,基于RPN和RCNN的two-stage网络结构,在RPN之后加入一个landmark回归器,使RPN成为一个多任务RPN,并在landmark的后面接一个transformer network(TN),这个TN的参数用相似变换来举例就是STN系列之人脸检测,其中a、b和左边的mx,my都是要学习的参数。与传统的人脸对齐的区别在于,传统的对齐方法mx和my是固定的,a、b对应的scale也是固定的,这里的STN通过学习的方式可以让不同输入的对齐方法不同,可以得到一个更优化的结果。

经过TN之后的feature map上的每个像素值可以表示为前一层的双线性差值:STN系列之人脸检测

这样就可以用链式求导来做BP了,其他的参数求导没有在paper里写也没有找到对应的supplementary material。。。

STN系列之人脸检测

Non-top K suppression:

用来替代NMS的,意图是说max的真正人脸候选可能会在rcnn的分类器中被拒绝,而降低overlap期望提高召回又会引入额外的误检框,所以作者觉得应该每个脸保留多个(K)top score的候选框,然后同时保持较高的阈值以保证没有额外的误检进入下一个环节,这样每个脸保留了多个候选框可以降低都被拒绝的概率。这个idea整体上感觉是因为后面的分类做的还不够好导致的折衷办法,另外就是对于没能成为topK的候选框还是没法召回,通过更好更鲁棒的分类器训练才应该是更合理的做法。

ROI convolution:

为了加速预测,借鉴了cascade的思想,用比较快速的检测器(real-boosting)去掉那些没有人脸的区域,只对可能有人脸的区域做ROI convolution,在实现上还是使用了图像金字塔来对预测不同尺度的人脸,每个金字塔handle的人脸尺寸都是2倍,在36*36~72*72之间。用对应scale的人脸框所在位置生成ROI MASK,如下图所示:

STN系列之人脸检测

网络预测时,ROI Mask在输入时已经确定,根据网络的downsample对roi mask做下采样,做卷积运算的时候把为1的feature map copy一份出来作为输入,实现好的话计算量的相对值就应该是mask区域的面积比上feature map的总面积,所以如果人脸的占比比较大或者人脸数较多的时候这个加速可能会不那么明显,而且会使得检测一张图片所需要的时间变得不稳定:

STN系列之人脸检测

实验结果:

实验数据包括400K人脸图片,每个label了5点landmark,用coco数据集做负样本,在FDDB上对不同策略做了对比实验(手动label了67个漏标的人脸以保证低fp下的结果准确)

STN系列之人脸检测

从结果上看其实TN的影响并没有那么大,feature combination和multi-task RPN一样对结果提升比较多,即不显示的使用TN只是把不同level的feature拼起来网络也有可能学到比较准确的feature。

在RPN前面再加上一个弱检测器做cascade,其速度、召回的对比如下:

STN系列之人脸检测

可以看到弱检测器本身的召回还是挺不错的,范围缩小到5.7%的情况下召回只降低1.2%。

总结:

提出的STN和ROI conv是很有价值的工作,在TN上的工作并不是很详细而且最后的结果看显示的加一个TN对分类的帮助也没有特别大,ROI的思想是很好的但是实现上却采用了分段式的训练方法,先做boosting检测器在做faster rcnn没能搞成end2end,其实在RPN层就已经是在做cascade了,可以把boosting的部分换成network通过训练得到更sparse的mask。所以对于刷数据集来说TN加上看来是一定有好处的,从实用上来看ROI mask的具体实现以及金字塔本身所耗的时间可能都会影响最终的预测速度。