目录
3.1.1 训练数据是12x12,那么检测时也是要把所有的图像都放缩到12x12吗?
1 致谢
感谢网友任尔hz的帮助,
原文链接如下:
https://blog.csdn.net/qq_36782182/article/details/83624357
2 前言
今天在学习MTCNN,这个网络是张老师在人脸识别于检测课程上跟我讲的,但是我感觉讲的还是不是很清楚,还需要继续学习一下~
论文地址:
https://ieeexplore.ieee.org/document/7553523
3 MTCNN——基于级联模型的人脸关键点检测网络
MTCNN从整体结构上来看是一种级联模型,其组件网络P-Net、R-Net和O-Net在网络结构上其实是十分类似的,
其级联的特点表现在:对于P-Net、R-Net和O-Net这三个网络来说,当前网络的输入都是下一个网络的输入;
输入图像:
输入图像的尺寸可以是任意的,(这个我自己测试了的);
输出数据:
人脸的限位框以及关键点信息。
3.1 P-Net
P-Net是MTCNN中的第一个CNN网络,其构成如图所示:
输入:
训练数据——12x12的图像
推理数据——图像金字塔中的每个图像(已经向张老师确认过了)
输入:类别向量、限位框回归向量和脸部关键点的位置向量。
3.1.1 训练数据的生成
这里我们直接引用论文中的原话:
可以看到P-Net的数据是直接从 WIDER FACE数据集中截取出来的,(我感觉这里还有改进的空间)
3.1.1 训练数据是12x12,那么检测时也是要把所有的图像都放缩到12x12吗?
看到训练的输入数据是12x12的时候,我有点奇怪,输入的图像是固定的尺寸12x12,难道是所有的图像都要缩放到12x12吗?
为了解决这个问题,我们先要去回顾以下检测的流程,
检测的流程其实是一个迭代的流程,MTCNN在P-Net阶段,会首先建立一个图像金字塔,
然后把图像金字塔中的每一层图像(也就是不同尺度的图像),分别送入P-Net中用来产生P-RP(也就是P-Net产生的第一阶段检测出的人脸区域,我们用P-RP即P-Net-Region-Proposal来代表这部分生成的数据);
但是这里输入为12x12的问题还没有解决,其实这里P-Net的含义是,我们将P-Net训练为一个对12x12图像十分敏感的网络,它能准确的提取12x12图像的特征,从整体上看,他似乎就是一个感受野为12x12的模板函数,只是在这里,我们用了一个CNN网络来拟合这个12x12的模板函数,并用他来为我们提取测试图像上12x12区域的“人脸模板特征”;
由于全卷积网络的特点,这样,我们就会对大中小各尺度图像中所有的12x12区域提取P-RP的特征数据,注意这里不仅仅是特征,因为这里的特征数据实际上包含了三个部分的数据:人脸分类信息,限位框信息和人脸关键点信息。
3.1.2 图像金字塔的建立
这里我们参见了Orso在文章《拒绝调包!且看MTCNN人脸检测推断过程详解!》中的表述:
minsize是指你认为图片中需要识别的人脸的最小尺寸(单位:px)。factor是指每次对边缩放的倍数。
我们已经知道,第一阶段会多次缩放原图得到图片金字塔,目的是为了让缩放后图片中的人脸与P-NET训练时候的图片尺度(12px * 12px)接近。怎么实现呢?先把原图等比缩放`12/minsize`,再按缩放因子`factor`(例如0.5)用上一次的缩放结果不断缩放,直至最短边小于或等于12。根据上述算法,minsize越大,生成的“金字塔”层数越少,resize和pnet的计算量越小。
所以我们可以知道,建立图像金字塔的过程就是从原图开始,以缩放因子factor为比例,不断进行resize,直至当前层的图像的最短边最短边小于或等于12。