2.5 DSFD 人脸检测算法

最近,腾讯的人脸检测算法——DSFD(Dual Shot Face Detector,CVPR 2019)[24]继承了SSD 神经网络(而SSD 是在VGG16基础上改进的,用于目标检测),设计了特征增强模块,增强前和增强后的特征图将分别用于人脸检测,从而将基于SSD 的单检测器扩展到双检测器。如图2-7所示为DSFD 人脸检测算法的神经网络结构,图2-8所示为DSFD人脸检测算法的特征增强模块(FEM)的神经网络结构。

img

图2-7 DSFD 人脸检测算法的神经网络结构[24]

img

图2-8 DSFD 人脸检测算法的特征增强模块(FEM)的神经网络结构[24]

为了更好地理解DSFD 人脸检测算法的神经网络结构,我们从算法实现层面进行分析。DSFD 继承SSD 的人脸检测框架,在DSFD 的官方代码中[25],SSD 网络结构(class SSD(nn.Module))的Conv3_3、Conv4_3、Conv5_3、Conv fc7、Conv6_2和Conv7_2层特征图(有关这些特征图的含义和作用请参见上述的SSH 人脸检测算法中的讲解)分别调用了特征增强模块(FEM)函数进行特征增强。而FEM 算法的代码,即class FEM(nn.Module),给出了特征增强的具体技术,self.cpm2和self.cpm4函数将感受野增大(扩张)。再结合图2-8可知,FEM 的本质思想是通过空洞卷积(Dilation Convolutional Layers)扩大感受野,并将不同感受野中的特征进行融合,有利于在宽度和深度上学习到更多的上下文信息和语义信息。简而言之,DSFD 的神经网络结构使用扩展的VGG16网络结构,使用其中的6个隐含层(Conv3_3、Conv4_3、Conv5_3、Conv fc7、Conv6_2和Conv7_2)的特征图的融合,得到6个特征图,作为第1部分(原始)特征图。然后,使用特征增强模块FEM 将上述6个隐含层的特征图分别进行增强,作为第2部分特征图(增强后的特征图)。

img
img

另外,DSFD 人脸检测算法还提出了“分层锚点渐进”式的损失函数(Progressive Anchor Loss,PAL)。原始特征图和增强后的特征图使用的损失函数不同,PAL 求两者的和,适配了不同尺寸的外接边框(anchor boxes)。在训练过程中,PAL 对整个模型形成了更有效的监督[26-27]

DSFD 人脸检测算法的本质是对SSD 检测框架进行的改进,增加了很多有效的技术细节(尤其是特征增强技术和新的损失函数的设计),提升了其人脸检测效果。有关本算法的更多技术细节,读者可以参阅文献[25]中的源代码。