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

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

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

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

  2. mtcnn人脸检测python_基于mtcnn和facenet的实时人脸检测与识别系统开发

    简介:本文主要介绍了实时人脸检测与识别系统的详细方法.该系统基于python/opencv2/tensorflow环境,实现了从摄像头读取视频,检测人脸,识别人脸的功能.本系统代码地址:real ti ...

  3. Ubuntu 下使用 FDDB 测试人脸检测模型并生成 ROC 曲线,详细步骤

    原 Ubuntu 下使用 FDDB 测试人脸检测模型并生成 ROC 曲线 2018年08月01日 20:18:44 Xing_yb 阅读数:101 标签: FDDB 人脸检测 模型测试 ROC 曲线 ...

  4. 使用FDDB人脸样本检测库,测试自己的人脸检测算法性能并生成ROC曲线。

    一,说明及环境 网上有关FDDB人脸检测库的使用以及ROC文件生成的文章太少,并且都无法检测opencv中自带的人脸检测算法.最近 工作的原因,需要用到FDDB库检测我们自己的人脸检测算法性能.所以认 ...

  5. (大佬)睿智的目标检测13——Keras搭建mtcnn人脸检测平台

    原文链接:https://blog.csdn.net/weixin_44791964/article/details/103530206 睿智的目标检测13--Keras搭建mtcnn人脸检测平台 学 ...

  6. MTCNN人脸检测及人脸关键点提取(学习记录)

    我看了很多关于MTCNN框架的文章,但基本上都是一概而过,本文章记录MTCNN每一步的流程及附上注释的代码. MTCNN框架主要由三大子网络组成,即P-Net,R-Net,O-Net. 三大子网络的区 ...

  7. Linux下使用Speedtest测试网速教程

    Linux下使用Speedtest测试网速教程 文章目录: 一.通过Speedtest官网直接测试网络速度 二.通过下载源码,在命令行中测试网速 1.下载安装 2.Speedtest的参数使用: 有时 ...

  8. OpenCV OMZ MTCNN人脸检测的实例(附完整代码)

    OpenCV OMZ MTCNN人脸检测的实例 OpenCV OMZ MTCNN人脸检测的实例 OpenCV OMZ MTCNN人脸检测的实例 #include <algorithm> # ...

  9. 性能测试入门(六)windows及Linux下做压力测试的注册表设置

    windows及Linux下做压力测试的注册表设置 from: http://www.cnblogs.com/tianzhiliang/articles/2400176.html TcpTimedWa ...

  10. 用Prime95来做linux下CPU压力测试

    Prime95是用来做linux下CPU压力测试的,由GIMPS (Great Internet Mersenne Prime Search)所提供,主要是透过运算找出梅森质数,质数(Prime nu ...

最新文章

  1. linux 中关于网络的配置方法
  2. MySQL InnoDB引擎锁的总结
  3. 【行业趋势】国内这10个AI研究院,你想好去哪个了吗?
  4. vue2.0基础学习(1)
  5. python下载图片、已知url_python 爬虫之requests爬取页面图片的url,并将图片下载到本地...
  6. Yii实现分页的两种方法
  7. 用hundred造句子_2020朋友圈感恩节祝福语大全:微信感恩节鞠躬的图片文案句子说说[多图]...
  8. sql server 内存_SQL Server内存性能指标–第5部分–了解惰性写入,空闲列表停顿/秒和待批内存授予
  9. Python生成requirements.txt方法
  10. 如何搭建apache+tomcat集群
  11. Docker提高拉取官网镜像的速度
  12. 《水晶报表自动补空行,补格线思路》 修正版 兼答Richard lee
  13. web在线播放flv视频
  14. mysql auto.cnf_MySQL之my.cnf配置
  15. 自定义通知图标音量电池没有的解决方法
  16. ICS课程学习(1)——概述
  17. Linux中的setenv与export
  18. 浅谈微机综合自动化系统在化工企业变电站中应用
  19. 手把手 Golang 实现静态图像与视频流人脸识别
  20. VSTO 部署安装的两种方法

热门文章

  1. Linux学习笔记之 Btrfs文件系统简介及使用
  2. Python获取打印机读数(东芝泰格)
  3. H5制作哪家强?四大H5页面制作工具大比拼
  4. 没有你不会的CAD?CAD知识整理上集
  5. JAVA基础知识汇总(思维导图)
  6. PHP采集利器:phpQuery,像jQuery一样轻松采集内容
  7. 高斯滤波 c++实现
  8. cefsharp 二次开发
  9. 嵌入式C语言volatile作用
  10. 嵌入式c语言 c语言_C和嵌入式C有什么区别?