上一篇我们讲到了人脸识别技术发展的三个阶段,今天我们正式进入主题,人脸识别的第一步:人脸检测。人脸检测是人脸识别的难题之一,作为这个星球的主宰者人类,我们可以很轻松的分辨出看到的东西里是否有人脸。但是对于只有0和1的计算机来说,要教它认识人脸那可不是一件容易的事。
现在公开发表出来的人脸检测算法有很多,不过不论算法怎么变化,每一个人脸检测算法都必须得考虑到以下几个情况:
- 图片中有多张人脸怎么处理
- 不同人的不同拍摄角度的相片如何分辨
- 不同肤色、表情、脸型如何辨别
- 眼睛、头发、头部饰品的遮挡如何处理
- 光照变化和成像条件不一致如何处理
篇幅有限,我们这里就拿比较流行的MTCNN算法来介绍人脸检测技术。MTCNN包含三个阶段:
- 1) 利用一个浅层的CNN快速产生候选窗口
- 2) 利用一个更复杂的CNN排除掉大量非人脸窗口
- 3) 利用一个更强大的CNN进一步改善结果,并输出人脸关键点位置。
其过程大概是这样:首先图像经过金字塔,生成多个尺度的图像,然后输入PNet, PNet由于尺寸很小,所以可以很快的选出候选区域,但是准确率不高,然后采用NMS算法,合并候选框,然后根据候选框提取图像,作为RNet的输入,RNet可以精确的选取边框,一般最后只剩几个边框,最后输入ONet,ONet虽然速度较慢,但是由于经过前两个网络,已经得到了高概率的边框,所以输入ONet的图像较少,然后ONet输出精确的边框和关键点信息.