FDDB人脸库评估步骤

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

目录

FDDB人脸库评估步骤

1. 相关官网网址记录

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

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

4. 运行evaluate.cpp进行评估

5. 绘制评估结果ROC图


1. 涉及官网网址记录

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

  • FDDB人脸库官方链接:http://vis-www.cs.umass.edu/fddb/
  • FDDB评价算法思路:https://yinguobing.com/fddb/
  • FDDB评价步骤官方文档:http://vis-www.cs.umass.edu/fddb/README.txt

接下来是详细的步骤:

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

  • Perl地址:链接:https://pan.baidu.com/s/1ggws60z 密码:0pl7
  • gnuplot地址:链接:https://pan.baidu.com/s/1jJWeo0Q 密码:nzz3
  • 关于perl的配置,请戳:

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: pixelssub 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文件中的点集绘制结果是曲线,所以才一直用曲线代称。

FDDB人脸库评价人脸检测模型超详细步骤相关推荐

  1. 评价对象检测模型的数字度量:F1分数以及它们如何帮助评估模型的表现

    来源:DeepHub IBMA本文约2000字,建议阅读7分钟 本文为你介绍评价对象检测模型的数字度量. 介绍 使用精度和召回率评估目标检测模型可以为模型在不同置信度下的表现提供有价值的见解.类似地, ...

  2. 基于yolov7开发实践实例分割模型超详细教程

    在我前面的博文中写过基于yolov5-v7.0模型开发的实例分割模型的超详细教程,即使是零基础入门的新手也都是可以按照教程步骤一步一步开发构建自己的应用.文章在下面,感兴趣的话可以自行移步阅读即可: ...

  3. 如何发布自己的npm包(超详细步骤,博主都在用)

    发布自己的npm超详细步骤 前沿: 从去年毕业,vue掌握的还算熟练应用了,做过的vue项目也有十几个了吧,每次做项目的时候,有些组件老是使用,拷贝来拷贝去的使用.我就想把这些组件封装到一起,以后做项 ...

  4. mysql连接idea详细教程_idea配置连接数据库的超详细步骤

    学习时,使用IDEA的时候,需要连接Database,连接时遇到了一些小问题,下面记录一下操作流程以及遇到的问题的解决方法. 一. 连接操作 简介:介绍如何创建连接,具体连接某个数据库的操作流程. 1 ...

  5. python操作手机app超详细步骤

    〝 古人学问遗无力,少壮功夫老始成 〞 python操作手机app超详细步骤,现在很多app的都要刷经验打怪升级啥的,这些枯燥千篇一律但是很耗费时间的玩法,可以使用app自动去操作,解放双手,释放时间 ...

  6. 大数据基础学习三:Ubuntu下安装VMware Tools超详细步骤及需要注意的问题(以ubuntu-18.04.3、Mware Workstation 15.1.0 Pro为例)

    大数据基础学习三:Ubuntu下安装VMware Tools超详细步骤及需要注意的问题 (以ubuntu-18.04.3.Mware Workstation 15.1.0 Pro for Window ...

  7. 苹果手机mov文件如何复制到电脑_如何在手机上访问电脑上的文件(超详细步骤) iPhone版...

    之前分享了如何在两台电脑上共享文件,如需访问可点击如下链接: Town-Tree:如何在两台电脑之间共享文件(超详细步骤)​zhuanlan.zhihu.com 如何在安卓手机上访问电脑上的文件,可点 ...

  8. 三、Hive数据仓库应用之Hive数据操作语言(超详细步骤指导操作,WIN10,VMware Workstation 15.5 PRO,CentOS-6.7)

    Hive远程模式部署参考: 一.Hive数据仓库应用之Hive部署(超详细步骤指导操作,WIN10,VMware Workstation 15.5 PRO,CentOS-6.7) Hive数据定义语言 ...

  9. 最全自建蚂蚁(leanote)笔记超详细步骤

    服务器(Windows系统)自建蚂蚁(leanote)笔记超详细步骤(包含数据备份和数据还原) 需要依赖(工具) 轻量服务器(云服务器)一台 -- 环境Windows Server 2019 Mong ...

  10. fabric2.3.2 test-network测试网络搭建 超详细步骤

    搭建好fabric网络后的第一步一定是练习一下测试网络.如果需要ubuntu下安装fabric环境的可以看下面两篇文章: Ubuntu16.04+fabric1.4.3 (15条消息) fabric1 ...

最新文章

  1. 从命令行到IDE,版本管理工具Git详解(远程仓库创建+命令行讲解+IDEA集成使用)
  2. loadrunner,socket脚本总结
  3. java解析kafkaavro_如何使用Spring Kafka读取合并模式注册的AVRO消息?
  4. Solr建立索引时,过滤HTML标签
  5. 云计算中HMI的三大优点
  6. Java初学者入门经典:面向对象的思维方法(其实同样非常适合C#的初学者)……非原创,作者忘了,非常抱歉...
  7. JavaScript基础01
  8. Kamp;R练习题6-1统计关键词出现的次数
  9. 报警服务器物理内存,从内存告警谈ESXi主机内存管理——内存构成
  10. 前端学数据库之子查询
  11. java线程从没入门就放弃
  12. 如何优化你的ERP库存管理系统
  13. windows安装hbase
  14. 软件项目开发成本经常用到的估算方法
  15. 阿里、华为都是外包公司?
  16. 兴义智力象机器人_中科院科普讲师专家赴黔西南州做科普报告巡讲
  17. Vscode 与服务器建立远程连接(ssh)
  18. WordPress正确使用51la统计来统计网站访问数据[WP教程]
  19. 【Matlab经典智能算法】新手入门第十六天
  20. 三维数字地球发布平台(开源)

热门文章

  1. Tracert 工作原理
  2. Z-TEK USB转422接口问题 RS422接口常见使用注意事项
  3. 【对讲机的那点事】玩无线电,你知道无线电信号是怎样发送和接收的?
  4. Keystore and keytool information
  5. Spring5学习笔记——【遇见狂神说】[IoC、DI、AOP]
  6. 嵌入式C语言编码规范
  7. 51单片机之逻辑运算指令ANL、ORL、XRL等
  8. Mac终端adb安卓刷机
  9. 天载免息股票汽车整车涨幅居前
  10. 惠普服务器故障代码_惠普服务器常见问题及故障排除