megaface测试流程

来源:互联网 发布:怎么淘宝开店 编辑:程序博客网 时间:2024/06/09 23:54

前段时间利用caffe训练了一个人脸识别的模型,在megafaceRank-1 Identification Accuracy with 1 Million Distractors”上达到了78.23%,勉强居于第7名(截止至2017-08-26),结果链接:http://megaface.cs.washington.edu/results/facescrubresults.html(笔者只是本地测一下玩玩,检验一下自己模型的性能,尚未提交至官方)

 

本次测试只针对Challenge 1FaceSrub,也是最具代表性的情形。通俗地说,就是给定probeFaceSrub)数据集,在100万的distractors环境下,测试搜索的rank1 accuracy

 

闲话少说,首先看看需要做哪些准备工作

1)人脸预处理工具(检测+对齐),人脸特征提取器(亦即你所使用的人脸识别模型)

2megaface测试数据集和devkit,我下载的文件有:

MegaFace Dataset65GB),即Gallery dataset,或Distractors

FaceScrub full tgz —16.4 GB,即probe(我选的是原始图片,即uncropped

Linux Development Kit (.zip) (.tar.gz) —16 MBpython程序,给定特征文件,用来计算测试结果的

这些在官网上都能找到,当然前提要邮箱申请,基本秒回,不用等哈

 

接下来就是图片的预处理以及特征文件如何保存了

大体上来讲,经过检测+对齐裁剪之后的人脸图片,其保存的目录结构要和原始图片一致,例如原始图片目录为FlickrFinal2/999/99900781@N08/9838939723_0.jpg对齐裁剪后保存为Megaface_1m_aligned/999/99900781@N08/9838939723_0.jpg。每张原图都有一张对应的对齐图片,不能多也不能少,尽量保存为同名文件。

如果只是本地自己测试不想提交的话,为了节省处理时间,按照devkit/templatelists/目录下的megaface_features_list.json_1000000_1facescrub_uncropped_features_list.json处理对应的文件列表就行了。前者包含1000000张干扰图片,后者包含80个名人约3000多张用于做搜索目标的图片。Megaface Dataset的处理和FaceScrub是有些区别的

Megaface Dataset作为干扰项,处理不需要多精细,并且每原图片都有一个对应的json文件里面存放了bbox坐标。我的办法是:先做人脸检测,选取和bboxoverlap最大且在0.5以上的那个rect作为目标检测框,继而进行对齐裁剪;如果未检测到人脸或者overlap不合格,直接按照bbox进行裁剪即可

FaceScrub直接关系到搜索的准确率,不能马虎。我的处理办法是:先对每张图片进行人脸检测,没检测到的,文件名打印出来,直接从原图截图去抠;因为图片量本身不多,所以再人工检查下,80个目录,每个目录下面都是同一个人,把错误的图片替换掉(同样是从原图上抠)

 

图片对齐好之后,即开始提取特征了,这里需要注意几点

特征文件保存的目录结构也要遵循之前原则,例如Megaface_1m_features/999/99900781@N08/9838939723_1.jpg_my-algorithm.bin,在原始文件名后面加后缀(_算法名称.格式

每个图片文件保存一个特征文件,特征文件的保存方法是:先保存文件头,后面再存特征,我的特征是512维,C++示例代码

struct head_t{    int32_t rows;    int32_t cols;    int32_t step;    int32_t dtype;};struct head_t header;header.rows = 512;header.cols = 1;header.step = 4;header.dtype = 5;FILE* fp;fp = fopen(savedPath.c_str(), "wb");fwrite(&header, 4, 4, fp);fwrite(feature.data(), 4, 512, fp);fclose(fp);


 

最后,就是调用devkit里面的python测试程序了,具体的使用方法大可以参考readme,这里贴上我的调用命令吧,涉及到个人信息的部分隐藏:

python run_experiment.py -p ../templatelists/facescrub_uncropped_features_list.json YOUR_PATH/Megaface_1m_features YOUR_PATH/facescrub_features _YOUR_ALGORITHM.bin YOUR_PATH/results -s 1000000

 

经过约十几二十分钟的等待,就能看到结果啦

 

 

最后,切记,megaface的测试是以L2距离来度量的,需要根据你训练的模型实际情况,确定是否要对特征进行归一化。


原创粉丝点击