欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【MTCNN】- 论文笔记

程序员文章站 2022-07-01 09:26:48
...

【MTCNN】- 原理

人脸识别系统

  1. 人脸检测

  2. 人脸对齐(Face Alignment)

    需要检测人脸中的关键点(Landmark)
    

1.MTCNN

可以做到实时的检测

将原始图像缩放到不同尺度,形成图像金字塔

1.P-Net

【MTCNN】- 论文笔记

P-Net 输入(12,12,3)

判断这个输入的图像中是否有人脸,并且给出人脸框关键点的位置

输出3部分组成

  1. face classification ——输出向量的形状为1x1x2,也就是两个值,分别为该图像是人脸的概率,以及该图像不是人脸的概率。这两个值加起来严格等于1。之所以使用两个值来表示,是为了方便定义交叉损失
  2. bounding box regression——给出框的位置,一般称之为框回归。P-Net输入的12x12的图像块可能并不是完美的人脸框的位置,如有的时候人脸并不正好为方形,有的时候12x12的图像块可能偏左或偏右,因此需要输出当前框位置相对于完美的人脸框位置的偏移。这个偏移由四个变量组成。一般地, 对于圄=图像中的框,可以用四个数来表示它的位置:框左上角的横坐标、框左上角的纵坐标、框的宽度、框的高度。因此,框回归输出的值是: 框左上角的横坐标的相对偏移、框左上角的纵坐标的相对偏移、框的宽度的误差、框的高度的误差。输出向量的形状就是图中的1x1x4。
  3. Facial lanmark localization——5 个关键点分别为:左眼的位置、右眼的位置、鼻子的位置、左嘴角的位置、右嘴角的位置。每个关键点又需要横坐标和纵坐标两维来表示,因此输出一共是10维(即1x1x10)

2.R-Net

【MTCNN】- 论文笔记

R-Net输入(24,24,3)

也就是说,R-Net 判断 24×24×3的图像中是否有人脸,以及预测关键点的位置。R-Net的输出和
P-Net 完全一样,同样由人脸判别、框回归、关键点位置预测三部分组成

在实际应用中,对每个P-Net输出可能为人脸的区域都缩放到24x24的大小,再输入到R-Net中,进行进一步判定,R-Net消除了P-Net中很多误判的情况

3.O-Net

【MTCNN】- 论文笔记

进一步把所得到的区域缩放成48×48的大小,输入到最后的0-Net中, 0-Net的结构同样与P-Net类似,不同点在于它的输入是48×48×3的图像,网络的通道数和层数也更多了

4.网络说明

P-NetR-NetO-Net,网络输入的图片越来越大,卷积层的通道数越来越多,内部的层数也越来越多,P-Net运行速度最快,O-Net运行很慢

  • 之所以要使用三个网络,是因为如果一开始直接对图中的每个区域使用O-Net,速度会很慢,实践上P-Net先做一遍过滤将过滤后的结果再交给R-Net进行过滤,最后将过滤后的结果交给效果最好但速度较慢的O-Net进行判别。这样在每一步都提前减少了需要判别的数量,有效降低了处理时间。

  • MTCNN的损失定义和训练过程

    1. 人脸判别部分,直接使用交叉熵
    2. 针对框回归和关键点判定,直接使用L2损失
    3. 最后这三部分损失各自乘以自身权重再加起来

    在训练P-NetR-Net时,更关心框位置的准确性,而较少关注关键点判定的损失

2.论文笔记

I. I NTRODUCTION

本文的主要贡献

  1. 提出了一种新的人脸检测与对齐级联CNNs框架
  2. 提出了一种有效的在线难样本挖掘
  3. 性能提高

【2】C-Training

利用三项任务来训练CNN detectors

  1. face/non-face classification
  2. boundig box regression
  3. facial landmark localization

【1】face/non-face classification :学习目标被制定为二分类问题,对每个样本xix_i,我们使用交叉熵损失
Lidet=(yidetlog(pi)+(1yidet)(1log(pi))) L_{i}^{d e t}=-\left(y_{i}^{d e t} \log \left(p_{i}\right)+\left(1-y_{i}^{d e t}\right)\left(1-\log \left(p_{i}\right)\right)\right)

pip_i网络输出

yidety_i^{det}真实标签

【2】Bounding box regression:学习目标被限制为回归问题
Libox=y^iboxyibox22 L_{i}^{b o x}=\left\|\hat{y}_{i}^{b o x}-y_{i}^{b o x}\right\|_{2}^{2}

y^ibox\hat{y}_{i}^{b o x}网络输出

yiboxy_{i}^{b o x} the nearest ground truth

【3】Facial landmark localization:回归任务
Lilandmark=y^ilandmarkyilandmark22 L_{i}^{l a n d m a r k}=\left\|\hat{y}_{i}^{l a n d m a r k}-y_{i}^{l a n d m a r k}\right\|_{2}^{2}
【4】有5个面部标志(左眼,右眼,鼻子,左嘴角,右嘴角)
mini=1Nj{det,box,landmark}αjβijLij \min \sum_{i=1}^{N} \sum_{j \in\{d e t, b o x, \text {landmark}\}} \alpha_{j} \beta_{i}^{j} L_{i}^{j}

N—训练样本

aja_j — 任务重要性

P-NetR-Net中使用(adel=1,abox=0.5,alandmark=0.5)(a_{del}=1,a_{box}=0.5,a_{landmark}=0.5)

O-Net中使用(adel=1,abox=0.5,alandmark=1)(a_{del}=1,a_{box}=0.5,a_{landmark}=1)

βij{0,1}\beta_{i}^{j} \in\{0,1\}样本类型指示器

【5】Online Hard sample mining

与原始分类器训练后进行传统难样本挖掘不同,我们在面部/非面部分类任务中进行online hard sample mining

  • 在每个mini-batch,我们将来自所有样本的前向传播中计算的损失进行排序,并选择其中前70%作为难样本。 然后我们只计算后向传播中这些难样本的梯度。 这意味着我们忽略了在训练期间不太有助于加强探测器的简单样本

参考

  1. 学习笔记:人脸检测和人脸识别
  2. MTCNN算法与代码理解—人脸检测和人脸对齐联合学习