人脸检测流程

人脸检测流程_第1张图片
人脸检测流程图如上图所示,对于每一步做相关分析.,人脸检测算法准备使用训练集CASIA-WebFace数据集及简单介绍,测试集使用MegaFace数据集。

Face detection

目前最火的开源人脸检测算法是Retinaface,所以为了得到比较好的人脸框准备使用Retinaface算法做人脸检测,Retinaface关于Pytorch的实现可以点击这个[链接]
(https://github.com/supernotman/RetinaFace_Pytorch),
人脸检测流程_第2张图片这个作者写的非常好,而且易于实现,RetinaFace训练测试使用的数据集是wider-face,该算法在widerface挑战赛中取得了the state of the art,Pytorch复现版本的算法训练使用的数据集也是widerface。然而原始的widerface数据集的标注信息是没有landmark的为了让测试结果更加精准,RetinaFace作者自己标注了人脸五点landmark。
这里有个值得注意的问题,在Retinaface训练的过程中,作者采用的数据增强是这样的[1] (英文原话见页底),意思是为了让细小的人脸模块可以更好的采集到,我们采用的方法是对原图进行随机正方形切块(边长为短边的0.3 ~ 1,在推理过程中代码是直接将原图resize为一个640*640的图片也就是说得到的landmark是对应resize后图片的landmark

Face Alignment

CASIA-WebFace数据集有10k多个人脸ID,总共有0.5M的人脸头像,这些头像都经过切割了,但是应该是为了后面更好的提取特征,所以对人脸对齐做进一步切割。
1.生成casia_landmark.txt文档
将retinaface 模块应用到所有的CASIA-WebFace上就可得到对应的五点landmark文档,casia_landmark.txt
2.仿射变换
由于人脸定位得到的人脸框框出的人脸不一定是正的,(因为拍摄的时候可能拍到的图片头像就是歪的),需要通过landmark来纠正人脸让对应的人脸是正的,这里定义了一个标准的五点landmark坐标,通过映射原来的landmark到新的landmark会得到一个33矩阵,通过这个矩阵对原图像做放射变换并切割,得到对应的人脸图像,具体代码,在网上找了一个还不错的,点这个链接,这里需要强调一下的是有些程序把人脸resize成11296的有些把人脸resize成112112的,这是因为对于不同的网络输入不一样的问题,在arcface中人脸resize成112112我们以这个作为标准,标准的五点人脸关键点是对称的(眼睛对称,嘴角对称,鼻尖在最中心),96 ->112只需将对应横坐标平移八个像素点就行了。
3.检测与对齐结合
这里其实就是将训练好的retinaface网络推理一遍CASIA-WebFace数据集(该数据集照片大小都是250250的),将其放大到640640得到对应的landmark。然后采用仿射变换及裁剪,把头像裁剪下来,标准的人脸检测数据集就做好了
(1):初始做检测的时候发现平均10张图片就有2张漏检,很快意识到了问题,对RetinaFace来说他的训练集照片人脸都是比较小的照片,但是现在的CASIA数据集人脸都比较大,如果还是用640640进行放大就会出现检测不到的情况,因此直接使用250250的图片做检测就好了。
(2):CASIA数据集虽然每张图片基本上对应的是一个人,但是也有图片是两个人的,两个人脸一张是ID的人脸,另一张其实是背景人脸,但是由于RetinaFace效果非常好,所以两张人脸都检测出来了,在这里我只取了比较大的人脸做这个人的ID小的人脸直接pass了,当然有可能会出错,我对于有多张人脸或者没有人脸的情况都做了一下记录,最后人工排查一下就好了。
(3):由于CASIA数据集有很多是黑白照片,我们需要使用cv2.cvtCOLOR函数将单通道图片换成多通道图片,实验证明,单通道图片变成多通道图片依然可以人脸框及landmark依然可以检测的很准确
(4):在检测过程中发现使用RetinaFace也会出现漏检的情况,我将图片尺寸从250250 缩小到160160,这样左右有1600张漏检的图片一下子少了1000张,RetinaFace对尺度比较小的图片检测效果好一点。剩下的那些图片就不做数据处理了,
(5):有些数据集照片又多张人脸这种情况下RetinaFace会得到多个bbox和landmark 这是没办法的,在这里选取图片中面积最大的头像作为目标ID的头像做对齐裁剪,

4.CASIA-WebFace数据集清洗
最终通过RetinaFace对CASIA-WebFace数据集做人脸检测得到493875张尺度为112*112的图片,大概比原数据集少了0.001左右,这是无关紧要的我觉得,但是这些数据有很多数据是有问题的,对于这些图片做人工排查。清除的数据主要是(1)一张图片有两个人脸,(2)人脸图片不属于那个人的ID, (3)特别模糊的图片 (4)角色化妆太夸张的图片

[1]Since there are around 20% tiny faces in the WIDER FACE training set, we follow [68, 49] and randomly crop square patches from the original images and resize these patches into 640 × 640 to generate larger training faces. More specifically, square patches are cropped from the original image with a random size between [0.3, 1] of the short edge of the original image. For the faces on the crop boundary, we keep the overlapped part of the face box if its centre is within the crop patch. Besides random crop, we also augment training data by random horizontal flip with the probability of 0.5 and photo-metric colour distortion [68].

你可能感兴趣的:(Face,Recognition,Face,Alignment,Face,Detection)