利用ROC检验算法准确性流程


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

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页