论文地址: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 = 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 ∗ L c l s ( p i , p i ∗ ) t i t i ∗ L b o x ( t i , t i ∗ ) l i l i ∗ L p t s ( l i , l i ∗ ) L p i x e l λ 1 , λ 2 , λ 3 人 脸 置 信 度 是 人 脸 为 1 , 非 人 脸 为 0 二 分 类 s o f t m a x 损 失 函 数 预 测 位 置 ( t x , t y , t w , t h ) 标 注 位 置 ( t x ∗ , t y ∗ , t w ∗ , t h ∗ ) 中 心 归 一 化 后 的 定 位 损 失 ( s m o o t h − L 1 ) 预 测 的 5 点 坐 标 ( l x 1 , l y 1 , . . . , l x 5 , l y 5 ) 标 注 的 5 点 坐 标 ( l x 1 ∗ , l y 1 ∗ , . . . , l x 5 ∗ , l y 5 ∗ ) 同 L b o x ( t i , t i ∗ ) 方 法 D e n s e R e g r e s s i o n 损 失 损 失 平 衡 权 重 , 分 别 为 0 . 2 5 、 0 . 1 、 0 . 0 1 即在人脸检测的监督中加入检测框和关键点的损失监督信号。这里的中心归一化就是将标注的点,放到以标注的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 θ k T k ( L ~ ) x = [ x ˉ 0 , . . . , x ˉ K − 1 ] θ L p i x e l = W ∗ H 1 i ∑ W j ∑ H ∣ ∣ R ( D P S T , P c a m , P i l l ) i , j − I i , j ∗ ∣ ∣ 1 V ξ D g θ θ L ~ T k ( L ~ ) P S T D P S T P c a m P i l l R ( D P S T , P c a m , P i l l ) I i , j ∗ 包 含 人 脸 形 状 和 纹 理 信 息 的 编 码 顶 点 集 n ∗ n 的 编 码 点 间 连 接 状 态 稀 疏 矩 对 角 矩 阵 , D i i = j ∑ ξ i j k 阶 截 断 的 切 比 雪 夫 多 项 式 切 比 雪 夫 系 数 向 量 缩 放 尺 度 拉 普 拉 斯 算 子 在 L ~ 下 估 计 的 k 阶 拉 普 拉 斯 多 项 式 预 测 的 形 状 和 纹 理 参 数 图 卷 积 结 果 摄 像 头 参 数 [ x c , y c , z c , x c ′ , y c ′ , z c ′ , f c ] 补 光 参 数 [ x l , y l , z l , r l , g l , b l , r a , g a , b a ] 投 影 得 到 的 二 维 人 脸 长 宽 为 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的性能,在准确度略微下降的情况下取得更高的推理速度。