编者按:苏轼在《题西林壁》中曾写道:“横看成岭侧成峰,远近高低各不同。”这两句诗阐释了视角的变化对于视觉任务的影响。
而在人脸识别领域,由于真实场景的复杂多变,受人体姿态和取景角度的影响,采集到的人脸图像,时常会存在平面内旋转角度不确定等问题,这为人脸检测以及基于人脸的视觉任务带来了极大的挑战。
本文中,将为大家介绍中科院计算所VIPL组的CVPR2018新作:如何利用级联矫正网络,来实现实时、旋转自适应的人脸检测。
大讲堂特别提供相关论文及demo的下载链接。
另,深度学习大讲堂即将推出Valse2018系列报告,敬请关注!
本文将介绍我们的一篇实时旋转不变人脸检测的工作,
本论文下载链接:
https://arxiv.org/pdf/1804.06039.pdf.
算法的demo链接:
https://github.com/Jack-CV/PCN.
在体操、街舞、家庭合影等复杂的应用场景,由于人体姿态和取景角度的变化,人脸不总是竖直的,有可能有各种各样的平面内旋转角度。旋转不变人脸检测算法目标是精确的检测这种旋转的人脸。多样的平面内旋转角度,使得人脸的表观变化非常大,为旋转不变人脸检测带来了极大的挑战性。
有很多已有的工作尝试解决旋转不变人脸检测。最简单直接的方法就是基于数据増广的方法,在训练阶段将人脸旋转到任意角度。这样做的优点是测试阶段没有额外的时间开销;缺点是旋转人脸的表观变化非常大,需要使用一个计算量较大的网络才能保证检测的精度,这在一些对实时性要求高的应用中是不实用的。
另外一种策略就是分治。可以训练一个竖直人脸检测器,在测试阶段,将待检测图像旋转多遍进行检测,这样也可以实现任意旋转角度人脸的检测。竖直人脸检测器的计算量是相对较小的,但是检测多次也会使得时间开销成倍增长,而且带来更多的误检测。
还有一种方法是先将旋转的人脸转正然后再进行检测。具体而言,可以先使用一个旋转路由网络,预测候选人脸框的旋转角度,然后转正人脸,之后可以使用一个竖直人脸检测器完成检测。然而,精确的预测人脸的旋转角度本身也是一个很难的任务,旋转角度预测错误也会降低检测精度。
目前的许多旋转不变人脸检测算法需要在精度或者速度上进行妥协。我们提出的PCN算法目标是在保持很低的计算量的前提下,实现精准的旋转人脸检测。
在CVPR 2015上提出了Cascade CNN人脸检测方法,即通过级联多个CNN逐步过滤非人脸样本。之后提出的MTCNN对Cascade CNN改进,将分类、边框回归、特征点三个任务合并,利用不同任务相关性实现多任务学习提升性能。Cascade CNN、MTCNN算法在竖直人脸检测上可以实现出很好的效果,但在旋转不变人脸检测上仍有提升空间。我们的PCN由CNN级联组成,这点借鉴于Cascade CNN。PCN中的每一级CNN都是一个多任务网络,同时学习人脸非人脸判别、边框回归、旋转角度校准三个任务。
在测试阶段,首先使用滑动窗口与图像金字塔的方式产生候选窗口,然后送入网络开始检测。每一级网络过滤掉部分非人脸窗口,根据边框回归结果调整候选框位置,然后根据预测出的旋转角度校准窗口的角度,具体来讲:
第一级网络预测旋转角度使用二分类的方式,只预测人脸朝上或者朝下,朝下的人脸会被翻转,经过第一级后人脸旋转角度范围从360度缩减为180度;
第二级网络预测旋转角度使用三分类的方式,只预测人脸朝上、朝左或者朝右,朝左或右的人脸会被翻转为朝上,经过第二级后人脸旋转角度范围从180度缩减为90度;
在第三级旋转范围已经比较小,所以第三级网络直接回归旋转角度。
通过逐渐减少人脸的旋转变化,可以显著降低人脸与非人脸分类的难度,进而提升检测精度。在第一级和第二级采用只预测粗糙朝向的方式,可以使得旋转角度预测的精度大大提高且速度更快。
在PCN中,存在两个级联结构。第一个是人脸与非人脸的级联分类,这点与Cascade CNN一致。先使用小的CNN过滤简单负样本,再用大的CNN判别难负样本,这种方式可以极大地提升检测速度。
第二个级联结构是旋转角度的级联校准。PCN的级联校准属于一种由粗到精的级联回归模式,与人脸特征点估计、人体姿态估计思想类似。人脸的旋转角度等于三级网络预测结果之和。
级联校准模式,将难度较大的旋转角度预测分解为多个任务,每一个任务都会比较简单,这使得整个校准的难度降低。在第一级和第二级只预测粗糙朝向有两个原因,第一是粗糙朝向预测的精度更高,刚开始就直接回归角度误差会很大;第二是可以避免倾斜的图像crop操作,可以大大提高速度。
在实现人脸窗口旋转校准操作时,即使只是对窗口做计算低廉的翻转操作,如果窗口数目很大时,速度仍然很慢。我们可以先将输入图像翻转三次,得到上下左右四个朝向的图像。这样将一个人脸旋转到某个角度,等价于去对应角度的图像上crop人脸。此策略可以将与窗口数量成正比的校准操作时间缩减为常数时间,效率大大提高。
为了验证我们的算法的有效性,我们比较了常见的各种旋转不变人脸检测算法。
FDDB是一个常用的人脸检测评测集,但是主要包括竖直人脸,我们将FDDB旋转到上下左右四个方向来评测旋转不变人脸检测算法。可以看出我们的算法精度与Faster RCNN(VGG16)和SSD500(VGG16)精度相当,在误检测较少时候PCN会更好一些。与Cascade CNN等其他方法相比,PCN的精度有明显提升。
我们从WIDER FACE中挑选了一部分旋转人脸的图像进行算法评测。这个数据集上的测试结果进一步证明了PCN的有效性。
下面结合速度、精度、模型大小进行综合的分析。PCN是一个可以在CPU上也实时运行的算法,模型大小和速度都远优于Faster RCNN、SSD、R-FCN算法。同时可以看到,PCN相比Cascade CNN,速度几乎一样,但精度有明显提高,这得益于我们快速准确的渐进校准策略。
总结一下,PCN是一个快速、鲁棒、准确的旋转不变人脸检测算法,在实际中有良好的应用前景。欢迎大家关注我们的工作。谢谢大家!