最近团队成员DH测试了下Openface、Face_recognition、Insightface这三个开源的人脸特征提取方法,摘要在此。这三个项目的地址分别是:
- https://github.com/deepinsight/insightface
- https://github.com/cmusatyalab/openface
- https://github.com/ageitgey/face_recognition
特征向量的维度
Openface、Face_recognition、Insightface分别是128、128、512;
输入对齐人脸的尺寸
Openface、Face_recognition、Insightface分别是96*96、112*112、112*112;
Accuracy on the LFW Benchmark
Openface、Face_recognition、Insightface分别是92.92%、99.38%、99.74%;
训练数据集
Openface、Face_recognition、Insightface分别是(FaceScrub和CASIA-WebFace)、
(FaceScrub,VGGface,以及来自网络的图片)、(MS-Celeb-1M和VGGface2);
网络框架结构
Openface、Face_recognition、Insightface分别是Inception、ResNet、ResNet;
项目特点
- Openface出现最早,网络结构和训练数据集较老;
- Face_recognition模块安装和使用简便,支持mac、Linux和windows平台;
- Insightface模型结构和训练数据集比较新。
图片测试
测试方法为用mtcnn检测和对齐人脸,对齐人脸输入至三种方法的网络中提取特征,然后对特征进行两种相似度计算。
前五组是同一个人脸两张不同图片,后五组是不同人脸的两张图片。表中值的格式为(余弦距离/欧氏距离/运行时间):
1,从运行时间方面来看(运行时间是指提取人脸特征所消耗的时间),在测试服务器http://ml.gemfield.org上运行,Openface平均时间11ms,Face_recognition平均时间24ms,Insigthface平均时间22ms。Openface用时最短,openface的CNN模型网络是基于inception,相对后两者的ResNet,网络层数少,因此时间最短;
2、 从准确率方面来看,前五组是同一人脸两张不同图片,后五组是不同人脸的两张图片;
Insightface
就Insightface而言,推荐的余弦距离阈值0.33,Insightface的识别全部正确,如果想要采用欧式距离来衡量相似度,根据这十组的结果,阈值至少在20以上,当然得到实际阈值还需要大量测试;
Face_recognition
就Face_recognition而言,官方推荐的欧式距离阈值0.6,Face_recognition的识别全部正确,若想要采用欧氏距离,则阈值大概在0.9以上,但是从余弦距离来看,区分并不明显,前五组和后五组相差很小;
openface
在openface中存在一个重要的问题,openface官方使用的squared L2 distance(欧式距离平方)推荐阈值0.99,换算成欧式距离约等于0.99。在测试中将mtcnn检测和对齐的人脸输入至openface提取特征后,结果是错误的,探其原因是输入的对齐人脸的问题。下面两张人脸是从同一张图片crop的,左边的人脸是openface采用的dlib库检测和对齐方法得到的,右边的人脸是用mtcnn检测和对齐的人脸方法得到,两张图有很大不同。
可以看出openface采用的检测和对齐方法主要集中在面部中下方,而mtcnn的包含了整个面部。所以在测试时,将mtcnn检测和对齐的人脸输入至openface提取特征后,结果出现大量错误,如果改用openface采用的dlib库检测和对齐方法,结果全部正确。这一点在视频测试中也得到了验证,使用mtcnn检测和对齐的人脸,openface会出现大量的错误。
视频测试
Face_recognition使用欧式距离0.5作为阈值,Insightface使用余弦距离0.33作为阈值,在同一个视频上进行重复人脸的检测,Face_recognition检测到499个重复人脸,Insightface检测到819个重复人脸。最后总体感觉就不表了。
转自:https://zhuanlan.zhihu.com/p/43804018