Multi-task Cascaded Convolutional Networks (MTCNN)
开源资源:
论文链接:https://arxiv.org/ftp/arxiv/papers/1604/1604.02878.pdf
Github链接(tensorflow版本):https://github.com/AITTSMD/MTCNN-Tensorflow
1. MTCNN训练过程
1.1 data
input: resized image(pnet: 12x12x3, rnet: 24x24x3, onet:48x48x3)
label: image is face or not(bool)
roi: bbox in raw image(各层输入图像中人脸位置框图坐标)
landmark: landmark in raw image(各层输入图像中人脸特征点的位置坐标)
1.2 loss function
上式中:
LossMTCNN:各个网络对应的损失函数。
Lossdet:判断矩形框内是否为人脸(softmax),分类。
Lossroi:人脸框位置(square),回归
Losslandmark:特征点位置(square),回归
:各结构损失占比(以onet为例,onet注重人脸校准,所以人脸特征点部分损失占比较高)
pnet:MTCNN:roi:landmark = 1:0.5:0.5
rnet:MTCNN:roi:landmark = 1:0.5:0.5
onet:MTCNN:roi:landmark = 1:0.5:1
1.3 Proposal Net
将所有训练样本resize为shape=(12x12x3)的图像,通过两层卷积层后用[in_channel, shape, shape, out_channel]为[16,3,3,32]的卷积层将feature_map转变为shape=(1x1x32),最后通过3个不同输出通道的1x1卷积核得到pnet输出。
pnet层输出分为3部分:1). face classification:输入图像为人脸图像的概率 2). bounding box:输出矩形框位置信息 3). facial landmark localization:输入人脸样本的5个关键点位置。
trick
没有将网络输出做flatten,而是直接将卷积层结果作为pnet输出。倒数第二层卷积层kernel选择为[16,3,3,32],该层输出的feature_map结构为(1x1x32),而不是通常的flatten向量。主要是因为在应用端,每一个输入图像都是尺度不一的。如果增加flatten层,当尺度不一的图像输入pnet时,flatten层的特征向量也会不等长。而利用卷积层能将不同size的输入图像最终输出为shape=(1x?x?x10)的feature层,即每个scale的图像会得到(?x?)个候选框,具体细节在应用层展开。
1.4 Refinement Net
输入数据:所有训练样本resize为shape=(24x24x3)后的图像;输出结果:分为3部分:1). face classification:输入图像为人脸图像的概率 2). bounding box:输出矩形框位置信息 3). facial landmark localization:输入人脸样本的5个关键点位置。
1.5 Output Net
输入数据:所有训练样本resize为shape=(48x48x3)后的图像;输出结果:分为3部分:1). face classification:输入图像为人脸图像的概率 2). bounding box:输出矩形框位置信息 3). facial landmark localization:输入人脸样本的5个关键点位置。
1.6 Summary
从pnet到rnet再到onet,网络的输入图像尺寸越来越大,结构越来越深,提取的特征也越具有表现能力。通过不同的损失函数结构设计,每个网络在应用端实现不同的功能。
2. MTCNN应用过程
2.1 MTCNN作用
MTCNN应用主要步骤:
step1:将原始图像按一定scale缩小,直到resized image的尺寸小于min_image_size。得到多个不同尺寸的输入图像。
step2:将所有尺寸的输入图像输入pnet中,每个图像输出为(1,?,?,10),共多个候选框,通过det输出prob和nms去重后保留剩余的所有候选图。
step3:将pnet保留下的所有候选图resize到(24,24,3),将所有resized图像输入rnet,得到每幅图像对应的prob和bbox,将每幅图的bbox映射到原图中,通过det输出prob和nms去重后保留剩余的所有候选图。
step4:将rnet保留下的所有候选图resize到(48,48,3),将所有resized图像输入onet,得到每幅图像对应的prob和bbox,将每幅图的bbox映射到原图中,通过det输出prob和nms去重后保留剩余的所有候选图。
2.2 Proposal Net
HyperParameter
min_face_size:用于限制检测人脸的最小图像尺寸,小于min_face_size的图像将不会进行人脸检测。
scale_factor:face image pyramid 图像缩小尺度,图像迭代缩小尺度,直到图像尺寸小于训练网络所用的图像尺度12。
pnet_threshold:阈值,检测出的bbox图像为人脸的概率大于pnet_threshold会被保留,进行下一步筛选。
note:假设原始图像大小为 h x w,且ms = min(h,w),scalefactor为尺度变换因子,mfsize为最小图像尺寸,12/mfsize为图像缩小的初始尺度,k为满足不等式的最大正数。
如上情形,将有image pyramid将有k个不同尺度的图像组成,将这些图像送入pnet,每幅图像的返回值shape均为(1x?x?x10),所有这些候选图满足门限值和nms后,剩余的bbox在原始图像中截取的部分将作为rnet的输入。
2.3 Refinement Net
每幅图像输入rnet,得到1维输出向量,包含:1)该框图为人脸的概率,2)该框图的位置信息,3)该图像中的5个特征点位置信息。最后选取所有输入图像中满足rnet阈值和nms的候选框截取的图像作为onet的输入。
2.4 Output Net
onet在rnet基础上做优化,应用端流程与rnet大致一致。