人脸检测之MTCNN

算法介绍

基于多任务级联卷积神经网络的人脸检测和对齐算法MTCNN,相对于上篇介绍的SDM算法在性能和准确率上有所提升,而且具有实时处理能力,参考论文Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks,文章主要通过三阶的级联卷积神经网络(P-Net,R-Net,O-Net)对任务进行从粗到细的处理,具体流程如下:

数据与处理:为应对目标多尺度问题,将原始图像resize到不同尺寸,构建图像金字塔,作为三阶级联架构的输入。
第一阶段,通过一个浅层的CNN快速生成候选窗口。该阶段是一个全部由卷积层组成的CNN,取名P-Net,获取候选人脸窗口以及人脸框回归向量。基于人脸框回归向量对候选窗口进行校正,之后采用非极大值抑制NMS合并高重叠率的候选窗口。
第二阶段,通过一个更复杂的CNN否决大量非人脸窗口从而精化人脸窗口。第一阶段输出的候选窗口作为R-Net的输入,R-Net能够进一步筛除大量错误的候选窗口,再利用人脸框回归向量对候选窗口做校正,并执行NMS。
第三阶段,该层比R-Net层又多了一层卷积层,进一步精化结果并输出5个人脸特征点。
与第二阶段相似,但这一阶段用更多的监督来识别人脸区域,而且网络能够输出五个人脸特征点位置坐标。

示意图和各层网络结构如下:


网络训练

整个的训练学习过程就是最小化下面这个函数,其中,N为训练样本数量,aj表示任务的重要性,bj为样本标签,Lj为上面的损失函数:

训练需要注意的点:

(1) 文中训练使用了在线困难样本生成(Online Hard sample mining)策略,即在一个batch中只选择loss占前70%的样本进行BP。也就是说抛弃了一些对强化分类没有多大作用的简单样本。文中表示,通过实验表明这样做能够进一步提升精度。
(2) 不同阶段,classifier、boundingbox regression和landmarks detection在计算Loss时的权重是不一样的;
(3) 训练数据共4类,比例3:1:1:2,分别是negative,IOU<0.3; positive,iou="">0.65;part face,0.4。

最终算法在FDDB表现如下:

对齐效果如下:

我们可以看到mtcnn相对其他算法性能上有明显的提升。

工程示例

工程地址:https://github.com/dreamocean/mtcnn

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import mxnet as mx
from mtcnn_detector import MtcnnDetector
import cv2
import os
import time
detector = MtcnnDetector(model_folder='model', ctx=mx.cpu(0), num_worker = 4 , accurate_landmark = False)
img = cv2.imread('timg0.jpg')
# run detector
results = detector.detect_face(img)
if results is not None:
total_boxes = results[0]
points = results[1]
# extract aligned face chips
chips = detector.extract_image_chips(img, points, 144, 0.37)
for i, chip in enumerate(chips):
#cv2.imshow('chip_'+str(i), chip)
cv2.imwrite('chip_'+str(i)+'.png', chip)
draw = img.copy()
for b in total_boxes:
cv2.rectangle(draw, (int(b[0]), int(b[1])), (int(b[2]), int(b[3])), (255, 255, 255))
for p in points:
for i in range(5):
cv2.circle(draw, (p[i], p[i + 5]), 1, (0, 0, 255), 2)
cv2.imwrite('timg0.png', draw)
cv2.imshow("detection result", draw)
cv2.waitKey(0)

人脸对齐输出如下:


人脸仿射变换对正如下:

face1 face2

参考文章:
http://blog.csdn.net/fuwenyan/article/details/73201680

如果觉得我的文章对您有用,请随意赞赏