概述
BSDS500数据集边缘检测任务结果评估
Intro
本博文记录自己的BSDS数据集边缘检测结果评估的探索历程,记录了一些问题以及相应的解决方法。目前(2020.06)代码实现均基于MATLAB平台。我的实验环境为Windows 10 + MATLAB R2019a,并且已经安装编译好Piotr’s Matlab Toolbox(如需安装请点击链接查看教程)。
对于想直接完成边缘检测结果评估的读者,可以直接下拉至Method 3.
Method 1: 官方数据集内嵌代码
对于边缘检测任务评估的关键代码为./BSDS/BSR/bench/benchmarks/boundaryBench.m
,对于分割任务评估的关键代码为allBench
.
按照链接中修改bench_bsds500.m
文件内容并运行即可开始评估。 以下记录遇到的两个问题:
Problem 1-1
运行报错"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:DownloadBSR_bsds500BSRBSDS500datagroundTruthtest';
newGtDir = 'C:DownloadBSR_bsds500BSRBSDS500datagroundTruthtest_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’
Problem 1-2
解决上述问题之后,遇到的下一个问题为:尝试将 SCRIPT
correspondPixels.m作为函数执行
,报错的原因是出错处的语句要求correspondPixels
脚本具有输入参数或者返回值,然而查看correspondPixels.m
文件发现,所有的代码都是注释掉的。搜便了全网以及各种issue都没有看到类似的解决方法,怀疑自己是起初的编译出错或者系统问题,故暂时搁置。
Method 2: pdollar/edges
点击链接获取相关代码。
关键的文件为edgeEval.m
/ edgeEvalDir.m
。简单的更改之后即可开始结果评估,我的代码示例如下,更改resDir
与gtDir
为你本地的路径。
clear all;
resDir = 'C:PersonalStudyLBPConvEdgeDetectresult2ndeval_epoch_019_filtered';
gtDir = 'C:DownloadBSR_bsds500BSRBSDS500datagroundTruthtest';
a = edgesEvalDir('resDir',resDir,'gtDir',gtDir,...
'pDistr',{{'type','parfor'}},'cleanup',0,'thrs',99,'maxDist',.0075);
本方法的缺点是没有提供NMS(non-maximum suppression)处理的代码,故得到的评估结果偏低。需要自己另外寻找NMS代码,可以参考链接1、链接2(本人均未验正)。
Update 2020/08/16:经验证的NMS程序
将此处的NMS处理程序按照此处修改。
共包含两步:
1.设置path_to_pdollar路径文件;
2.灰度放反问题修改。
Update 2021/03/09: NMS参数设置的差异
最近跑实验的时候发现RCF和HED工作的NMS参数设置是存在差异的:
在HED中,NMS是调用了E=edgesNmsMex(E,O,1,5,1.01,4)
. 可以参考:Ref1 / Ref2;
而在RCF中,NMS步骤中是调用了edge = edgesNmsMex(edge, O, 2, 5, 1.01, 8)
. 可以参考Ref.
具体参数的含义可以参考RCF作者的一篇回答,但是其也并未解释为何参数存在出入。本人也并未验证NMS参数不同对最后评估结果的影响,故参数如何选择请读者根据具体情况自行定夺。
Method 3: HED
代码链接:https://github.com/xwjabc/hed
该代码文件eval_edge.m中,内嵌了NMS处理流程,无需再查找其他代码,简单的修改即可得到评估结果。
结果显示ODS-F为78.8% ,RCF论文中single scale 的结果为79.8%。
最后
以上就是超级世界为你收集整理的BSDS500数据集边缘检测任务结果评估BSDS500数据集边缘检测任务结果评估的全部内容,希望文章能够帮你解决BSDS500数据集边缘检测任务结果评估BSDS500数据集边缘检测任务结果评估所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复