论文学习 RetinaFace: Single-stage Dense Face Localisation in the Wild

论文地址: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)+λ1piLbox(ti,ti)+λ2piLpts(li,li)+λ3piLpixelpipiLcls(pi,pi)titiLbox(ti,ti)liliLpts(li,li)Lpixelλ1,λ2,λ3    10softmax(tx,ty,tw,th)(tx,ty,tw,th)(smoothL1)5(lx1,ly1,...,lx5,ly5)5(lx1,ly1,...,lx5,ly5)Lbox(ti,ti)DenseRegression0.250.10.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=0K1θkTk(L~)x=[xˉ0,...,xˉK1]θLpixel=WH1iWjHR(DPST,Pcam,Pill)i,jIi,j1VξDgθθL~Tk(L~)PSTDPSTPcamPillR(DPST,Pcam,Pill)Ii,j    nnDii=jξijkL~k[xc,yc,zc,xc,yc,zc,fc][xl,yl,zl,rl,gl,bl,ra,ga,ba]WH

实验说明

数据

  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
优化算法optimiserSGD
动量momentum0.9
权重衰减weight decay0.0005
批量batch size8 x 4
学习率lr初始化1e-3,
5 epochs 后1e-2,
55 epochs 后1e-3,
68 epochs 后1e-4
总迭代数epochs80

  评价方法,采用WIDER FACE的评价标准,并对测试图像水平翻转以及短边缩放到[500, 800, 1100, 1400, 1700],按照预测框与标注框0.4的IOU阈值进行统计。

训练结果

多任务学习的性能提升

多任务学习
  进行不同任务组合的性能对比,包含只有人脸检测、人脸检测+人脸关键点、人脸检测+dense regression、人脸检测+人脸关键点+dense regression,实验证明通过多任务学习可以提高人脸检测的性能。其中只增加dense regression方法时会出现hard档数据检测性能下降,作者认为可能是dense regression在该场景下处理比较困难。

最终模型性能

  检测准确度,作为目前性能最好的开源人脸检测算法,在论文发布时自然是WIDER FACE中准确度最好的,目前经次于AInnoFaceRefineFace

  关键点、3维点集等也达到不错的效果,其中dense regression是通过自监督学习实现,在复杂场景下处理效果不佳,作者认为可能是非对齐、1x1x256的紧凑特征量的影响。

  对人脸识别的帮助,基于更高性能的人脸检测和关键点对齐,原有人脸识别模型性能得到进一步提升,即证明了人脸对齐对人脸识别的影响,也证明了RetinaFace的应用价值。

  推理效率,除了在GPU上运行ResNet152,作者还在P40、i7-6700K、RK3399上测试了MobileNet的性能,在准确度略微下降的情况下取得更高的推理速度。

  

  

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值