1. 数据准备
检验的原理是用算法检测的结果与手工标定的结果进行比对,因此检验需要一定数量手工标定的数据。本文以人眼算法检测为例进行说明。人眼图像存放在Data文件夹中,标定结果按照下面格式写入markedresult.txt。
Image1//图像名称
2//目标数量
460 327 527 351 1//目标1所在矩形 ,第五个数字1代表分数,标定数据都是1
1680 341 511 340 1//目标2所在矩形
讲所有数据的文件名写入imagelist.txt,例:
Imagename1
Imagename2
Imagename3
2. 数据处理
用分类器对Data文件夹中的图像进行人眼识别,结果按照上面的格式写入result.txt中。例:
Image1name
4
1532 230 38 25 4.611050
2230 715 59 39 4.684969
1983 357 358 239 3.101981
777 366 399 266 2.857509
最后一列的分数是根据函数 modelglass.detectMultiScale(gray, eye, rejLevel, levelW, 1.25, 3, 0,Size(20, 20),Size(),true);中的levelW得来的。
3.结果比对
(1) 在FDDB官网上下载评估程序:http://vis-www.cs.umass.edu/fddb/evaluation.tgz
(2) 建立VS工程FDDBEvaluation,将evaluation中的源码添加到工程,配置OPENCV等,修改main函数里以下内容:
string baseDir ="F:/Data/image/";//人眼图像路径
string listFile = "D:/ imagelist.txt";//图像名称列表
string detFile = "D:/ result.txt";//算法处理结果路径
string annotFile = "D:/ markedresult.txt";//标记结果路径
(3)下载的程序默认是利用椭圆面积比统计正确率,如果想用矩形统计,需要修改两处内容:
第一处:int detFormat =DET_RECTANGLE;// DET_RECTANGLE表示矩形
第二处:
将
annot =newEllipsesSingleImage(imFullName);
((EllipsesSingleImage*)annot)->read(fAnnot,nAnnot);
改为
annot =newRectanglesSingleImage(imFullName);
((RectanglesSingleImage*)annot)->read(fAnnot, nAnnot);
(4)程序中有段代码是对result、imagelist、markedresult三个文件中的图像名称进行比对,以确保标定结果与算法处理的结果一一对应。因为标定的时候漏下几个图像,导致我在这段程序上花了很长时间。
// make sure that theannotation and detections are read for the same image
if( imName.compare(imS1) || imName.compare(imS2) )
{
cerr << imName <<" " << imS1 <<" " << imS2 << endl;
cerr <<"Incompatible annotation and detection files. See outputspecifications" << endl;
return -1;
}
(5)程序正确执行后,会在根目录生成两个文件:tempContROC.txt、tempDiscROC.txt。前者用于绘制非离散ROC曲线,后者用于绘制离散ROC曲线。
tempContROC.txt内容:
0.725508 178
0.725508 177
0.725508 175
0.725508 174
0.725362 174
0.725362 172
0.725163 172
0.725163 171
0.725163 170
0.725163 168
0.725163 167
0.725163 165
0.725163 164
tempDiscROC.txt内容:
0.958123 178 -5.94712
0.958123 177 -5.68689
0.958123 175 -5.40718
0.958123 174 -4.67761
0.957871 174 -4.58944
0.957871 172 -4.44946
0.957619 172 -4.44618
0.957619 171 -4.32901
0.957619 170 -4.30522
0.957619 168 -4.09434
0.957619 167 -4.07079
4.绘制ROC曲线
安装GUNPLOT,网上下载一个破解版就行。新建一个ContROC.txt文件,将下面的代码复制到文件中。
set term png
set size .75,1
set output"I:/quantu/temp/fulldata/ContROC.png"//ROC曲线文件地址
set ytics .1
set grid
set ylabel "True positiverate"
set xlabel "Falsepositives"
set yr [0:1]
set key right bottom
plot"I:/quantu/temp/fulldata/tempContROC12.txt" using 2:1 withlinespoints title "1/12"//绘制ROC曲线的数据地址,可以写多个地址,地址之间用逗号分开。
将文件后缀“txt”改成“p”。将ContROC.p拖入GUNPLOT,就能生成ContROC.png。
参考文献:
1.http://blog.csdn.net/phoenix_zhou/article/details/47399819