目前在学习论文SphereFace:Deep Hypersphere Embedding for Face Recognition.将一些预备知识总结与本文。
一. 数据集部分
1.CASIA-WebFace 源于论文Learning face representation from scratch
共有10575个不同个体,一共494414张面部图像。
2.VGG faces
版本1:源于论文Deep face recognition 2015年的BMVC论文。下载地址:http://www.robots.ox.ac.uk/~vgg/data/vgg_face/
数据集说明:2622个id。
版本2:9131 id。同上下载地址。
3. CelebA数据集
来源:Deep learning face attributes in the wild
介绍:CelebA是CelebFaces Attribute的缩写,意即名人人脸属性数据集,其包含10,177个名人身份的202,599张人脸图片,每张图片都做好了特征标记,包含人脸bbox标注框、5个人脸特征点坐标以及40个属性标记,CelebA由香港中文大学开放提供,广泛用于人脸相关的计算机视觉训练任务,可用于人脸属性标识训练、人脸检测训练以及landmark标记等,官方网址:Large-scale CelebFaces Attributes (CelebA) Dataset
4. CACD 2000数据集
来源:Face recognition and retrieval using cross-age regerence coding with cross-age celebrity dataset
介绍:数据集包含2000名年龄在16岁至62岁之间的名人的16万多张照片。共有163,446 images 。
下载地址:http://bcsiriuschen.github.io/CARC/ (我的网盘也有)
二. 预处理部分
对包含人脸的图像进行人脸框识别,人脸对齐和人脸剪裁。目前我整理了三种方式来得到裁好的人脸:
- 利用https://github.com/RiweiChen/FaceTools可以一步到位直接得到处理好的结果(但是只能在win下使用,python2下使用稳定,但是漏检人脸还不少)
- 根据香港中文大学提供的人脸框检测和人脸特征点检测的windows二进制程序实现。 http://mmlab.ie.cuhk.edu.hk/archive/CNN_FacePoint.htm
- 利用 MTCNN 算法来识别框和人脸关键点landmarks。这需要进一步处理,即根据landmarks得到一个变换矩阵,再将变换后的图像裁剪出来。(Pytorch实现,漏检好像很少,但一小部分结果不太精确)
暂时来看,方法3)还是相对可取的。
三. SphereFace代码(Pytorch)的研究
1)数据预处理的问题
代码train.py中的src_pts用来存放landmarks,然后利用函数alignment(img,src_pts)实现对齐后的结果。注意代码提供的landmarks的顺序和MTCNN算法提供的顺序略有不同。而且数值大小而有些偏差。我通过几个例子发现代码提供的landmarks比我利用 MTCNN 算法检测到的landmarks更准确一些。说明方式3)不是最准确的实现方式。暂时不讨论准确与否,这里说明一下具体差别:
例如在D:\人脸代码\sphereface_pytorch-master\data中的casia_landmark.txt文件,第一行为:
0000045/001.jpg 0 96 114 151 104 127 139 110 176 154 170
共有12个元素。第一个为图像名,第二个为图像ID,剩下10个元素,分别为左眼,右眼,鼻子,左嘴,右嘴的landmark坐标。
所以src_pts的内容是:【【96,114】,【151,104】,【127,139】,【110,176】,【154,170】】
而MTCNN的组织方式是直接产生landmarks:
array([[ 91.47854 , 152.12856 , 125.03657 , 107.52206 , 157.33965 ,
114.140945, 104.736916, 138.18289 , 178.11989 , 169.56583 ]],
dtype=float32)
所以相应的src_pts应该按列来取:【【91.5,114.1】,【152.1,104.7】,【125.0,138.2】,【107.5,178.1】,【157.3,169.6】】
可以看到还是有一些数值上的差别。另外,利用这个pytorch版本的MTCNN对0000045/005.jpg 进行检测时,发现误差特别大,所以这个代码还是不要用做训练预处理的好。
但目前好没有找到作者提供的andmarks的具体实现方式。
2)数据数目问题
在casia_landmark.txt中,只有 454590 images of 10574 identites。和最初的数据10575个不同个体,一共494414张数据不同。我觉得作者可能做了一些筛选吧。