https://blog.csdn.net/jmu201521121021/article/details/81151758#commentBox
insightface github地址: https://github.com/deepinsight/insightface
megaface database地址: http://megaface.cs.washington.edu/
一、简介
insightface 测试megaface数据集的流程:
对megaface和 facescrub数据集中的人脸对齐
提取megaface和facescrub中对齐后人脸的特征
移除megaface和facescrub中不干净的数据特征
进行megaface测试
二、环境准备
mxnet-cu80
tensorflow
openCV2.4
三、具体步骤
1.对megaface和 facescrub数据集中的人脸对齐
cd $INSIGHTFACE_ROOT/src/align/
# 由于facescrub中的部分图片没有后缀,所以要修改图片的名称。
python align_facescrub.py --input-dir='你的facescrubs数据地址' --output-dir='对齐后保存结果地址'
# align megaface
python align_megaface.py --input-dir=你的megaface数据地址' --name=' megaface' --output-dir='对齐后保存结果地址'
(本人在跑此步骤时,没有跑align_facescrub.py,整理facescrub数据集时,一直没有成功,问题有以下几点1.有些图片没有图片后缀2.图片,文件夹里有空格3.有些.jpg实际非图片,最终采用了megaface官网提供的对其好的facescrub数据集)
2.提取megaface和 facescrub对齐后的人脸特征
cd $INSIGHTFACE_ROOT/src/megaface
# gen_mefaface.py中需要修改变量:
# parser.add_argument('--model', type=str, help='', default='../model/spherefacei-s60-p0_15_96_112_0,95') ../model/spherefacei-s60-p0_15_96_112_0代表模型的地址和开头, 95代表第95个保存的模型
# megaface_out = '/raid5data/dplearn/megaface/MegaFace_Features' #输出特征的指定地址
# facescrub_out = '/raid5data/dplearn/megaface/FaceScrub_Features'
# megaface_lst = "/raid5data/dplearn/megaface/megaface_mtcnn_112x112/lst" 对齐后的文件地址下list
# facescrub_lst = "/raid5data/dplearn/megaface/facescrubr/small_lst"
python -u gen megaface.py
(本人的变量设置:
megaface_out = '/home/songsl/f/insightface/src/megaface/MegaFace_Features'
facescrub_out = '/home/songsl/f/insightface/src/megaface/FaceScrub_Features'
megaface_lst = "/home/songsl/f/insightface/src/megaface/out_megaface/lst"
facescrub_lst = "/home/songsl/f/insightface/src/megaface/out_facescrub/lst"
)
3.移除megaface和facescrub中不干净的数据特征
cd $INSIGHTFACE_ROOT/src/megaface
# remove_noises.py 中需要修改变量
# parser.add_argument('--suffix', type=str, help='', default='r100_cm_112x112') #算法名称
# parser.add_argument('--megaface-lst', type=str, help='', default='/raid5data/dplearn/megaface/megaface_mtcnn_112x112/lst')
# parser.add_argument('--facescrub-lst', type=str, help='', default='/raid5data/dplearn/megaface/facescrubr/small_lst')
# parser.add_argument('--megaface-feature-dir', type=str, help='', default='/raid5data/dplearn/megaface/MegaFace_Features')
# parser.add_argument('--facescrub-feature-dir', type=str, help='', default='/raid5data/dplearn/megaface/FaceScrub_Features') )
# parser.add_argument('--megaface-feature-dir-out', type=str, help='', default='/opt/jiaguo/MegaFace_Features_cm')
# parser.add_argument('--facescrub-feature-dir-out', type=str, help='', default='/opt/jiaguo/FaceScrub_Features_cm')
python -u remove_noises.py
(本人的环境变量设置
parser.add_argument('--suffix', type=str, help='', default='mxsphereface20c_112x112') #r100_cm_112x112
parser.add_argument('--megaface-lst', type=str, help='', default='/home/songsl/f/insightface/src/megaface/out_megaface/lst')
parser.add_argument('--facescrub-lst', type=str, help='', default='/home/songsl/f/insightface/src/megaface/out_facescrub/lst')
parser.add_argument('--megaface-feature-dir', type=str, help='', default='/home/songsl/f/insightface/src/megaface/MegaFace_Features')
parser.add_argument('--facescrub-feature-dir', type=str, help='', default='/home/songsl/f/insightface/src/megaface/FaceScrub_Features')
parser.add_argument('--megaface-feature-dir-out', type=str, help='', default='/home/songsl/f/insightface/src/megaface/MegaFace_Features_cm')
parser.add_argument('--facescrub-feature-dir-out', type=str, help='', default='/home/songsl/f/insightface/src/megaface/FaceScrub_Features_cm')
)
4.测试megaface (注意openCV版本为2.4 !!!!)
cd $devkit_ROOT/experiments
python run_experiment.py -p $devkit_ROOT/templatelists/facescrub_uncropped_features_list.json $MegaFace_Features_cm_82的文件夹地址 $FaceScrub_Features_cm_82文件夹地址 _mxasmr50_112x112.bin $保存结果的地址
# 其中 _mxasmr50_112x112.bin是算法的名称+ .bin,由remove_noises.py中的--suffix 参数决定
(本人测试命令:使用的是facescrub croped的图片
python run_experiment.py ../MegaFace_Features_cm ../FaceScrub_Features_cm _mxsphereface20c_112x112.bin ../results_f2/ -s 1000000 2>&1|tee log_f2
)
5.测试结果
Done matching! Score matrix size: 3530 1000000
Saving to ../results_f1/otherFiles/facescrub_megaface_mxsphereface20c_112x112_1000000_1.bin
Loaded 3530 probes spanning 80 classes
Loading from ../results_f1/otherFiles/facescrub_facescrub_mxsphereface20c_112x112.bin
Probe score matrix size: 3530 3530
distractor score matrix size: 3530 1000000
Done loading. Time to compute some stats!
Finding top distractors!
Done sorting distractor scores
Making gallery!
Done Making Gallery!
Allocating ranks (1000080)
Rank 1: 0.819454
Creating feature list of 1000000 photos for set 1
生成的文件如下:
#######################################################
本次使用的模型(作者提供)为:LResNet100E-IR,ArcFace@ms1m-refine-v2
最终测试结果见下图:
以下为insightface 作者megaface跑分:
rank 1:搜索结果中最靠前的一张图是正确结果的概率,一般通过实验多次来取平均值。测试搜索的rank1 accuracy
需要注意的是,测试时,对facescrub里的每个人,例如此人有N张图片,则每次取1张图片连同所有的distractor作为gallery,将此人的所有剩余其他图片作为probe来进行查询,统计rank-1和rank-10准确率。如果有M个人,每人有N张图片,则总计统计M*N*(N-1)次查询的rank-1和rank-10准确率。
"这29人在统计结果时会形成55608条记录,实际我们的算法使其中25232条均为Rank-1错误,错误率高达45.37%。若扣除这29人,则我们的算法在余下51个人的Rank-1准确率为88.87%。因此可以解释为什么我们的Rank-10准确率与megaface榜上前三接近,但Rank-1准确率相差很多。"
此外,80个人的3530张人脸中,其中至少有6张身份错误,这6张身份错误的图片对结果统计也有一定影响,但远远小于上述29个人的影响。
未去除之前 3530张图片
去除29人以后(1236张),还剩2294张图片.
本人扣除这29人,则算法在余下51个人的Rank-1准确率为83.97%.
最后,切记,megaface的测试是以L2距离来度量的,需要根据你训练的模型实际情况,确定是否要对特征进行归一化。
#########################################
本测试内存为32G,跑100w 计算Rank 1时,内存消耗高达28G.
此文章仅供参考,如有不对,请指出,谢谢!
#############主要参考博客如下##################
1.megaface初试
https://blog.csdn.net/nus_cs/article/details/78426486
2.megaface测试流程
https://blog.csdn.net/realmanma/article/details/77429726?utm_source=blogxgwz9#commentBox
3.【ArcFace/Insightface论文中文版】ArcFace: Additive Angular Margin Loss for Deep Face Recognition
https://blog.csdn.net/generalsong/article/details/83625751
4.insightface测试megaface流程
https://blog.csdn.net/jmu201521121021/article/details/81151758#commentBox