人脸检测经典算法
我们将整个人脸检测算法分为3个阶段,分别是早期算法,AdaBoost框架,以及深度学习时代,在接下来将分这几部分进行介绍。
早期的人脸检测算法使用了模板匹配技术,即用一个人脸模板图像与被检测图像中的各个位置进行匹配,确定这个位置处是否有人脸;此后机器学习算法被用于该问题,包括神经网络,支持向量机等。以上都是针对图像中某个区域进行人脸-非人脸二分类的判别。
早期有代表性的成果是Rowley等人提出的方法[1][2]。他们用神经网络进行人脸检测,用20x20的人脸和非人脸图像训练了一个多层感知器模型。
文献[1]的方法用于解决近似正面的人脸检测问题
文献[2]的方法解决多角度人脸检测问题,整个系统由两个神经网络构成,第一个网络用于估计人脸的角度,第二个用于判断是否为人脸。角度估计器输出一个旋转角度,然后用整个角度对检测窗进行旋转,然后用第二个网络对旋转后的图像进行判断,确定是否为人脸。
AdaBoost框架
接下来介绍AdaBoost框架之后的方法,boost算法是基于PAC学习理论(probably approximately correct)而建立的一套集成学习算法(ensemble learning)。其根本思想在于通过多个简单的弱分类器,构建出准确率很高的强分类器,PAC学习理论证实了这一方法的可行性。
在2001年Viola和Jones设计了一种人脸检测算法[10]。它使用简单的Haar-like特征和级联的AdaBoost分类器构造检测器,检测速度较之前的方法有2个数量级的提高,并且保持了很好的精度,我们称这种方法为VJ框架。VJ框架是人脸检测历史上第一个最具有里程碑意义的一个成果,奠定了基于AdaBoost目标检测框架的基础,所以作为重点和大家唠唠。
在VJ算法问世之后,较好的解决了近似正面人脸的检测问题。此后出现了大量改进方案,在深度学习技术出现之前,一直是人脸检测算法的主流框架。这些方案的改进主要在以下几个方面:
新的特征,包括扩展的Haar特征[4],ACF特征[15]等,它们比标准的Haar-like特征有更强的描述能力,同时计算成本也很低。
使用其他类型的AdaBoost分类器。VJ框架中采用的是离散型的AdaBoost算法,除此之外,还有实数型,Logit型,Gentle型等各种方案。实数型、Logit型和Gentle型AdaBoost算法不仅能输出分类标签值,还能给出置信度,有更高的精度。
ACF[15](Aggregate ChannelFeatures for Multi-view Face Detection)是一种为分类提供足够多的特征选择的方法。在对原图进行处理后,得到多通道的图像,这些通道可以是RGB的通道,可以是平滑滤波得到的,可以是x方向y方向的梯度图等等。将这些通道合起来,在此基础上提取特征向量后续采用Soft-Cascade分类器进行分类。
相较于VJ-cascade的设计,Soft-Cascade采用几个改进的方案:
(1)每个stage的决策函数不是二值而是标量值(scalar-valued) ,且与该样本有多"容易"通过这个
stage以及在这个stage的相对重要性成比例。
(2)生成的决策函数是需要通过之前每个阶段的值而不单单是本阶段来判定。
(3)文中把检测器的运行时间-准确率权衡通过一个叫ROC surface的3维曲面清楚的展示出来,方便
调节参数,可以明确的知道动了哪个参数会对这个检测器的性能会有些什么影响。
DMP模型
DPM(Deformable Part Model),正如其名称所述,可变形的组件模型,是一种基于组件的检测算法,其所见即其意。该模型由Felzenszwalb在2008年提出,并发表了一系列的CVPR,NIPS会议。并且还拿下了2010年,PASCAL VOC的“终身成就奖”。
由于DPM算法[16]本身是一种基于组件的检测算法,所以对扭曲,性别,多姿态,多角度等的人脸都具有非常好的检测效果(人脸通常不会有大的形变,可以近似为刚体,基于DMP的方法可以很好地处理人脸检测问题)。
深度学习框架
卷积神经网络在图像分类问题上取得成功之后很快被用于人脸检测问题,在精度上大幅度超越之前的AdaBoost框架,当前已经有一些高精度、高效的算法。直接用滑动窗口加卷积网络对窗口图像进行分类的方案计算量太大很难达到实时,使用卷积网络进行人脸检测的方法采用各种手段解决或者避免这个问题。
Cascade CNN
Cascade CNN[17]可以认为是传统技术和深度网络相结合的一个代表,和VJ人脸检测器一样,其包含了多个分类器,这些分类器采用级联结构进行组织,然而不同的地方在于,Cascade CNN采用卷积网络作为每一级的分类器。
构建多尺度的人脸图像金字塔,12-net将密集的扫描这整幅图像(不同的尺寸),快速的剔除掉超过90%的检测窗口,剩下来的检测窗口送入12-calibration-net调整它的尺寸和位置,让它更接近潜在的人脸图像的附近。
采用非极大值抑制(NMS)合并高度重叠的检测窗口,保留下来的候选检测窗口将会被归一化到24x24作为24-net的输入,这将进一步剔除掉剩下来的将近90%的检测窗口。和之前的过程一样,通过24-calibration-net矫正检测窗口,并应用NMS进一步合并减少检测窗口的数量
将通过之前所有层级的检测窗口对应的图像区域归一化到48x48送入48-net进行分类得到进一步过滤的人脸候选窗口。然后利用NMS进行窗口合并,送入48-calibration-net矫正检测窗口作为最后的输出。
DenseBox
文献[18]提出了一种称为DenseBox的目标检测算法,适合人脸这类小目标的检测。这种方法使用全卷积网络,在同一个网络中直接预测目标矩形框和目标类别置信度。通过在检测的同时进行关键点定位,进一步提高了检测精度。
检测时的流程如下:
1.对待检测图像进行缩放,将各种尺度的图像送入卷积网络中处理,以检测不同大小的目标。
2.经过多次卷积和池化操作之后,对特征图像进行上采样然后再进行卷积,得到最终的输出图像,这张
图像包含了每个位置出现目标的概率,以及目标的位置、大小信息。
3.由输出图像得到目标矩形框。
4.非最大抑制,得到最终的检测结果。
Faceness-Net
Faceness-Net[19]是一个典型的由粗到精的工作流,借助了多个基于DCNN网络的facial parts分类器对人脸进行打分,然后根据每个部件的得分进行规则分析得到Proposal的人脸区域,最后通过一个Refine的网络得到最终的人脸检测结果。
MTCNN
MTCNN[20]顾名思义是多任务的一个方法,它将人脸区域检测和人脸关键点检测放在了一起,同Cascade CNN一样也是基于cascade的框架,但是整体思路更加巧妙合理,MTCNN总体来说分为三个部分:PNet、RNet和ONet。
HR
之前我们讲过的一些方法都没有针对小目标去分析,小目标检测依然是检测领域的一个难题,[21]本文作者提出的检测器通过利用尺度,分辨率和上下文多种信息融合来检测小目标
Face R-CNN
[22]该方法基于Faster R-CNN框架做人脸检测,针对人脸检测的特殊性做了优化。
SSH
[23] SSH最大的特色就是尺度不相关性(scale-invariant),比如MTCNN这样的方法在预测的时候,是对不同尺度的图片分别进行预测,而SSH只需要处以一个尺度的图片就可以搞定。实现方式就是对VGG网络不同level的卷积层输出做了3个分支(M1,M2,M3),每个分支都使用类似的流程进行检测和分类,通过针对不同尺度特征图进行分析,变相的实现了多尺度的人脸检测。
PyramidBox
这一次是百度的“PyramidBox”[24]
参考文献
[1] Henry A Rowley, Shumeet Baluja, Takeo Kanade. Neural network-based face detection. 1998, IEEE Transactions on Pattern Analysis and Machine Intelligence.
[2] Henry A Rowley, Shumeet Baluja, Takeo Kanade. Rotation invariant neural network-based face detection. 1998, computer vision and pattern recognition.
[3] P.Viola and M.Jones. Rapid object detection using a boosted cascade of simple features. In Proceedings IEEE Conf. on Computer Vision and Pattern Recognition, 2001
[4] Rainer Lienhart, Jochen Maydt. An extended set of Haar-like features for rapid object detection. 2002, international conference on image processing.
[5] Lubomir Bourdev, Jonathan Brandt. Robust Object Detection Via Soft Cascade. CVPR 2005.
[6] Bo Wu, Haizhou Ai, Chang Huang, Shihong Lao. Fast rotation invariant multi-view face detection based on real Adaboost. 2004, IEEE international conference on automatic face and gesture recognition.
[7] M.Jones, P.Viola. Fast Multi-View Face Detection. Mitsubishi Electric Research Laboratories, Technical Report: MERL-2003-96, July 2003.
[8] Y.Ma, X.Q.Ding. Real-time rotation invariant face detection based on cost-sensitive AdaBoost. In: Proceedings of the IEEE International Conference on Image Processing. Barcelona, Spain: IEEE Computer Society, 2003. 921-924.
[9] Y.Ma, X.Q.Ding. Robust multi-view face detection and pose estimation based on cost-sensitive AdaBoost. In: Proceedings of the 6-th Asian Conference on Computer Vision. Jeju, Korea: Springer, 2004.
[10] S.Z.Li, L.Zhu, Z.Q.Zhang, A.Blake, H.J.Zhang, H.Y.Shum. Statistical learning of multi-view face detection. In: Proceedings of the 7-th European Conference on Computer Vision. Copenhagen, Denmark: Springer, 2002.67-81.
[11] S.Z.Li, Z.Q.Zhang, H.Y.Shum, H.J.Zhang. FloatBoost learning for classification. In: Proceedings of the 16-th Annual Conference on Neural Information Processing Systems. Vancouver, Canada: MIT Press, 2002. 993-1000.
[12] S.Z.Li, L.Zhu, Z.Q.Zhang, H.J.Zhang. Learning to detect multi-view faces in real-time. In: Proceedings of the 2-nd International Conference on Development and Learning. Cambridge, MA, USA: IEEE Computer Society, 2002. 172-177.
[13] S.Z.Li, Z.Q.Zhang. FloatBoost Learning and Statistical Face Detection. In: IEEE Transactions on Pattern Analysis and Machine Intelligence, 2004.
[14] B.Wu, H.Z.Ai, C.Huang, S.H.Lao. Fast rotation invariant multi-view face detection based on real adaboost. In: Proc. 6th Int'l Conf. Automatic Face and Gesture Recognition, 2004, 79-84.
[15] B. Yang, J. Yan, Z. Lei and S. Z. Li. Aggregate channel features for multi-view face detection.. International Joint Conference on Biometrics, 2014.
[16] M. Mathias, R. Benenson, M. Pedersoli and L. Van Gool. Face detection without bells and whistles. ECCV 2014.
[17] Haoxiang Li, Zhe Lin, Xiaohui Shen, Jonathan Brandt, Gang Hua. A convolutional neural network cascade for face detection. 2015, computer vision and pattern recognition
[18] Lichao Huang, Yi Yang, Yafeng Deng, Yinan Yu. DenseBox: Unifying Landmark Localization with End to End Object Detection. 2015, arXiv: Computer Vision and Pattern Recognition
[19] Shuo Yang, Ping Luo, Chen Change Loy, Xiaoou Tang. Faceness-Net: Face Detection through Deep Facial Part Responses.
[20] Kaipeng Zhan, Zhanpeng Zhang, Zhifeng L, Yu Qiao. Joint Face Detection and Alignment Using Multitask Cascaded Convolutional Networks. 2016, IEEE Signal Processing Letters.
[21] HR - P. Hu, D. Ramanan. Finding Tiny Faces. IEEE Conference on Computer Vision and Pattern Recognition (CVPR), 2017.
[22] Face R-CNN - H. Wang, Z. Li, X. Ji, Y. Wang. Face R-CNN. arXiv preprint arXiv:1706.01061, 2017.
[23] SSH - M. Najibi, P. Samangouei, R. Chellappa, L. Davis. SSH: Single Stage Headless Face Detector. IEEE International Conference on Computer Vision (ICCV), 2017.
[24] PyramidBox - X. Tang, Daniel K. Du, Z. He, J. Liu PyramidBox: A Context-assisted Single Shot Face Detector. arXiv preprint arXiv:1803.07737, 2018.
推荐文章
[1] 机器学习-波澜壮阔40年 SIGAI 2018.4.13.
[2] 学好机器学习需要哪些数学知识?SIGAI 2018.4.17.
[3] 人脸识别算法演化史 SIGAI 2018.4.20.
[4] 基于深度学习的目标检测算法综述 SIGAI 2018.4.24.
[5] 卷积神经网络为什么能够称霸计算机视觉领域? SIGAI 2018.4.26.
[6] 用一张图理解SVM的脉络 SIGAI