Linux下使用FDDB 测试MTCNN人脸检测模型生成 ROC 曲线 您所在的位置:网站首页 人脸测试图 Linux下使用FDDB 测试MTCNN人脸检测模型生成 ROC 曲线

Linux下使用FDDB 测试MTCNN人脸检测模型生成 ROC 曲线

2023-07-20 05:35| 来源: 网络整理| 查看: 265

FDDB是全世界最具权威的人脸检测评测平台之一,是专门针对人脸识别算法的评测方法与标准。FDDB数据集官网:http://vis-www.cs.umass.edu/fddb/

下面介绍如何使用FDDB的源码生成人脸检测模型的ROC曲线。首先要有个人脸检测算法用来测试,这里使用MTCNN-Tensorflow人脸检测。

1、下载数据集和标注

下载FDDB人脸图片数据集,解压后文件夹名是originalPics;下载FDDB标注文件,解压后文件夹名是FDDB-folds。 下载页面

2、首先生成检测结果文件

首先要用人脸检测器对FDDB数据集进行测试,生成测试结果文件。在MTCNN源码运行test/RunOnFDDBLandmark.py生成10个检测结果文件(源代码用的python2,用python3运行有些地方需要修改,具体看报错信息,这里有个错误是“TypeError: ‘float’ object cannot be interpreted as an integer”,找到对应的位置,有个相除,此时用//代替/即可,参考博客。并且源码里面的一些文件路径根据自己放的位置修改)。其中的一个文件如下,输出数据必须按照这种格式,FDDB官方有说明,数据最后一行是输出的人脸置信度。若是用opencv检测人脸,关于如何用opencv输出人脸置信度参考这篇文章。 在这里插入图片描述

把十个检测结果文件按文件名编号改为 fold-01-out.txt,fold-02-out.txt…fold-10-out.txt。然后把这10个txt文件合成一个文件,在文件夹中使用如下命令:

cat * > result.txt。 3、打包标注文件

除了将算法检测结果文件打包成一个文件外,还需要将下载的FDDB标注文件打包。 FDDB-folds 文件夹中有 10 个 FDDB-fold-i.txt 文件,以特定顺序记录了所有图片的路径。在 FDDB-folds 文件夹中执行下面的指令来合并成一个文件。

cat FDDB-folds-%d.txt > imList.txt

FDDB-folds 文件夹中还有 10 个 FDDB-fold-i-ellipseList.txt 文件,记录了对应的人脸个数和位置信息。在 FDDB-folds 文件夹中执行下面的指令来合并成一个文件。

cat *ellipse*.txt > ellipseList.txt 4、opencv支持

编译FDDB测试源码需要用到opencv,如果没有安装opencv要安装opencv,注意:FDDB测试源码里面用的是老版本的opencv,这些已经在opencv4中去除了,所以只能用opencv4以前的版本,这里测试用的是opencv3.3。opencv3.3源码编译安装make过程出现了一个错误,解决办法看下面。 https://blog.csdn.net/guo_lei_lamant/article/details/81568346 https://m.douban.com/mip/note/685689002/

5、下载FDDB测试源码并稍作修改

在FDDB官网左边菜单选择Results,下载测试源码,解压后文件夹名是evaluation。 在这里插入图片描述 进入evaluation文件夹,打开Makefile修改。网上一些教程说要将前面的头文件包含和库包含改成下面的,我运行的时候没有修改opencv的包含也运行成功了,修改了反而报错,这个看情况而定。

INCS = -I/usr/local/include/opencv LIBS = -L/usr/local/lib -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_ml -lopencv_video -lopencv_features2d -lopencv_calib3d -lopencv_objdetect -lopencv_contrib -lopencv_legacy

(1)将Makefile中

evaluate: $(OBJS) $(CC) $(LIBS) $(OBJS) -o $@

修改为:

evaluate: $(OBJS) $(CC) $(OBJS) -o $@ $(LIBS)

否则会出现“对‘cvxxx’未定义的引用”,参考自这篇博文 (2)打开 evaluation 文件夹下的 common.hpp,因为读取的FDDB数据集图片是jpg格式,要将

//#define __IMAGE_FORMAT__ ".jpg" #define __IMAGE_FORMAT__ ".ppm" #define __CVLOADIMAGE_WORKING__

改为

#define __IMAGE_FORMAT__ ".jpg" //#define __IMAGE_FORMAT__ ".ppm" #define __CVLOADIMAGE_WORKING__ 6、编译运行

首先make,经过前面的修改后,make就不会报错了。要使用FDDB源码直接绘制ROC曲线需要安装gnuplot。

sudo apt-get install gnuplot

然后运行evaluate,evaluate的参数如下:

# evaluate程序的参数说明 ./evaluate [OPTIONS] -h : print usage -a fileName : file with face annotations (default: ellipseList.txt) # 注释文件必须是椭圆,因为代码中是按照椭圆的数据格式读取的 -d fileName : file with detections (default: faceList.txt) -f format : representation of faces in the detection file (default: 0) : [ 0 (rectangle), 1 (ellipse) or 2 (pixels) ] -i dirName : directory where the original images are stored (default: ~/scratch/Data/facesInTheWild/) -l fileName : file with list of images to be evaluated (default: temp.txt) -r fileName : prefix for files to store the ROC curves (default: temp) -s showMatchedImage # evaluate程序帮助中没有说明此参数,可以将椭圆及预测框画在对应图像上并显示出来

这里我测试使用命令,注意里面的文件路径需要根据自己存放的位置修改。

./evaluate -a ../ellipseList.txt -d ../results.txt -i ../originalPics/ -l ../imList.txt

运行完成后在 evaluation 文件夹中生成了 tempContROC.txt 和 tempDiscROC.txt 两个文件。文件中的第二列为横坐标,第一列为纵坐标,可使用python读取绘制ROC 曲线,也可以用gnuplot绘制ROC曲线,在FDDB官网下载脚本。 在这里插入图片描述 下载后解压,修改discROC.p,把里面plot的路径换成之前生成tempDiscROC.txt的路径。 在这里插入图片描述 然后用命令生成ROC曲线的图片保存在目录下:

gnuplot discROC.p

也可以用FDDB源码直接绘制ROC曲线,打开evaluation 文件夹下的 runEvaluate.pl,按照自己的路径修改前面的路径,最后三个分别是图片数据集,数据集标注,输出文件夹。

#### VARIABLES TO EDIT #### # where gnuplot is my $GNUPLOT = "/usr/bin/gnuplot"; # where the binary is my $evaluateBin = "./evaluate"; # where the images are my $imDir = "../originalPics/"; # where the folds are my $fddbDir = "../FDDB-folds/"; # where the detections are my $detDir = "../FDDB-PUTPUT/"; ###########################

在evaluation文件夹下执行

perl runEvaluate.pl

生成了 ContROC.txt, DiscROC.txt, ContROC.png 和 DiscROC.png 四个文件 在这里插入图片描述 参考自: http://www.freesion.com/article/879964870/ https://blog.csdn.net/haluoluo211/article/details/80698000 https://blog.csdn.net/jmu201521121021/article/details/87822352?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

FDDB问题: https://www.jianshu.com/p/9a41c63f8706

关于ROC曲线: https://www.cnblogs.com/dlml/p/4403482.html https://www.jianshu.com/p/2ca96fce7e81 https://www.imooc.com/article/48072



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有