本博文记录自己的BSDS数据集边缘检测结果评估的探索历程,记录了一些问题以及相应的解决方法。目前(2020.06)代码实现均基于MATLAB平台。我的实验环境为Windows 10 + MATLAB R2019a,并且已经安装编译好Piotr’s Matlab Toolbox(如需安装请点击链接查看教程)。
对于想直接完成边缘检测结果评估的读者,可以直接下拉至Method 3.
对于边缘检测任务评估的关键代码为./BSDS/BSR/bench/benchmarks/boundaryBench.m
,对于分割任务评估的关键代码为allBench
.
按照链接中修改bench_bsds500.m
文件内容并运行即可开始评估。 以下记录遇到的两个问题:
运行报错"groundTruth" 以前似乎用作函数或命令,与其在此处作为变量名称的用法冲突。 发生此错误的可能原因是您忘记初始化此变量,或者您已使用 load 或 eval 隐式 初始化此变量。
Error: File: evaluation_bdry_image.m Line: 92 Column: 61 "groundTruth" previously appeared to be used as a function or command, conflicting with its use here as the name of a variable. A possible cause of this error is that you forgot to initialize the variable, or you have initialized it implicitly using load or eval.
参考资料,发现是struct结构内的属性名groundTruth
与MATLAB R2017之后内置的函数是冲突的,故解决方法分为两步:
1.重命名mat文件中cell名’groundTruth’为其他名字,例如’gT’,以下我的代码示例,更改gtDir和newGtDir为你本地的路径。
clc
clear all
gtDir = 'C:\Download\BSR_bsds500\BSR\BSDS500\data\groundTruth\test';
newGtDir = 'C:\Download\BSR_bsds500\BSR\BSDS500\data\groundTruth\test_gT';
list = dir(fullfile(gtDir));
fileNum = size(list,1)-2;
for k = 3:fileNum+2
filename = list(k).name;
filepath = fullfile(gtDir,filename);
a = load (filepath);
b.gT = a.groundTruth;
savePath = fullfile(newGtDir,filename);
save(savePath,'-struct','b');
end
2.将’ evaluation_bdry_image.m’文件中所有的’groundTruth’更名为上一步中重命名的新名字,例如’gT’
解决上述问题之后,遇到的下一个问题为:尝试将 SCRIPT
correspondPixels.m作为函数执行
,报错的原因是出错处的语句要求correspondPixels
脚本具有输入参数或者返回值,然而查看correspondPixels.m
文件发现,所有的代码都是注释掉的。搜便了全网以及各种issue都没有看到类似的解决方法,怀疑自己是起初的编译出错或者系统问题,故暂时搁置。
点击链接获取相关代码。
关键的文件为edgeEval.m
/ edgeEvalDir.m
。简单的更改之后即可开始结果评估,我的代码示例如下,更改resDir
与gtDir
为你本地的路径。
clear all;
resDir = 'C:\Personal\Study\LBPConvEdgeDetect\result\2nd\eval_epoch_019_filtered';
gtDir = 'C:\Download\BSR_bsds500\BSR\BSDS500\data\groundTruth\test';
a = edgesEvalDir('resDir',resDir,'gtDir',gtDir,...
'pDistr',{{'type','parfor'}},'cleanup',0,'thrs',99,'maxDist',.0075);
本方法的缺点是没有提供NMS(non-maximum suppression)处理的代码,故得到的评估结果偏低。需要自己另外寻找NMS代码,可以参考链接1、链接2(本人均未验正)。
代码链接:https://github.com/xwjabc/hed
该代码文件eval_edge.m中,内嵌了NMS处理流程,无需再查找其他代码,简单的修改即可得到评估结果。
结果显示ODS-F为78.8% ,RCF论文中single scale 的结果为79.8%。