1、简介
计算机视觉方面一直在疯狂地追求更大更硬更强的神经网络模型。但有时候,更大更硬更强并不是件好事,模型太大,显存不够放不进去,很麻烦,更别提应用到移动设备上了。
模型不够大就不够强,不够小就不够快。
而MTCNN,就是在计算机视觉人脸检测和矫正中,兼顾小而准的代表作品。
也就是利用滑动窗口的方法,在图片当中将小框框每次向右移动一定的长度,然后获得下一个框框,当框框移动到第一行的最后的时候,则第一行取完了 之后向下平移,此时当做第二行。简单总结就是将框框按照一定的长度平移,遍历整张图片,从而找到人脸的位置。
MTCNN将原始图像缩放到不同尺度,形成图像金字塔。
MTCNN由三个级联的网络组成,分别是P-Net, R-Net, O-Net
图片经过预处理,先经过P-Net网络,将结果给R-Net网络,R-Net网络的输出再传给O-Net网络,O-Net最后得到输出结果。
MTCNN的三层结构:
- 阶段一:先使用全卷积网络,即P-Net,来获取到获选的人脸框和其对应的向量。随后根据回归框向量对候选框进行校正。之后使用非极大抑制(NMS)来去除高度重合的候选框。
- 阶段二:P-Net得到的回归框都送入到R-Net中,随后拒绝大量错误框,再对回归框做校正,并使用NMS去除重合框。
- 阶段三:与阶段二类似,但是这里会额外进行人脸特征点(5个)的检测。
要解决的问题:同时进行人脸检测(face detection)和人脸对齐(face alignment)任务。
解决方法:1、提出了一个基于深度学习的级联结构。
2、提出了一种新的训练策略,称为online hard sample mining strategy, 用于提升训练精度。
DATE
imput: resized image(P-Net: 12x12x3, R-Net: 24x24x3, O-Net: 48x48x3)
lable: image is face or not(bool)
roi: bbox in rw image(各层输入图像中人脸位置框图坐标)
landmark: landmark in raw image(各层输入图像中人脸特征点的位置坐标)
2、模型结构
简而言之,即用三个小模型级联:
- 小模型P-Net快速排除图片中不含人脸的部分。
- 中模型R-Net进一步排除不含人脸的部分。
- 大模型O-Net敲定人脸的位置,重叠的框用NMS除去并且标记人脸的左右眼、鼻、两嘴角 共五个位置。
(NMS,非极大值抑制,可以理解为局部最大搜索。例如在人脸检测中,滑动窗口经提取特征,经分类器分类识别后,每个窗口都会得到一个分数。但是滑动窗口会导致很多窗口与其他窗口存在包含或者大部分交叉的情况。这时就需要用到NMS来选取那些领域里分数最高的(是人脸的概率最大),并且抑制那些分数低的窗口。)
总体结构:
- 每一层都有预测分类信息、bbox信息、landmark localiation信息。
- 每种信息都有对应的损失函数。
- 总体结构配图:
-
P-Net
判断这个输入的图像中是否有人脸,并且给出人脸框关键点的位置。
- 输入:将原始图片reaize到不同尺寸,作为输入。因为图片上不同人脸的大小可能不一致。最开始都是通过12x12x3预测人脸的信息。resize到不同尺寸图片,可以检测不同大小的人脸信息。
-
每次取一个12x12x3的区域作为输入。长宽都是12个像素,后面的3代表图像是三通道的,也就是RGB彩色图像。我们将用12x12大小的框框来找人脸,这里框框每次移动的距离是两个像素。
12x12会太小,所以论文对要进行检测的图像做了图像金字塔
金字塔是尖尖的,其实就是将图像进行一定比例,一系列的缩放。缩放的极限是12x12,再小下去的话,框框都比图像大了,哪怕你再大的头总会有个缩放比例把你的头变小。
- 从右边看,输出为三部分组成:
- face classification(人脸概率):输出向量的形状为1x1x2,也就是两个值,分别为该图像是人脸的概率,以及该图像不是人脸的概率。这两个值加起来严格等于1。之所以使用两个值来表示,是为了方便定义交叉损失。
- bounding box regression(边框回归):四个输出值。给出框的位置,一般称之为框回归。P-Net输入的12x12的图像块可能并不是完美的人脸框的位置,如有的时候人脸并不正好为方形,有的时候12x12的图像块可能偏左或偏右,因此需要输出当前框位置相对于完美的人脸框位置的偏移。这个偏移由四个变量组成。一般图形框可用四个数来表示它的位置:框上角的横坐标,框左上角的横坐标、框的宽度、框的高度。因此,框回归输出的值是:框左上角的横坐标的相对偏移量、框左上角的纵坐标的相对偏移量、框的宽度的误差、框的高度的误差。输出向量的形状就是图中的1x1x4。
- facial lanmark localization(人脸特征点定位):5个关键点分别为:左眼的位置、右眼的位置、鼻子的位置、左嘴角的位置、右嘴角的位置。每个关键点又需要横坐标和纵坐标来表示,因此输出一共是10维。(即1x1x10)
-
R-Net
- 以P-Net预测得到的回归框信息作为输入,先对原始图片进行切片,随后resize到固定尺寸shape=(24x24x3)。
- 输出和P-Net输出一样,人脸分类,边界框回归,人脸特征点定位。
也就是说,R-Net判断24x24x3图像中是否有人脸,以及预测关键点的位置。R-Net中,进行进一步判定,R-Net消除了P-Net中很多误判的情况。
-
O-Net
- 以R-Net预测的bbox信息作为输入,对原始图片进行切片,并resize到固定尺寸shape=(48x48x3)。
- 输出与R-Net输出一样。
网络说明
- P-Net 、R-Net、O-Net,网络输入的图片越来越大,卷积层的通道数越来越多,内部的层数也越来越多,P-Net运行速度最快,O-Net运行很慢。
- 之所以要使用三个网络,是因为如果一开始直接对图中的每个区域使用O-Net,速度会很慢,实际上P-Net先做一遍过滤将过滤后的结果再交给R-Net进行过滤,最后将过滤后的结果交给效果最好的,但速度较慢的O-Net进行判别。这样在每一步都提前减少了需要判别的数量,有效降低了处理时间。
- 从P-Net到R-Net再到O-Net,网络的输入图像尺寸越来越大,结构越来越深,提取的特征也越具有表现能力。通过不同的损失函数结构设计,每个网络在应用端实现不同的功能。
-
MTCNN的损失定义和训练过程
- 损失函数
- 分类损失,预测输入是否是人脸,对每个样本xi,采用交叉熵损失:
- bbox回归损失,计算的是预测框和ground truth之间的偏移量:
- 人脸特征点回归误差,预测人脸的五个特征点:双眼、鼻子、两个嘴角。使用L2损失。
- 由于会使用多个数据集进行训练,对于不同的训练数据,三类误差要有不同的权重,使用下式计算:
pi 网络输出
yidet 真实标签
N 指样本数量
i 是样本编号
j 对应着前三个损失函数
a 是系数,任务的重要性,在P-Net、R-Net中,Adet=1, Abox=0.5, Alandmark=0.5,在O-Net中,Adet=1, Abox=0.5, Alandmark=1。
B 是采样类型指标,取值范围是(0,1),当判定为非人脸时,Bbox=0, Blandmark,Bdet=1;判定为人脸时,全部取值为1。
- Online Hard Sample mining
- 作用:构建训练数据的方法。
- 在每个mini-batch中计算所有的sample的loss,并按照降序排序,取前70%的sample用来训练。
- 训练数据构建
根据取样框框与ground truth人脸框的IOU(测量标准)值将其分为四类:
- positives:与ground truth的IOU高于阈值(>0.65)。
- negatives:与ground truth的IOU低于阈值(<0.3)。
- part faces:与ground truth的IOU处于上述两个阈值之间(0.4<IOU<0.65)。
- landmark faces:标注了左右眼、鼻、两嘴角个位置的横纵坐标的人脸图。
使用:
- 分类任务使用positives&negatives。
- bbox预测使用positives&part faces。
- landemark localization预测使用landmark faces。