边缘检测数据集bsds500及评测
边缘检测相关论文所用到的评测代码都是基于bsds500数据集的benchmarks。
bsds500介绍
berkeley segmentation data set (bsds500)是伯克利大学computer vision group提供的数据集可以用来图像分割
和物体边缘检测
。该数据集包含200
张训练图,100
张验证图,200
张测试图;所有真值用.mat文件保存,包含segmentation和boundaries,每张图片对应真值有五个,为5个人标注的真值,训练时真值可采用平均值或者用来扩充数据,评测代码中会依次对这五个真值都做对比。
压缩包中包含三个子文件:
- bench用于评测自己方法的指标,主要为matlab的.m文件,核心文件
correspondPixels.cc
文件需要编译,如果是Linux64位电脑则不需要编译源文件,因为已有编译好的correspondPixels.mexa64
文件在里面。MATLAB工具必不可少,如何编译后面在讲。 - BSDS500为数据集内容
数据集扩充
最近很多关于边缘检测的深度学习论文2019BDCN、2017CRF、2015HED等都对bsds500的训练集和验证集共300张图片进行了数据扩充,包括旋转
、翻转
、尺度缩放
。HED扩充之后的数据集地址:http://vcl.ucsd.edu/hed/HED-BSDS.tar,该数据集有1.3GB共28800张训练图,该数据集未给出测试集真值,评测时仍需要用到之前bsds500中的真值。
边缘评测
评测可以直接使用伯克利BSDS500中的benchmarks评测。或者使用HED的评测脚本,考虑到相关边缘检测论文评测前都会对方法结果进行非极大值抑制,推荐使用HED的评测脚本,它包含了非极大值抑制代码。地址:https://github.com/s9xie/hed_release-deprecated/tree/master/examples/eval。它的readme.txt为:
In our experiment, the evaluation pipeline is
1. Store the edge prediction results in IPython Notebook to individual .mat files using scipy.io.savmat() function.
2. using nms_process.m to get NMS processed png files.
3. using EvalEdge.m to get the final evaluation results.
4. To get the "late merging" results reported in the paper, run merge_res.m (simply add up nms processed files).
You still need to download Piotr's edge toolbox to make this work.
This is highly redundant, and for now we release these scripts so that the reported results can be exactly reproduced. (Numerical precision of edge map saved can affect the performance a little bit, e.g. directly save the png files before NMS)
We plan to port the NMS code and evaluation code to python very soon.
Contact s9xie(AT)eng.ucsd.edu for questions.
根据readme内容,一步一步操作:
本电脑MATLAB为2015b
- 在Python中使用scipy.io.savmat()函数把每张待预测图片保存成.mat格式,保存之后矩阵中元素的取值范围要求为0到1,代表像素点为边缘的概率,实际上为网络sigmoid激活后输出结果。
- 下载Edge Toolbox
下载地址:https://github.com/pdollar/edges,使用之前需要Matlab Toolbox:https://pdollar.github.io/toolbox/
-
Matlab Toolbox说明:
我选择最新版3.50,如果是64位的Windows/Linux/Mac则不需要编译,否则请在Matlab中的命令行中执行toolboxCompile,或者直接运行toolboxCompile.m文件。
例如这是编译好的三个文件:
其中后缀mexa64代表Linux64位,mexmaci64代表Mac64位,mexw64代表Windows64位。 - Edge Toolbox说明
64位的Windows/Linux则不需要编译,否则请在matlab的命令窗口编译,使用时需要把对应编译好的edgesNmsMex文件放入到与nms_process.m
同目录下
同目录下非常重要,否则会导致无法找到对应参数类型的edgesNmsMex函数
Please compile mex code from within Matlab (note: win64/linux64 binaries included):
mex private/edgesNmsMex.cpp -outdir private [OMPPARAMS]
Here [OMPPARAMS] are parameters for OpenMP and are OS and compiler dependent.
Windows: [OMPPARAMS] = '-DUSEOMP' 'OPTIMFLAGS="$OPTIMFLAGS' '/openmp"'
Linux V1: [OMPPARAMS] = '-DUSEOMP' CFLAGS="\$CFLAGS -fopenmp" LDFLAGS="\$LDFLAGS -fopenmp"
Linux V2: [OMPPARAMS] = '-DUSEOMP' CXXFLAGS="\$CXXFLAGS -fopenmp" LDFLAGS="\$LDFLAGS -fopenmp"
To compile without OpenMP simply omit [OMPPARAMS]; note that code will be single threaded in this case.
- 运行nms_process.m产生非极大值抑制后的边缘结果
- 运行EvalEdge.m得到评测结果。
结束
最终给出我的文件夹内容:
其中
source
为Edge Toolbox的内容,toolbox
为Matlab Toolbox的内容,这里已经把编译好的edgesNmsMex放到了与nms_process.m同目录下。一定要记得添加路径,简单粗暴直接:具体评测相关内容可参考HED:
https://github.com/s9xie/hed
非常感谢!