FDDB人脸库评价人脸检测模型超详细步骤

FDDB人脸库评估步骤

        为了更好地了解各类模型性能,并能有统一的维度横向比较各类模型,可以使用FDDB人脸库对自己的人脸检测模型进行评价。在使用FDDB人脸库评价的过程中遇上了很多坑,下文详细地记录了遇到的所有的坑。

目录

FDDB人脸库评估步骤

1. 相关官网网址记录

2. 根据待测detector生成检测结果

3. FDDB库资源的下载与处理

4. 运行evaluate.cpp进行评估

5. 绘制评估结果ROC图


1. 涉及官网网址记录

首先,记录一些官网网址:

接下来是详细的步骤: 

2. 根据待测detector生成检测结果

一、使用自己的detector生成规定格式的预测框信息文档(FDDB_dets.txt)规定格式如下:

 

  

  • 图片名
  • 预测框个数(x)
  • 预测(矩形)框1信息:左顶点x坐标,y坐标,宽,高,预测框置信度(score)
  • 预测(矩形)框2信息
  • .....
  • 预测(矩形)框x信息

3. FDDB库资源的下载与处理

二、下载FDDB人脸库中提供的图片(originalPics)、真值信息(FDDB-folds)、评价工具(evaluation)

以上资源可从FDDB人脸库官方链接(http://vis-www.cs.umass.edu/fddb/)中下载得到:

评价工具(evaluation)官方下载链接http://vis-www.cs.umass.edu/fddb/evaluation.tgz

接下来详细介绍各资源内包含的内容:

 

(1) 原始图片

该文件夹中共包含了2845张人脸图片,共有5171个人脸,其中会按年、月、日建立文件夹并存放,图片名字格式为“img_number.jpg”:

各位可以以此检查是否有漏下载或误下载。

(2) 真值信息(Label信息)

该资源下载后会显示是一个.gz文件,但是其实它是.tgz文件,该后缀文件在linux系统可以直接通过命令行进行解压,由于我的电脑是win8,所以我下载了一个快捷工具7-zip进行解压(其实也可以用cmd命令行)。

第一次解压结果还是一个文件:

需要对以上文件再进行一次解压。上一步的解压可以使用任何解压工具,但是这一步的解压需要使用能支持文件格式的解压工具,例如7-zip。解压结果如下:

 解压得到20个txt文件,这20个文件分批次记录了FDDB图片集的路径信息和真值label信息,其中FDDB-fold-xx.txt是记录包含年、月、日路径的图片名信息;FDDB-fold-ellipseList.xx.txt是依照规定格式记录的图片真值框信息。为了代码遍历方便,常将这20个文件统一记录在一个路径信息文档和一个真值框信息文档中:

(3) 评价工具(evaluation)

同上,该资源下载后也需要二次解压,得到如下内容:

具体介绍见第三部分。

4. 运行evaluate.cpp进行评估

三、VS运行evaluate.cpp得到ROC图绘制信息ContROC.txt和DiscROC.txt

(1) 使用环境版本信息

VS2017使用debugX64编译,opencv3.41(64bit)

(2) 使用vs创建C++项目,为项目添加opencv属性页,设置多线程调试/MDd

(3) 修改代码

因为是在debugX64下运行,所以注销了WIN32的选择:

 且是直接在vs运行,所以不用考虑cmd执行exe时未带参数的情况,注销该部分代码:

并将带参填写的内容直接写入代码中: 

最后源代码中的输出使用的是输出到某指定设备的cerr,为了方便调试,改成了cout。

(4) 运行代码

需要把所有的.cpp、.hpp都添加导入到创建的项目中,并在.cpp中加上#include "stdafx.h"头文件:

(5) 生成结果

最终,在该vs项目目录下得到两个txt文件:

 里面记录了连续和离散检测ROC图中TP、FP轴坐标情况。

5. 绘制评估结果ROC图

 四、使用perl、gnuplot生成ROC图

该步骤具体的流程是,使用perl运行runEvaluate.pl文件,将.txt转化成ROC图的绘图信息.p,例如xy轴、轴间隔、标点、图片名、画线、输出位置等信息;然后使用gnuplot编译.p文件,根据其中绘图信息绘制图片,并输出到指定目录。

(1) 下载、安装、配置perl、gnuplot

http://jingyan.baidu.com/article/9f7e7ec0b798ae6f281554e9.html?st=2&os=0&bd_page_type=1&net_type=1  

(2) 修改runEvaluate.pl代码

代码如下:

#!/usr/bin/perl -w
use strict;
#### VARIABLES TO EDIT ####
# where gnuplot is gnuplot的exe文件绝对路径
my $GNUPLOT = "D:/gnuplot/gnuplot/bin/wgnuplot"; 
# where the binary is evaluate的exe文件绝对路径
my $evaluateBin = "F:/evaluation/evaluation/evaluate.cpp"; 
# where the images are fddb图片总路径
my $imDir = "F:/FDDB/originalPics/"; 
# where the folds are fddb路径信息、真值框信息文档路径
my $fddbDir = "F:/FDDB/FDDB-folds"; 
# where the detections are 最终生成的ROC图像存放位置
my $detDir = "F:/FDDB/"; 
###########################

my $detFormat = 0; # 0: rectangle, 1: ellipse 2: pixels

sub makeGNUplotFile
{
my $rocFile = shift;
my $gnuplotFile = shift;
my $title = shift;
my $pngFile = shift;

open(GF, ">$gnuplotFile") or die "Can not open $gnuplotFile for writing\n"; 
#print GF "$GNUPLOT\n";
print GF "set term png\n";
print GF "set size 1,1\n";
print GF "set output \"$pngFile\"\n";
#print GF "set xtics 500\n";
print GF "set ytics 0.1\n";
print GF "set grid\n";
#print GF "set size ratio -1\n";
print GF "set ylabel \"True positive rate\"\n";
print GF "set xlabel \"False positives\"\n";
#print GF "set xr [0:2000]\n";
print GF "set yr [0:1.0]\n";
print GF "set key right bottom\n";
print GF "plot \"$rocFile\" using 2:1 title \"$title\" with lines lw 2 \n";
close(GF);
}

my $gpFile = "F:/evaluation/evaluation/ContROC.p"; #存放ContROC图绘图信息的.p文件绝对路径(需要自己先生成)
my $gpFile1 = "F:/evaluation/evaluation/DistROC.p"; #存放DistROC图绘图信息的.p文件绝对路径
my $title = "FaceBoxes";

# plot the two ROC curves using GNUplot
makeGNUplotFile("F:/evaluation/evaluation/tempContROC.txt", $gpFile, $title, $detDir."ContROC.png");
makeGNUplotFile("F:/evaluation/evaluation/tempDiscROC.txt", $gpFile1, $title, $detDir."DiscROC.png");

(3) 运行生成.p文件

Windows+r 打开cmd, 在命令行进入runEvaluate.pl所在路径,再输入perl runEvaluate.pl 运行,就会在你指定的路径下生成ContROC.p和DistROC.p文件。其实.p文件语法也比较简单,熟悉之后可以不再用上述代码生成对应的.p文件,而是根据已有.p文件进行个性化功能要求的修改(或者直接手工书写)。

(4) 使用gnuplot绘图

因为.p文件已经包含了具体怎么绘图的信息,gnuplot就是根据其中的信息绘制出一个图,其中一个ROC.txt包含了一个检测方式的图坐标信息,对应的.p文件也只包含了一个检测方式的图绘图信息,故使用处理一个.p文件就能生成一个图:

直接将想要绘制的.p文件拖入至图形编辑界面

也可以通过file——>open打开 

放入想要绘制的.p文件 

运行成功: 

在输出地址查看图片: 

(5) 高级使用:多检测器结果绘制

因为一般使用fddb评价时是为了多个人脸检测器进行比较平价,所以如果能使已评价的多个人脸检测器结果都绘制到同一张图中,比较效果更直观也更容易得出结论。

为达到以上目的,我手动修改.p文件如下:

set term png
set size 1,1
set output "F:/FDDB/DiscROC.png"//输出图像文件名
set ytics 0.1
set grid
set ylabel "True positive rate"
set xlabel "False positives"
set yr [0:1.0]
set key right bottom
//主要修改的地方,需要把哪些txt文件中的点集绘制出来,并采用什么格式,每个曲线用逗号隔开
plot "F:/evaluation/evaluation/tempDiscROC.txt" using 2:1 title "MTCNN" with lines lt 1 lw 2 ,"F:/evaluation/evaluation/tempDiscROC_faceboxes.txt" using 2:1 title "FaceBoxes" with lines lt 3 lw 4 ,"F:/evaluation/evaluation/tempDiscROC_libfacedetect.txt" using 2:1 title "LibFaceDetectcnn" with lines lt 4 lw 2 

其中,最后一行是主要修改的地方,其作用是把指定的txt文档中的点集绘制到图像上,所以代码的意思是根据需要绘制的点集的txt的绝对路径读取所需点,为该曲线命名,并指明该曲线样式,其中lt是曲线颜色,后跟颜色编码(具体哪个编码可自行百度查表),lw是曲线宽度(一般为了突出自身模型的优越性,自身模型曲线会加粗)。

需要注意的是,每个曲线间用“,”隔开,并且不同为了观看方便空格或空行。

最后,上述一直说曲线并不是.p文件只能画曲线,而是.p文件会根据使用线段(line)连接txt文件中各点,因为以上内容中txt文件中的点集绘制结果是曲线,所以才一直用曲线代称。

 

  • 9
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值