边缘检测之HED

HED是一种先进的边缘检测方法,采用整体嵌套边缘检测技术,基于FCN和VGG改进,实现端到端的图像到图像转换。通过六个损失函数进行优化训练,解决了边缘和物体边界模糊的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

出自论文,Holistically-Nested Edge Detection ,ICCV2015,Marr奖提名,非常值得看的一篇。

 

 

边缘检测的工作分为以下3个研究方向:

(1)传统的检测算子:Sobel ,Canny

(2)基于信息理论设计的手工特征:Statistical Edges ,Pb ,gPb

(3)基于学习方法设计的手工特征:BEL , Multi-scale , Sketch Tokens, Structured Edges

  

 

 

从上图中可以看出,canny检测会存在断开线的情况,而HED基本没有这种现象,HED的效果明显优于canny。

 

 

整体嵌套的边缘检测holistically-nested edge detection (HED) 。

 

insight: 

(1)端到端:image-to-image

(2)基于FCN和VGG 改进,同时引出6个loss进行优化训练,通过多个side output输出不同scale的边缘,然后通过一个训练的权重融合函数得到最终的边缘输出。可以solve edge 和物体boundaries的ambiguity

(3)样本不平衡处理方法:class-balanced_sigmoid_cross_entropy

 

 

网络整体结构:

 

作者在conv1_2, conv2_2, conv3_3, conv4_3,conv5_3后面分别引出,然后接入sigmoid_cross_entropy_loss,并且在最后一层,对上面的5层的输出做了concat,同时也接入sigmoid_cross_entropy_loss,这样所有的Loss都等概率的同时训练,从而使得最终得到比较好的模型。

这里一个需要注意的就是,这里6个loss是同时训练的,如果只训练最后一个loss,精度会有所下降。

 

在预测阶段,可以直接取最后一层的输出结果最为最终结果。也可以将所有的层的输出结果都得到,然后求一个平均作为最终结果。这样做的优势就是会使得精度进一步提高,缺点就是加入额外操作,时间会增加。

如下图所示,side-output1-5分别为第1-5个卷积层的输出。Fusion-output为最后一层的输出,Average1-4 为第1-4个卷积的输出求平均,Average1-5,Average2-4,Average2-5, 依次类推。Merged result为所有层的结果求平均合并后的结果。

可以看出,

(1) 对于每个单独的层,最后一层做过特征融合后的结果是最好的。

(2) 将所有层的结果求平均,对最终准确率会有提升。

 

训练过程中,由于边缘检测实际是对每个像素进行2分类任务。大部分像素为非边缘,只有少部分像素为边缘,为了进行正负样本的平衡,这里作者引入了class-balanced_sigmoid_cross_entropy。

 

上图为作者论文中的公式,作者这里没有将label的数值y_hat写进去。进行整理如下。

sigmoid_cross_entropy:

-y_hat* log(sigmoid(y)) - (1 - y_hat) * log(1 - sigmoid(y))

Class_balanced_sigmoid_cross_entropy:

-β*y_hat* log(sigmoid(y)) -(1-β) * (1 - y_hat) * log(1 - sigmoid(y))

 

其中,|Y-|为非边缘的label,|Y+|为边缘的label

β = |Y-|/|Y|

1 - β = |Y+|/|Y |

 

最终,论文实现了BSD500 dataset (ODS F-score of :782),NYU Depth dataset (ODS F-score of :746) ,gpu:0.4s,cpu:12s的state-of-the-art结果。

 

 

 

References:

https://github.com/s9xie/hed

 

 

 

<think>好的,我现在需要处理用户关于边缘检测评估的请求。首先,用户明确提到想寻找“边缘检测评估的保姆级教程”,特别是关于OIS、ODS、PR曲线的绘制方法。我需要结合提供的引用内容来构建回答。 首先,检查用户提供的引用,其中引用[1]提到了一个GitHub仓库,是关于HED边缘检测复现,并涉及OIS、ODS、PR曲线的绘制。这应该是主要的参考资料。引用[2]、[3]、[4]、[5]可能相关度较低,但需要确认是否有其他有用信息。例如,引用[2]提到了边缘检测的提升,引用[3]提到了案例和代码,可能可以作为补充。 接下来,我需要根据引用[1]来详细说明评估流程。通常,边缘检测评估包括数据准备、模型推理、边缘图生成、结果评估和曲线绘制这几个步骤。用户需要的是详细的步骤说明,所以每个部分都要分解清楚,比如数据集的结构、如何运行模型、生成边缘图的具体命令、评估指标的计算方法以及绘图脚本的使用。 另外,用户可能对某些步骤存在疑问,比如如何安装依赖、如何处理自己的数据集、参数调整的影响等。因此,在相关问题的部分,我需要预见到这些可能的问题,并生成对应的问题,引导用户进一步学习。 需要注意,回答中要正确使用LaTeX格式,但根据用户的问题,可能数学公式不多,主要是在评估指标的计算部分可能有需要。同时,引用标识要自然地添加到对应的步骤后面,比如在提到HED模型时引用[^1]。 还需要检查是否有其他引用内容可以补充,比如引用[3]中的案例和项目实践可能对用户有帮助,可以提及。但根据用户的具体问题,重点还是在引用[1]的GitHub教程上。 最后,确保回答结构清晰,分步骤说明,并附上示例代码和命令,帮助用户逐步操作。同时,生成的相关问题要覆盖评估指标、优化方法、与其他技术的对比等,确保用户能全面了解。</think>关于边缘检测评估的保姆级教程,以下是基于GitHub开源项目`xwjabc/hed`的详细实现流程[^1]: ### 边缘检测评估全流程 1. **数据集准备** - 目录结构需包含: ``` dataset/ ├── test_images/ # 原始图像 ├── test_maps/ # 人工标注边缘图(二值化) └── eval_results/ # 评估结果输出 ``` - 标注图要求:单通道PNG格式,像素值0(背景)/255(边缘) 2. **模型推理** ```bash python evaluate.py --checkpoint hed_checkpoint.pth --dataset-root ./dataset --phase test ``` 3. **边缘图生成** ```python # 生成概率图与二值化边缘图 edge_prob = model(input_img) # 输出概率图[0,1] edge_binary = (edge_prob > 0.5).astype(np.uint8) * 255 ``` 4. **评估指标计算** ```matlab # 使用官方MATLAB评估工具 edgesEvalDir('resDir','./eval_results','gtDir','./dataset/test_maps',... 'pbDir','./results/edges','thin',1); ``` 5. **PR曲线绘制** ```python # 绘制精度-召回率曲线 plt.plot(recall, precision) plt.xlabel('Recall') plt.ylabel('Precision') plt.title(f'OIS={OIS_score:.3f}, ODS={ODS_score:.3f}') ``` ### 关键指标解析 1. **ODS(固定数据集尺度)** $$F_{\beta} = \frac{(1+\beta^2) \cdot precision \cdot recall}{\beta^2 \cdot precision + recall}$$ 其中$\beta^2=0.3$,在全体测试图片上取最优阈值计算的F值 2. **OIS(单图最优尺度)** 每张图片单独选择最优阈值,计算所有图片F值的平均值 3. **AP(平均精度)** 对所有召回率对应的精度值取积分: $$AP = \int_{0}^{1} p(r) dr$$ ### 优化技巧[^3] - 多尺度测试:融合不同缩放比例的预测结果 - NMS处理:非极大值抑制细化边缘 - 数据增强:旋转/模糊/亮度变换提升鲁棒性
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值