我是靠谱客的博主 超级世界,最近开发中收集的这篇文章主要介绍BSDS500数据集边缘检测任务结果评估BSDS500数据集边缘检测任务结果评估,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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

解决上述问题之后,遇到的下一个问题为:尝试将 SCRIPTcorrespondPixels.m作为函数执行,报错的原因是出错处的语句要求correspondPixels脚本具有输入参数或者返回值,然而查看correspondPixels.m文件发现,所有的代码都是注释掉的。搜便了全网以及各种issue都没有看到类似的解决方法,怀疑自己是起初的编译出错或者系统问题,故暂时搁置。

Method 2: pdollar/edges

点击链接获取相关代码。

关键的文件为edgeEval.m / edgeEvalDir.m。简单的更改之后即可开始结果评估,我的代码示例如下,更改resDirgtDir 为你本地的路径。

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数据集边缘检测任务结果评估所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(34)

评论列表共有 0 条评论

立即
投稿
返回
顶部