MTCNN理论笔记

作者: 榴莲薄饼 | 来源:发表于2018-08-25 17:21 被阅读0次

    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

    Loss_{MTCNN}=\alpha _{dec}Loss_{dec} + \alpha _{roi}Loss_{roi}+\alpha _{landmark}Loss_{landmark}

    上式中:
    LossMTCNN:各个网络对应的损失函数。
    Lossdet:判断矩形框内是否为人脸(softmax),分类。
    Lossroi:人脸框位置(square),回归
    Losslandmark:特征点位置(square),回归
    \alpha:各结构损失占比(以onet为例,onet注重人脸校准,所以人脸特征点部分损失占比较高)
    pnet:\alphaMTCNN:\alpharoi:\alphalandmark = 1:0.5:0.5
    rnet:\alphaMTCNN:\alpharoi:\alphalandmark = 1:0.5:0.5
    onet:\alphaMTCNN:\alpharoi:\alphalandmark = 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

    PNet流程
    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为满足不等式的最大正数。ms*(12/mfsize)*scale_{factor}^k<12
    如上情形,将有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大致一致。

    相关文章

      网友评论

        本文标题:MTCNN理论笔记

        本文链接:https://www.haomeiwen.com/subject/copwiftx.html