MTCNN人脸识别趟坑实录2019
MTCNN论文相关的基本原理
近期在研究MTCNN的人脸识别。感觉坑还是有一些的,值得备注下供大家参考。
论文里面的图就不贴了,阅读了很多博客,大部分都是从论文中大致翻译过来的内容,但是细节提得就不多了。
网络分为三个:P-Net、R-Net和O-Net。虽然每个网络的构造大致相同,功能却有很大区别,训练方式也大有不同。本文会详细描述。
单纯从网络构造和训练方式入手,思维略带跳跃性。从【识别过程】开始理解,会对整体网络的工作方式很有帮助。笔者一开始是正向理解,绕了很多弯路。
从识别过程理解
从输入一张图片开始
P-Net的功能:
如果我们需要从大小无关的图片中提取出来脸部区域的大致位置,可以这样做。用成等比大小的【小格子组】从上到下,从左到右,扫遍整张图,如果有的格子的人脸评分很高,那么我们就找到了目标区域。P-Net即是实现这个功能。P-Net的训练过程将整张图缩成固定的12像素,传入网络,输出是人脸的得分,及人脸BoundingBox(以下简称BB)的回归值。通过P-Net,我们可以先将测试图按照论文中金字塔的缩减方式进行素材累加(相当于将【扫描基准格】按照金字塔比例进行放大),然后将所有金字塔图片成批的传入网络,输出的结果再除以对应的缩放比例,依据BB的回归值进行精调,即可获得原图中大致的人脸范围。关于BB的生成和回归值精调,牵扯到的一些算法,比如NMS(非极大值抑制)就不累述了,目的是去除很多因为金字塔生成的重叠BB。将P-Net输出的所有BB从原图中扣