Insightface/Arcface项目实践流程
Code:https://github.com/deepinsight/insightface
作者提供了完整的工程,能够基本满足并完成人脸识别的这个流程。
以下纯属个人实践记录,如有不当还望各位前辈多多指教。
人脸识别流程4步:1、检测;2、对齐矫正;3、提取特征;特征匹配
其中,检测对齐使用ssh或mtcnn并用dlib即可实现,然后对完成1和2步的人脸图像进行提取特征,作者使用的是改进后的resnet网络来提取特征(其中用的损失层为arcface loss),提取到的512维向量,归一化后内积得到相似度。
insightface让我感觉是一个大型的分类问题,其中的回归问题例如回归出人脸关键点并进行对齐矫正的代码作者已经帮我们写好了,所以这个流程仅仅有实践意义,理论讲述可以看作者发表的论文,讲述得很详细。
在实现一个优秀人脸识别系统的过程中,我觉得应该有几个重要环节:
1、干净而且大量的数据
2、优秀的网络结构
3、优秀的网络指挥棒(损失函数)
4、由以上1,2,3决定一个优秀的模型,作为一个大型的分类过程,优秀的模型能够提取到人脸更加独有的特征,具有更好的“辨别特性”
5、部署途径
(1)提取底图特征并保存数据库,就是要有每一个人的标准人脸图像,经过模型进行一遍提取之后的特征保存到数据库当中。
(2)索引匹配的人脸特征,对检测到的人进行检测、对齐矫正并经过模型提取到“独有”的特征,然后利用该特征与数据库中的人脸特征进行匹配,输出匹配程度最高的前几个人。
以下是数据清洗、数据检测对齐矫正、训练集和验证集制作、模型训练与评估的流程记录:
一、数据清洗,用的方法是先用作者的model对我的数据集进行一次特征提取和匹配,对于数据集中的每一个人我有一张标准的底图,提取了底图的特征并对每个人的所有图片进行匹配,将不匹配的图片剪切出来进行人工筛选,(人多的话并合理用一些工具软件,用上几天就能将人脸数据集清洗得很好了,但不能随意删除图片,确认是不同的人或图片质量十分差才能清掉)
二、数据检测对齐矫正,数据检测对齐矫正,可以用ssh和dlib,也可以直接用作者提供的align_dataset_mtcnn.py,ssh表现效果确实比mtcnn这个好,但是相对麻烦了一点,所以我这里直接用了作者的align_dataset_mtcnn.py。