MTCNN是多任务级联CNN的人脸检测深度学习模型,该模型中综合考虑了人脸边框回归和面部关键点检测。该级联的CNN网络结构包括PNet,RNet,ONet。本文主要介绍人脸检测中常用的数据处理方法,包括Bounding Box绘制,IOU计算,滑动窗口生成,回归框偏移值计算,面部轮廓关键点以及面部轮廓关键点回归。
PNet(Propose NetWork) 用来获取面部窗口和相应的候选框的回归向量。然后采用非极大值抑制方法non-maximum suppression(NMs)对生成的面部候选框进行合并操作。PNet网络结构如下:
RNet(Refine Network)获取PNet检测出来的人脸候选框,进行网络训练,进一步矫正人脸候选框的回归向量,并同样对候选框执行非极大值抑制。RNet网络结构如下:
ONet(Output Newwork)主要生成最终的人脸回归框和面部轮廓关键点。ONet的网络结构如下所示:
本文主要介绍回归框的PNet/RNet/ONet数据预处理部分的相关算法。由于PNet的网络输入是12*12的图片,所以要对训练图片进行预处理。本文采用的数据集为WIDER FACE数据集,可以从如下地址下载:
该数据集有32,203图片并且有93,703张脸被标记,如下图所示:
首先读取标度的人脸图片数据,如下所示:
可以用PIL把图片中人脸的bounding box绘制出来,示例代码如下:
可以通过滑动窗口或者随机采样的方法获取训练数据,训练数据分为三种正样本,负样本,中间样本。其中正阳本是生成的滑动窗口和Guarant True Box的IOU大于0.65,负样本是IOU小于0.3,中间样本是IOU大于0.4小于0.65。
IOU(Intersection-Over-Union)的计算流程如下:
蓝色的框为生成的滑动窗口,红色的框为Guarant Box,其中(x, y)表示回归框的顶点坐标。IOU为两个框相交的面积除以两个框的总面积,如果IOU越大表示生成的滑动窗口和真实的窗口越接近。这样IOU的计算公式可以表示为:
IOU的计算代码如下所示:
其中box为滑动窗口,boxes为多个guarant box(一个图片可以有多个人脸,所以会有多个guarant box)。
那么怎么生成滑动窗口的图片呢?比较简单的方式是采用随机方法,如下所示:
生成12*12的滑动窗口图片示例如下所示,是一个负样本:
考虑到直接采用坐标信息进行回归框的预测,网络收敛比较慢。所以在回归框预测的时候一般采用回归框的坐标偏移进行预测,相当于归一化的一种方式。回归框的坐标偏移如下图所示:
生成滑动窗口后,对应滑动窗口和Guarant True Box的偏移值,即可算出来,如下所示:
这样生成滑动窗口的时候,对正样本及中间样本,同时保存相应的offset值,如下所示:
生成Offset示例代码如下所示,主要是随机生成一个(x,y)坐标的偏移值:
在人脸检测的时候,除了用到回归框的信息外,还会利用到人脸面膜轮廓的关键点信息,主要包括眼睛,嘴,鼻子的坐标。该训练数据可从如下地址下载到:
上述的数据集包括LFW中的5,590张图片和7,876张从网上下载下来的图片,坐标信息包括:左眼,右眼,鼻子,左嘴,右嘴。例如下面坐标对应图片为:(x1,x2,y1,y2)
Bounding Box和面部landmark生成代码如下所示:

人脸的面部轮廓关键点不采用绝对坐标,同样使用的是回归值,不过该回归值对应的是Bounding Box的相对坐标,如下所示:
相应的计算公式如下所示:
对所有的landmark点计算offset后生成如下数据:
那么如何生成训练数据的面部轮廓关键点呢?生成方法类似于回归框的方式,在guarand true landmark点上加上一个随机偏移量,然后再计算offset值。示例code如下:
如果面部关键点的训练数据比较少,可以通过数据预处理的方式(比如回归框图像镜像,翻转等操作)增加landmark训练数据。
到此这篇pointrcnn训练自己的模型(mtcnn模型训练)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/rfx/15890.html