BSDS500 benchmark初次使用
by Chris, imzhuo@foxmail.com
基本说明
在看边缘检测算法,BSDS500是一个边缘检测的benchmark,HED/RCF论文都用这个测评。
注意:BSDS500也可以用作分割(Segmentation)的测评
官方主页:
https://www2.eecs.berkeley.edu/Research/Projects/CS/vision/grouping/resources.html
下载和数据集完整包:
http://www.eecs.berkeley.edu/Research/Projects/CS/vision/grouping/BSR/BSR_full.tgz
环境说明:
Ubuntu16.04下运行的。BSDS500 benchmark初次使用
是matlab代码。Matlab2017a/2017b因为包含了groundTruth这个函数会导致冲突,用matlab2016b则没有问题。
如果要到windows下运行,需要重新编译.mexw文件,并且要手动处理类似sys/timer.h文件找不到的移植问题,所以暂时不考虑windows。
代码和算法思路梳理
RCF的作者刘云提供了绘制各个边缘检测算法在BSDS/NYUD数据集测评的结果对比/绘图代码:https://github.com/yun-liu/plot-edge-pr-curves。需要提供在BSDS500上执行边缘检测后生成的`xx_bdry.txt`和`xx_bdry_thr.txt`两个文件。
使用BSDS500工具箱,能生成这两个文件:
- 运行
bench_bsds500.m
执行默认测评 - 经过3个多小时后,结果写入到
/opt/data/BSR/BSDS500/ucm2/test_eval
目录,包括eval_bdry.txt
和eval_bdry_thr.txt
等文件。
疑问
- 为什么要运行这么久?
怀疑是ucm算法慢? - 怎样运行别的算法,比如自行训练好的RCF模型,执行边缘检测
UCM
Ultrametric Countour Map的缩写
Boundary extraction in natural images using ultrametric contour maps
POCV
2006
P. Arbelaez et al
gPb
是globalized probability of boundary的缩写
Using Contours to Detect and Localize Junctions in Natural Images
CVPR
2008
Jitendra Malik组出品
OWT
Oriented Watershed Transform算法,一种图像分割算法,在amfm_pami2010.pdf
中提出
gPb-owt-ucm
From Contours to Regions: An Empirical Evaluation
CVPR
2009
amfm_pami2010.pdf
:
是对于gPb, gPb-owt-ucm的期刊(pami)版本。
代码分析
allBench()会传入inDir, outDir这两个参数
inDir是segmentation结果存放目录 默认是在../BSDS500/ucm2/test
。存放的是.mat文件,每张测试图对应一个
似乎格式都是643x963或者963*643大小的数组。
粗略看,evaluation_bdry_image.m
和evaluation_reg_image.m
中,把执行测试的边缘检测算法写死为ucm2
:load了../BSDS500/ucm2/test/100007.mat
类似格式的文件,得到ucm2
变量,这个变量表示你对100007.jpg的边缘预测图,643x963大小,double类型。
643x963大小,会被强行sample到421x581的(~1/2)。后面这个尺寸,是groundTruth的尺寸。
要执行其他边缘检测方法的结果测评:
也就是生成xx_bdry.txt
和xx_bdry_thr.txt
:
修改BSR/bench/bench_bsds500.m
中的inDir
和outDir
。默认需要把检测结果存为.mat格式,并且load后得到ucm2
变量。否则,需要自行修改evaluation_bdry_image.m
和evaluation_reg_image.m
中的代码。