linux使用mtcnn进行人脸检测,Linux下使用FDDB 测试MTCNN人脸检测模型生成 ROC 曲线

本文详细介绍了如何利用FDDB数据集和源码评估人脸识别算法性能,包括下载数据集和标注文件,生成检测结果,打包标注文件,修改和编译FDDB测试源码,以及绘制ROC曲线的过程。通过运行FDDB提供的evaluate程序和gnuplot脚本,可以得到算法的ROC曲线,从而分析其检测效果。
摘要由CSDN通过智能技术生成

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

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

1、下载数据集和标注

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

7152a094411b4c3da060ac9b100e6563.png

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

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

7216d72d9f64058961f204e1bd9f7b3e.png

把十个检测结果文件按文件名编号改为 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。

19e217f1ab6f3778ed3b231a761f5093.png

进入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官网下载脚本。

229238d7623fa16bdc92866993ac4c48.png

下载后解压,修改discROC.p,把里面plot的路径换成之前生成tempDiscROC.txt的路径。

11ee72528634d6089b1caeb97686b6d5.png

然后用命令生成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 四个文件

8c48eca64e33d1721dcd37b086057872.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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值