retinaface - 人脸检测网络解析

retinaface - 人脸检测网络解析

paper: arxiv.org/pdf/1905.0064

github: github.com/deepinsight/

Retinaface是来自insightFace的又一力作,基于one-stage的人脸检测网络。

一、主干特征提取网络介绍( MobilenetV1-0.25为例

官方提供两种主干特征提取网络:MobilenetV1-0.25和Resnet,本文以MobilenetV1-0.25为例。MobileNet模型是Google针对手机等嵌入式设备提出的一种轻量级的深层神经网络,其使用的核心思想便是深度可分离卷积(depthwise separable convolution),具体请看 轻量级网络-Mobilenet系列(v1,v2,v3) - 知乎 (zhihu.com)

(1)mobilenetV1-1的网络结构

(2)mobilenetV1-0.25的网络结构

mobilenetV1-0.25是mobilenetV1-1通道数压缩为原来1/4的网络,网络结构如下:

mobilenetV1-0.25 网络结构

取最后三个feature map作为输出,即 C3、C4、C5

深度可分离卷积 网络结构

二、FPN特征金字塔

如下图,首先利用1x1卷积对三个有效特征层进行通道数的调整,调整后利用Upsample和Add进行上采样的特征融合,如下图。

FPN上采样结构

Retinaface使用了FPN的结构,如上图,对MobilenetV1-0.25最后三个有效特征层(feature map)进行FPN操作,得到P3、P4、P5。(特征金字塔网络FPN介绍: 什么是FPN(Feature Pyramid Networks--特征金字塔)? - 知乎 (zhihu.com)

FPN结构

加入了FPN之后的网络结构如下:

backbone+FPN

三、SSH(特征提取)

如上图,经FPN得到P3、P4、P5三个有效特征层,Retinaface为了进一步加强特征提取,使用了SSH模块加强感受野( 什么是感受野 ?, 什么是SSH ?)。

SSH通过在特征图中引入上下文信息来提高小人脸的检测,下图为SSH中的上下文模块。

retinaface中SSH的结构如如下所示:

SSH结构

SSH的思想非常简单,使用了三个并行结构,利用3x3卷积的堆叠代替5x5与7x7卷积的效果:左边的是3x3卷积,中间利用两次3x3卷积代替5x5卷积,右边利用三次3x3卷积代替7x7卷积。

加入了SSH之后的网络结构如下,经过SSH后,得到 S3、S4、S5 三个特征层:

backbone+FPN+SSH

四、Head

经上述特征提取操作获得 S3、S4、S5 三个有效特征层,接下来需要通过这三个有效特征层来获得预测结果。

retinaface的预测结果分为三个:分类预测、人脸框预测、人脸关键点预测;

(1)分类预测(face or not)

用于 判断先验框内部是否包含物体(二分类) ,Retinaface官方使用的是softmax进行判断(也可以利用一个1x1的卷积,将SSH的通道数调整成num_anchors x 2,用于代表每个先验框内部包含人脸的概率)

(2)人脸框的回归(bbox)

用于 对先验框进行调整从而获得预测框,需要四个参数, 前两个用于对先验框的中心进行调整,后两个用于对先验框的宽高进行调整(可以利用一个1x1的卷积,将SSH的通道数调整成num_anchors x 4,用于代表每个先验框的调整参数)

(3)人脸关键点的回归(landmarks)

用于 对先验框进行调整,从而获得人脸关键点坐标,需要十个参数, 每一个人脸关键点需要两个调整参数,对先验框中心的x、y轴进行调整获得关键点坐标,一共有五个人脸关键点(可以利用一个1x1的卷积,将SSH的通道数调整成num_anchors x 10(num_anchors x 5 x 2),用于代表每个先验框的每个人脸关键点的调整).

若网络输入尺寸为 3*640*640 ,经上述处理后得到: S3、S4、S5 shape 分别为: (80, 80, 64) (40, 40, 64) (20, 20, 64)

经过【Head】完成调整、判断之后,还需要进行非极大值抑制(即筛选出一定区域内属于同一种类得分最大的框)。

发布于 2021-09-03 15:49