近日来自日本东北大学与Laboro.AI公司的研究人员公开一篇改进的单阶段人脸检测算法论文,其不仅保持了速度的优势而且在主流的人脸数据集上达到与双阶段人脸检测算法相当的精度。
作者信息:
按照算法流程划分,在目标检测领域一直存在着两大分支:
1.双阶段(Two-Stage)目标检测。网络先生成大量的目标候选区域和特征(或者像素),然后再通过另一个网络在其基础上进行目标分类和包围框位置回归。比如Faster R-CNN算法。
2.单阶段(Single-Stage)目标检测。在基础网络不同的深度提取特征图,每一层特征图都有与其对应的预定义的anchors,在这些特征图上直接进行目标分类和位置回归的卷积操作,得到最终的目标检测的结果。比如SSD算法。
双阶段目标检测算法往往能取得更高的检测精度,但单阶段的算法速度往往比较快,这在实际工程中是很重要的。
在人脸检测领域同样有如上的两条路线。
该文作者希望改进单阶段人脸检测算法,使其兼具速度和精度的优势。
问题提出
受启发于SSD、SFD、SSH算法,作者基于ResNet-101骨干网构建了单阶段的人脸检测基模型,透过研究发现导致模型虚警率(false positives)较高的主要因素有:
1.上下文信息缺失。尤其对小人脸特别明显,本身可区分度不高,上下文信息缺失更加难以检测。
2.感受野太大。大的感受野提供了冗余信息。
3.分类和检测共享相同的特征图。网络难以平衡分类和回归的损失函数。
4.anchors太过密集。提高了召回率但也提高了虚警率。
作者针对以上问题设计了对应改进策略,使得改进后的算法在主流的人脸检测数据集上精度都达到了state-of-the-art。
网络架构
如下图,
主要包括:Base convolutional layers( ResNet-101),Extra convolutional layers,Detection convolutional layers。
改进策略
1.融合更高层的特征图。
2.Detection模块分类和回归任务分离。
3.改进训练时anchors分配策略,降低数量。
实验证明,经过上述改进,降低了虚警率,如下图:
实验结果
作者分别在AFW、Pascal Face、FDDB、Wider Face四个数据集上进行了实验,达到了与双阶段检测算法state-of-the-art相当的精度。
甚至作者将该算法与Face++、Picase、Face.com商业公司的产品相比较,精度上也毫不逊色。
作者在Titan X GPU硬件上与其他算法进行了推断速度的比较,在精度可比较的范围,该文算法速度更具优势。在640*480图像上推断速度是26ms。
在Wider Face Validation hard set取得75.0%AP时每幅图像推断速度36ms,相比较CVPR2018的论文 Seeing Small Faces from Robust Anchor’s Perspective取得75.7%AP的推断速度是大于150ms。
人脸检测示例:
可惜的是,目前并未发现该文有开源代码。
论文地址:
https://arxiv.org/pdf/1902.01559v1.pdf