论文地址:RetinaFace: Single-stage Dense Face Localisation in the Wild
开源地址:https://github.com/deepinsight/insightface/tree/master/RetinaFace.
综述
RetinaFace是一个多任务学习的多尺度人脸检测模型,可实现人脸处理领域的检测和关键点提取,并应用了FPN的UpSample实现特征融合(多尺度检测)。该研究的额外收益,是通过更准确的检测对齐,提升了人脸识别模型的准确率。以下图片均来源于论文截图。
背景介绍
目前无约束人脸检测已有了巨大的进步,但真实场景下人脸检测的准确度和效率依然面临挑战,RetinaFace团队在WIDERFACE数据集基础上,通过标注5点关键点作为人脸检测训练的额外监督信号,添加Mesh Decoder实现人脸三维编解码进行自监督学习,显著提升人脸检测效果。
RetinaFace技术路线的设计基于以下原因:
- 特定特性的目标检测:人脸检测与普通目标检测的相比,人脸快照的长宽比变化小(通常为1~1.5),但尺度变化大,因此使用特征金字塔(feature pyramid)以及可变性卷积网络DCN。后者由微软研究院于2017年提出,针对现实场景中目标在视角中呈现大小、姿态、视角变化甚至非刚体形变,在标准卷积采样点添加一个可学习的偏移变量,使模型适应几何形变特性的目标检测(如何评价 MSRA 最新的 Deformable Convolutional Networks?),在2018年比赛中作用明显;
- single-stage detection:相比two-stage methods处理更快,也是目前主流的研究方向,缺点是误检多且定位精度差,需要解决训练时的样本不均衡问题;
- extra supervision:人脸检测包含人脸分类和位置回归,后续有基于检测结果的级联方法获取关键点、MTCNN/STN在检测时获取关键点,作者在Mask R-CNN中发现类似关键点这样的额外信息有助于提升目标检测的准确度,因此将人脸关键点添加到人脸检测中进行多任务学习;
- Mesh Decoder:结合现在出现的通过前景进行3维建模的技术,在人脸中添加注意力机制来提升检测效果,在现存的监督分支上并联一个自监督分支来实现。(参考文献Dense 3D Face Decoding就是本文的参与作者,应该和PRNet有关,Insightface上有个同名目录,但目前没放实质性内容。这模型确实好,就是预训练模型输出项太多,也不好从开源中找到直接合适的数据自己训练,倒是可以参考一些第三方实现)。
核心技术
损失函数
设定多任务训练的损失函数:
L
=
L
c
l
s
(
p
i
,
p
i
∗
)
+
λ
1
p
i
∗
L
b
o
x
(
t
i
,
t
i
∗
)
+
λ
2
p
i
∗
L
p
t
s
(
l
i
,
l
i
∗
)
+
λ
3
p
i
∗
L
p
i
x
e
l
p
i
人
脸
置
信
度
p
i
∗
是
人
脸
为
1
,
非
人
脸
为
0
L
c
l
s
(
p
i
,
p
i
∗
)
二
分
类
s
o
f
t
m
a
x
损
失
函
数
t
i
预
测
位
置
(
t
x
,
t
y
,
t
w
,
t
h
)
t
i
∗
标
注
位
置
(
t
x
∗
,
t
y
∗
,
t
w
∗
,
t
h
∗
)
L
b
o
x
(
t
i
,
t
i
∗
)
中
心
归
一
化
后
的
定
位
损
失
(
s
m
o
o
t
h
−
L
1
)
l
i
预
测
的
5
点
坐
标
(
l
x
1
,
l
y
1
,
.
.
.
,
l
x
5
,
l
y
5
)
l
i
∗
标
注
的
5
点
坐
标
(
l
x
1
∗
,
l
y
1
∗
,
.
.
.
,
l
x
5
∗
,
l
y
5
∗
)
L
p
t
s
(
l
i
,
l
i
∗
)
同
L
b
o
x
(
t
i
,
t
i
∗
)
方
法
L
p
i
x
e
l
D
e
n
s
e
R
e
g
r
e
s
s
i
o
n
损
失
λ
1
,
λ
2
,
λ
3
损
失
平
衡
权
重
,
分
别
为
0.25
、
0.1
、
0.01
L=L_{cls}(p_i,p_i^*)+\lambda_1p_i^*L_{box}(t_i,t_i^*)\\+\lambda_2p_i^*L_{pts}(l_i,l_i^*)+\lambda_3p_i^*L_{pixel}\\ \begin{alignedat} \ &p_i&\ \ \ \ &人脸置信度\\ &p_i^*&&是人脸为1,非人脸为0\\ &L_{cls}(p_i,p_i^*)&&二分类softmax损失函数\\ &t_i&&预测位置(t_x,t_y,t_w,t_h)\\ &t_i^*&&标注位置(t_x^*,t_y^*,t_w^*,t_h^*)\\ &L_{box}(t_i,t_i^*)&&中心归一化后的定位损失(smooth-L_1)\\ &l_i&&预测的5点坐标(l_{x1},l_{y1},...,l_{x5},l_{y5})\\ &l_i^*&&标注的5点坐标(l_{x1}^*,l_{y1}^*,...,l_{x5}^*,l_{y5}^*)\\ &L_{pts}(l_i,l_i^*)&&同L_{box}(t_i,t_i^*)方法\\ &L_{pixel}&&Dense Regression损失\\ &\lambda_1,\lambda_2,\lambda_3&&损失平衡权重,分别为0.25、0.1、0.01 \end{alignedat}
L=Lcls(pi,pi∗)+λ1pi∗Lbox(ti,ti∗)+λ2pi∗Lpts(li,li∗)+λ3pi∗Lpixelpipi∗Lcls(pi,pi∗)titi∗Lbox(ti,ti∗)lili∗Lpts(li,li∗)Lpixelλ1,λ2,λ3 人脸置信度是人脸为1,非人脸为0二分类softmax损失函数预测位置(tx,ty,tw,th)标注位置(tx∗,ty∗,tw∗,th∗)中心归一化后的定位损失(smooth−L1)预测的5点坐标(lx1,ly1,...,lx5,ly5)标注的5点坐标(lx1∗,ly1∗,...,lx5∗,ly5∗)同Lbox(ti,ti∗)方法DenseRegression损失损失平衡权重,分别为0.25、0.1、0.01
即在人脸检测的监督中加入检测框和关键点的损失监督信号。这里的中心归一化就是将标注的点,放到以标注的anchor中心为原点的坐标上,并分别除以anchor的长宽。
Dense Regression Branch
Mesh Decoder是种图卷积方法,相比二维卷积对欧式网格感受野计算加权和,图卷积是计算连接两个顶点的最小边数。
G
=
(
V
,
ξ
)
L
=
D
−
ξ
y
=
g
θ
(
L
)
x
=
∑
k
=
0
K
−
1
θ
k
T
k
(
L
~
)
x
=
[
x
ˉ
0
,
.
.
.
,
x
ˉ
K
−
1
]
θ
L
p
i
x
e
l
=
1
W
∗
H
∑
i
W
∑
j
H
∣
∣
R
(
D
P
S
T
,
P
c
a
m
,
P
i
l
l
)
i
,
j
−
I
i
,
j
∗
∣
∣
1
V
包
含
人
脸
形
状
和
纹
理
信
息
的
编
码
顶
点
集
ξ
n
∗
n
的
编
码
点
间
连
接
状
态
稀
疏
矩
D
对
角
矩
阵
,
D
i
i
=
∑
j
ξ
i
j
g
θ
k
阶
截
断
的
切
比
雪
夫
多
项
式
θ
切
比
雪
夫
系
数
向
量
L
~
缩
放
尺
度
拉
普
拉
斯
算
子
T
k
(
L
~
)
在
L
~
下
估
计
的
k
阶
拉
普
拉
斯
多
项
式
P
S
T
预
测
的
形
状
和
纹
理
参
数
D
P
S
T
图
卷
积
结
果
P
c
a
m
摄
像
头
参
数
[
x
c
,
y
c
,
z
c
,
x
c
′
,
y
c
′
,
z
c
′
,
f
c
]
P
i
l
l
补
光
参
数
[
x
l
,
y
l
,
z
l
,
r
l
,
g
l
,
b
l
,
r
a
,
g
a
,
b
a
]
R
(
D
P
S
T
,
P
c
a
m
,
P
i
l
l
)
投
影
得
到
的
二
维
人
脸
I
i
,
j
∗
长
宽
为
W
、
H
的
标
定
裁
剪
块
G=(V,\xi)\\ L=D-\xi\\ y=g_\theta(L)x=\sum_{k=0}^{K-1}\theta_kT_k(\tilde L)x=[\bar{x}_0,...,\bar{x}_{K-1}]\theta\\ L_{pixel}=\dfrac{1}{W*H}\sum_i^W\sum_j^H||R(D_{P_{ST}},P_{cam},P_{ill})_{i,j}-I_{i,j}^*||_1\\ \begin{alignedat} \ &V&\ \ \ \ &包含人脸形状和纹理信息的编码顶点集\\ &\xi&&n*n的编码点间连接状态稀疏矩\\ &D&&对角矩阵,D_{ii}=\sum_j\xi_{ij}\\ &g_\theta&&k阶截断的切比雪夫多项式\\ &\theta&&切比雪夫系数向量\\ &\tilde L&&缩放尺度拉普拉斯算子\\ &T_k(\tilde L)&&在\tilde L下估计的k阶拉普拉斯多项式\\ &P_{ST}&&预测的形状和纹理参数\\ &D_{P_{ST}}&&图卷积结果\\ &P_{cam}&&摄像头参数[x_c,y_c,z_c,x_c',y_c',z_c',f_c]\\ &P_{ill}&&补光参数[x_l,y_l,z_l,r_l,g_l,b_l,r_a,g_a,b_a]\\ &R(D_{P_{ST}},P_{cam},P_{ill})&&投影得到的二维人脸\\ &I_{i,j}^*&&长宽为W、H的标定裁剪块 \end{alignedat}
G=(V,ξ)L=D−ξy=gθ(L)x=k=0∑K−1θkTk(L~)x=[xˉ0,...,xˉK−1]θLpixel=W∗H1i∑Wj∑H∣∣R(DPST,Pcam,Pill)i,j−Ii,j∗∣∣1VξDgθθL~Tk(L~)PSTDPSTPcamPillR(DPST,Pcam,Pill)Ii,j∗ 包含人脸形状和纹理信息的编码顶点集n∗n的编码点间连接状态稀疏矩对角矩阵,Dii=j∑ξijk阶截断的切比雪夫多项式切比雪夫系数向量缩放尺度拉普拉斯算子在L~下估计的k阶拉普拉斯多项式预测的形状和纹理参数图卷积结果摄像头参数[xc,yc,zc,xc′,yc′,zc′,fc]补光参数[xl,yl,zl,rl,gl,bl,ra,ga,ba]投影得到的二维人脸长宽为W、H的标定裁剪块
实验说明
数据
WIDER FACE,在此基础上根据标注关键点的难易程度划分5挡:
- 4127张高清人脸,可准确标注出68个关键点;
- 12636张较清晰人脸,能标注出68个关键点(大概是轮廓模糊)
- 38140张较模糊人脸,能准确标注出5个关键点(轮廓非常模糊)
- 50024张模糊人脸,能标注出5个关键点(只能勉强看出是人脸)
- 94095张没法标注的人脸(只通过区域,已经看不出是什么)
设置
特征金字塔获取5层多尺度特征,骨架网络是ImageNet-11k数据集上训练的ResNet152分类模型,并在最后接上一个通过“Xavier”随机初始化的3x3卷积层,stride=2。
Context Module,采用可变卷积网络(DCN)对每个尺度的输出添加后处理模块。
损失权重,负样本只用分类损失,正样本添加1x1的卷积进行训练,mesh decoder直接使用预训练模型。
Anchor,对不同的金字塔输出得到anchor,训练的时候,与标注框的IOU大于0.5的匹配为TP,小于0.3的匹配为FP,中间未匹配部分在训练时忽略;采用OHEM解决样本不均衡问题,主要策略为对负样本按照损失值排序,按照与正样本3:1的比例挑选靠前的部分。
数据增广,从原图中随机抠取正方形区域,并resize到640x640,正方形抠选区域的边长为原图最小边的0.3~1,如果某人脸标注框的中心在抠选区域内,则保留该标注为当前抠选区域中的有效人脸;同时对图像按照0.5的概率进行随机水平翻转及颜色空间变换。
训练参数:
项目 | 参数名 | 参数值 |
---|---|---|
训练设备 | P40(24GB) x 4 | |
优化算法 | optimiser | SGD |
动量 | momentum | 0.9 |
权重衰减 | weight decay | 0.0005 |
批量 | batch size | 8 x 4 |
学习率 | lr | 初始化1e-3, 5 epochs 后1e-2, 55 epochs 后1e-3, 68 epochs 后1e-4 |
总迭代数 | epochs | 80 |
评价方法,采用WIDER FACE的评价标准,并对测试图像水平翻转以及短边缩放到[500, 800, 1100, 1400, 1700],按照预测框与标注框0.4的IOU阈值进行统计。
训练结果
多任务学习的性能提升
进行不同任务组合的性能对比,包含只有人脸检测、人脸检测+人脸关键点、人脸检测+dense regression、人脸检测+人脸关键点+dense regression,实验证明通过多任务学习可以提高人脸检测的性能。其中只增加dense regression方法时会出现hard档数据检测性能下降,作者认为可能是dense regression在该场景下处理比较困难。
最终模型性能
检测准确度,作为目前性能最好的开源人脸检测算法,在论文发布时自然是WIDER FACE中准确度最好的,目前经次于AInnoFace、RefineFace。
关键点、3维点集等也达到不错的效果,其中dense regression是通过自监督学习实现,在复杂场景下处理效果不佳,作者认为可能是非对齐、1x1x256的紧凑特征量的影响。
对人脸识别的帮助,基于更高性能的人脸检测和关键点对齐,原有人脸识别模型性能得到进一步提升,即证明了人脸对齐对人脸识别的影响,也证明了RetinaFace的应用价值。
推理效率,除了在GPU上运行ResNet152,作者还在P40、i7-6700K、RK3399上测试了MobileNet的性能,在准确度略微下降的情况下取得更高的推理速度。