目录
一、前言
整理之前有关人脸识别方面的一些工作,使用RetinaFace+ArcFace的Pytorch版本复现代码对人脸进行识别。
二、资源
1、RetinaFace的人脸检测和人脸对齐代码
人脸检测和人脸对齐部分代码参考:https://github.com/biubug6/Pytorch_Retinaface,该代码中也包含人脸识别,测试过期效果,不如ArcFace,感兴趣的可以试下。
2、ArcFace的人脸识别代码
人脸识别代码参考:https://github.com/TreB1eN/InsightFace_Pytorch。
三、测试
整合了RetinaFace的人脸检测和人脸对齐代码和ArcFace的人脸识别代码,使用LFW数据进行测试,即LFW人脸图片->人脸检测->人脸对齐->人脸识别->测试结果。测试方案如下:
(1)人脸检测中,对于RetinaFace,采用代码中的MobileNet0.25-RetinaFace和Resnet50-RetinaFace两种模型;
(2)人脸对齐中,代码中的人脸对齐有相似变换(get_similarity_transform_for_cv2)、仿射变换(getAffineTransform);为了验证不同变换的效果,本人也加入了透视变换(getPerspectiveTransform),共3种变换进行测试;
(3)对于ArcFace,采用代码中的MobileFacenet-ArcFace和IR-SE50-ArcFace两种模型。上述三种情形共组成12种方案。
测试集使用LFW公开数据集中的lfw_funneled和pairs.txt,pairs.txt中共组成6000对人脸,3000对同一人和3000对不同人。分别取12种方案中人脸识别阈值的最优阈值,对应的测试结果如下图所示。
从上图中可以看出,Resnet50-RetinaFace+相似变换+IR-SE50-ArcFace组合取得最优效果,准确率为99.43%,而RetinaFace论文(链接为:https://arxiv.org/pdf/1905.00641.pdf)中使用的RetinaFace+ArcFace组合在LFW上的accuracy为99.86%。
本测试基于Pytorch在LFW上的验证测试相差0.43%。经过查看论文和代码分析,造成差异的因素可能有:(1)论文作者公开的开源代码(链接为:https://github.com/deepinsight/insightface/tree/master/detection/RetinaFace)中使用的是MXNet,这里使用的是Pytorch。(2)RetinaFace论文中没有指明使用的的基础网络结构;(3)RetinaFace论文中使用了5个SSH(开源代码中默认使用的是3个),而Pytorch版本(https://github.com/biubug6/Pytorch_Retinaface)使用了3个SSH,如下图所示;
后面有时间将整理RetinaFace+ArcFace在公开数据集CASIA-FaceV5上的测试结果。
欢迎探讨。