Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks
MTCNN
1、四个问题
- 要解决什么问题?
- 人脸检测(face detection)和人脸对齐(face alignment)。
- 用了什么方法解决?
- 提出了一个深度级联网络结构,分成了三个阶段,从粗到精对人脸进行检测、定位人脸特征点、对齐。
- 此外,还提出了一个在线的难分样本挖掘策略(online hard sample mining strategy),可以提升训练精度。
- 效果如何?
- 模型的实时性很好。
- 在FDDB和WIDER FACE两个数据集中的人脸检测以及AFLW数据集中的人脸对齐任务任务达到 state-of-the-art。
- 还存在什么问题?
- 训练时间较长,收敛较慢。
2、模型结构
2.1、总体结构
- MTCNN的三层结构如上图。
- 阶段一:先使用全卷积网络,即P-Net,来获取到获选的人脸框和其对应的向量。随后根据回归框向量对候选框进行校正。之后使用非极大抑制(NMS)来去除高度重合的候选框。
- 阶段二:P-Net得到的回归框都送入R-Net中,随后拒绝大量错误框,再对回归框做校正,并使用NMS去除重合框。
- 阶段三:与阶段二类似,但是这里会额外进行人脸特征点(5个)的检测。
2.2、三个子网络
- Proposal Network(P-Net):
- 原始图片先resize到不同尺度,再输入。因为图片上不同人脸的大小可能不一致。
- 每次取一个
12
×
12
×
3
12 \times 12 \times 3
12×12×3的区域作为输入,输出有三个:
- 人脸分类:是否有人脸,2个输出;
- 边界框回归:回归得到的框的起始点的xy坐标和框的长宽,4个输出;
- 人脸特征点定位:5个人脸特征点的xy坐标,10个输出。
- Refine Network(R-Net):
- 以P-Net预测得到的回归框信息作为输入,先对原始图片进行切片,随后resize到固定尺寸。
- 输入为: 24 × 24 × 3 24 \times 24 \times 3 24×24×3,与P-Net的输出一样。
- Output Network(O-Net):
- 以R-Net预测得到的回归框信息作为输入,对原始图片切片,随后resize到固定尺寸。
- 输入为: 48 × 48 × 3 48 \times 48 \times 3 48×48×3,与R-Net的输出一样。
2.3、损失函数
- 分类损失,预测输入是否是人脸,采用交叉熵损失:
- bounding box回归损失,计算的是预测框和ground truth之间的偏差:
- 人脸特征点回归误差,预测人脸的5个特征点:双眼、鼻子、两个嘴角。使用L2损失:
- 由于会使用多个数据集进行训练,对于不同的训练数据,三类误差要有不同的权重,使用下式计算:
- Online Hard sample mining:在每个mini-batch中计算所有sample的loss,并按照降序排序,取前70%的sample用来训练。
2.4、训练数据构建
- 使用四种不同数据注释:
- positives:与ground truth的IOU高于阈值。
- negatives:与ground truth的IOU低于阈值。
- part faces:与ground truth的IOU处于前面两个阈值之间。
- landmark faces:有landmark标签。
3、参考资料
- Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks