1.MTCNN细节
本节将从训练与预测两个阶段分别解析MTCNN的细节。
1.1训练过程
- 训练的输入为什么不需要使用图像金字塔?
答:首先明确图像金字塔的作用:P-Net的输入为12* 12,而图像中人脸一般大于12* 12,那么P-Net根本不能进行预测,图像金字塔的作用就是缩放原图像使得大一点的人脸缩小到12* 12以下。而我们预先准备的训练集(随机在标注好的图像上进行裁剪,保存成12* 12的大小。裁剪后的图像,根据IOU,划分成负样本、正样本、部分样本),保证了12*12的框中包含人脸。 - P-Net、R-Net、O-Net的置信度输出为什么分别为1* 1* 2、2、2(P-Net是全卷积网络,R-Net、O-Net最后输出是全连接,全卷积网络的输出是三维的,全连接网络的输出是一维的)?
答:三个网络的最后一层使用的是softmax激活,所以有两个输出。(复现的时候可改为sigmoid激活,这里没有区别)。 - P-Net、R-Net、O-Net训练时为什么不需要用到NMS?
答:首先明确损失函数包含三个部分:置信度损失、边框回归损失、特征点位置损失。置信度损失包含正样本、负样本的损失,边框回归损失包含正样本、部分样本的损失。 - MTCNN的训练与YoLov3的训练做对比,YoLov3的训练集是将整张图像传入,而MTCNN的训练不能将整张图像传入?
答:本质原因是YoLov3的anchor机制。YoLov3中的训练样本实际上是anchor,边框回归是相对于anchor的;而MTCNN的边框回归是相对于建议框的偏移量。
1.2预测过程
- 为什么MTCNN预测时,输入图像可以是任意大小的?
答:P-Net是全卷积网络,全卷积网络的输入是通道数,而全连接网络的输入是特征(图像大小),在全连接网络中,输入图像的大小是固定的。 - P-Net的输出是R-Net的输入,R-Net的输出是O-Net的输入,其间需要经过resize这个步骤,因为输出不一定是正方形的,直接resize会导致图像变形影响后续网络的特征提取,那么这里resize有两种方法:由矩形输出填充后变成正方形输出后resize;从原图像中抠出一块正方形区域resize,那么这两种方法,哪一个好?
答:应选择从原图中抠出正方形区域,resize后作为下一个网络的输入,因为P网络的输出可能将人脸框小了(额头或者下巴没有框到),如果我们选择填充后resize,R网络可能直接将这个人脸置信度置为0,所以我们选择从原图中抠,丰富这张人脸信息。 - P-Net、R-Net、O-Net的输出为什么都要经过NMS(P网络经过NMS后,不是应该没有重合的框了吗)?
答:P网络的责任是宁选错,勿放过,所以P网络的NMS时,IOU的阈值设定的比较低(一般为0.6),所以依然有很多的重合框。而O网络的NMS是为了去除大框中包含小框的个别情况。