MTCNN阅读笔记

参考资料1
参考资料2
论文:Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks
论文链接:https://arxiv.org/abs/1604.02878
官方代码链接:https://github.com/kpzhang93/MTCNN_face_detection_alignment

MTCNN(Multi-task Cascaded Convolutional Networks)算法是用来同时实现face detection和alignment,也就是人脸检测和对齐。文章一方面引入了cascaded structure(级联架构),另一方面在训练阶段提出一种新的 online hard sample mining, 用于提升训练精度。

1. 人脸检测的级联网络

文章的核心思想是原文的这一句话:our framework adopts a cascaded structure with three stages of carefully designed deep convolutional networks that predict face and landmark location in a coarse-to-fine manner. (我们的框架采用了三级精心设计的深层卷积网络的级联结构,可以粗略地预测人脸和地标位置)。

首先照片会按照不同的缩放比例,缩放成不同大小的图片,形成图片的特征金字塔。PNet 主要获得了人脸区域的候选窗口和边界框的回归向量。并用该边界框做回归,对候选窗口进行校准,然后通过非极大值抑制(NMS)来合并高度重叠的候选框。RNet 将经过 PNet 的候选框在 RNet 网络中训练,然后利用边界框的回归值微调候选窗体,再利用 NMS 去除重叠窗体。ONet 功能与 RNet 作用类似,只是在去除重叠候选窗口的同时,同时显示五个人脸关键点定位。

该算法的cascaded structure 主要包含三个子网络:Proposal Network(P-Net)、Refine Network(R-Net)、Output Network(O-Net),如Fig.1 所示。这3个stage对人脸的处理是按照一种由粗到细的方式,也就是原文中说的 a coarse-to-fine manner,在代码中体现得比较明显。另外要注意的是在Fig.1中一开始对图像做了multi scale的resize,构成了图像金字塔,然后这些不同scale的图像作为3个stage的输入进行训练,目的是为了可以检测不同尺度的人脸。
Fig1 级联框架PIPELINE
Fig.2中对三个级联网络进行详细介绍。
P-Net主要用来生成一些候选框(bounding box)。 在训练的时候该网络的顶部有3条支路用来分别做人脸分类、人脸框的回归和人脸关键点定位;在测试的时候这一步的输出只有N个bounding box的4个坐标信息和score,当然这4个坐标信息已经用回归支路的输出进行修正了,score可以看做是分类的输出(是人脸的概率),具体可以看代码。
R-Net主要用来去除大量的非人脸框。 这一步的输入是前面P-Net生成的bounding box,每个bounding box的大小都是24x24,可以通过resize操作得到。同样在测试的时候这一步的输出只有M个bounding box的4个坐标信息和score,4个坐标信息也用回归支路的输出进行修正。
O-Net和R-Net有点像,只不过这一步还增加了landmark位置的回归。 输入大小调整为48x48,输出包含P个bounding box的4个坐标信息、score和关键点信息。
在这里插入图片描述

2. 网络训练

采用三个任务来训练CNN检测器:面部/非面部分类 (face/non-face classification), 边界框回归(bounding box regression)和面部界标定位(facial landmark localization)。
(1) face classification损失函数:
采用的是交叉熵,它分类算法常用的损失函数,在这里是二分类问题。
Face Classification损失函数
(2) bounding box regression损失函数
采用欧氏距离损失(L2 loss),它是回归问题常用的损失函数。
bounding box regression损失函数
(3)facial landmark localization损失函数
同样采用欧氏距离损失(L2 loss)。
facial landmark localization损失函数
因为在训练的时候并不是对每个输入都计算上述的3个损失函数,因此定义了公式4用来控制对不同的输入计算不同的损失。可以在出,在P-Net和R-Net中,关键点的损失权重(α)要小于O-Net部分,这是因为前面2个stage重点在于过滤掉非人脸的bbox。β存在的意义是比如非人脸输入,就只需要计算分类损失,而不需要计算回归和关键点的损失。
training loss
Online hard sample mining 具体而言是这样做的:In particular, in each mini-batch, we sort the loss computed in the forward propagation phase from all samples and select the top 70% of them as hard samples. Then we only compute the gradient from the hard samples in the backward propagation phase.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值