HED 和 RCF 图像边缘检测

article/2025/10/20 12:47:05

HED 和 RCF 图像边缘检测

引言

虽然传统边缘检测算法在不断发展的过程中也取得了很大的进步,但仍然无法做到精细的边缘检测处理。随着近年来深度学习的快速发展,计算机视觉领域因此获益颇丰,当下最先进的计算机视觉应用几乎都离不开深度学习,深入我们生活的各个领域如目标检测、工业、农业、医疗等。由于深度学习的特性,使得它成为最适合处理计算机视觉任务的工具之一,特别是卷积神经网络(CNN),得益于它强大的自动学习能力,图像边缘检测任务得到了长足的发展,涌现出了许多优秀的方法,如 N4-field、DeepContour、HED、RCF,基于神经网络的边缘检测算法成为了研究热点之一。

本文主要介绍基于 HED 网络的图像边缘检测的基本情况,对 HED 的网络架构和损失函数进行分析讨论。此外也将对另一个基于 HED 的网络,RCF 网络进行探究,对其进步之处进行分析。

HED 图像边缘检测

Holistically-Nested Edge Detection(简称 HED)由 Xie 等人提出。作为图像边缘检测领域一种比较经典的网络,HED 网络的出现对之后出现的各种图像边缘检测算法都有着启发式的贡献,解决了在计算机视觉领域存在的两个重要问题:

  1. 基于整体图像的训练和预测;
  2. 多尺度,多层次的特征学习。

在 HED 网络出现之前,大多数边缘检测方法如 N4-field、DeepEdge、DeepContour 等都是基于局部区域的算法。虽然通过 CNN 的学习能力上述方法也取得了不错的边缘检测性能,但也存在计算成本高,测试成本高的缺陷。而基于整体图像的训练和预测通过直接对图像中的每个像素进行判断,简单高效精确度高。

另外一方面,HED 网络拥有多个侧输出的单流深层网络,能够通过多尺度的学习,对中间细节进行丰富的特征提取。相比于直接利用输出层的最终结果,多尺度多层次的特征学习会拥有更好地边缘检测结果。

HED 网络架构

HED 网络架构建立在 VGG16 网络的基础之上,但做出了两方面的修改:

  1. 为了进行多尺度多层次的特征学习,在 VGG16 网络每个阶段的最后一个卷积层(conv1_2,conv2_2,conv3_3,conv4_3,conv5_3)之后添加侧输出层。
  2. 为了节约网络训练的内存/时间成本,去掉了最后一个池化层和之后的全连接层。

完整的网络结果如下图所示。通过将卷积层后引出的 5 个侧输出以及 5 个侧输出经过融合层后的结果同时进行训练,计算 6 个损失函数。通过多个侧输出,进行多尺度的学习,对中间细节进行特征提取。对于每个侧输出,通过双线性差值算法进行上采样,还原到原始图像的尺寸,通过融合层输出结果。

HED网络结构

HED 损失函数

在 HED 网络中,损失函数由两部分共同构成:侧输出层的损失函数 L s i d e \mathcal{L}_{side} Lside 和融合层的损失函数 L f u s e \mathcal{L}_{fuse} Lfuse。之后通过梯度下降法得到损失函数:

( W , w , h ) ∗ = a r g min ⁡ ⁡ ( L s i d e ( W , w ) + L f u s e ( W , w , h ) ) (W,w,h)^* = arg \min⁡ (\mathcal{L}_{side} (W,w) + \mathcal{L}_{fuse} (W,w,h)) (W,w,h)=argmin(Lside(W,w)+Lfuse(W,w,h))

其中 W 表示网络参数集合,w 表示侧输出层参数,h 表示融合权重。

(1)侧输出层的损失函数

HED 网络侧输出层的损失函数 L s i d e \mathcal{L}_{side} Lside

L s i d e ( W , w ) = ∑ m = 1 M α m l s i d e ( m ) ( W , w ( m ) ) \mathcal{L}_{side} (W,w)=\sum_{m = 1}^M \alpha_{m} \mathcal{l}_{side}^{(m)} (W,w^{(m)}) Lside(W,w)=m=1Mαmlside(m)(W,w(m))

其中 W 表示网络参数集合,w 表示侧输出层参数,M 表示侧输出层的数量, α m \alpha_m αm 表示每个侧输出层损失函数的权值。

HED 网络通过在每个像素项的基础上引入一个平衡权重 β,来自动平衡正负样本之间的损失。在边缘检测任务中,边缘像素在全部像素中所占的比例往往非常小,边缘像素和非边缘像素的不均衡对网络学习会产生非常严重的影响,导致最终结果检测出许多非边缘像素,平衡权重 β 的加入,正是为了解决这个问题。使用交叉熵损失函数。具体来说,若图像中边缘像素数量少,那么 β 值较小,第一项的权值较轻,而此项表示的是非边缘像素的损失,因此损失较小。

L s i d e ( m ) ( W , w ( m ) ) = − β ∑ j ∈ Y + log ⁡ ⁡ P r ⁡ ( y j = 1 │ X ; W , w ( m ) ) − ( 1 − β ) ∑ j ∈ Y − log ⁡ ⁡ P r ⁡ ( y j = 0 │ X ; W , w ( m ) ) \begin{aligned} \mathcal{L}_{side}^{(m)} (W,w^{(m)}) = & - \beta \sum_{j\in Y_+} \log⁡ Pr⁡(y_j = 1│X;W,w^{(m)}) \\ & - (1 - \beta) \sum_{j \in Y_-} \log⁡ Pr⁡(y_j = 0 │X;W,w^{(m)}) \end{aligned} Lside(m)(W,w(m))=βjY+logPr(yj=1X;W,w(m))(1β)jYlogPr(yj=0X;W,w(m))

其中 β = ∣ Y − ∣ / ∣ Y ∣ \beta = |Y_-|/|Y| β=Y/Y 1 − β = ∣ Y + ∣ / ∣ Y ∣ 1-\beta = |Y_+|/|Y| 1β=Y+/Y,Y 表示图像像素数量, Y − Y_- Y Y + Y_+ Y+ 分别表示边缘和非边缘像素数量。

(2)融合层的损失函数

为了利用侧输出预测,HED 网络通过权重融合层在训练期间同时学习融合权重。融合层的损失函数 L f u s e \mathcal{L}_{fuse} Lfuse :

L f u s e ( W , w , h ) = D i s t ( Y , Y ^ f u s e ) \mathcal{L}_{fuse} (W,w,h) = Dist(Y, \hat Y_{fuse}) Lfuse(W,w,h)=Dist(Y,Y^fuse)

其中 Y ^ f u s e ≡ σ ( ∑ m = 1 M h m A ^ s i d e ( m ) ) \hat Y_{fuse} ≡ \sigma (\sum_{m=1}^M h_m \hat A_{side}^{(m)}) Y^fuseσ(m=1MhmA^side(m)) σ ( ⋅ ) \sigma(·) σ()为激活函数, h = ( h 1 , ⋯ , h M ) h=(h_1, \cdots ,h_M) h=(h1,,hM)表示融合权重。

HED 网络的优缺点

借助 VGG 网络强大的特征提取能力,HED 边缘检测算法能够对图像进行多尺度多层次的学习,直接对整幅图像进行操作。在侧输出层通过深度监督,将不同尺度的侧输出结果进行融合,最后得到了较为优秀的边缘检测结果。然而,随着网络深度的加深,深层特征的分辨率不断降低,导致了一些信息的丢失,在边缘的精细度方面有所欠缺。

RCF 图像边缘检测

在 HED 方法中只采用每个卷积阶段最后一层的卷积特征,而没有充分利用 CNN 丰富特性的层次结构。为了解决这一问题,Liu 等以 HED 网络为基础,提出了一种新的深层结构,Richer Convolutional Features,即更丰富的卷积特征(RCF)。RCF 通过自动学习将所有卷积层的信息组合起来,从而能够获得不同尺度的更加精细的特征。

RCF 网络架构

RCF 基于 HED 网络,与 VGG16 相比,RCF 主要做了如下修改:

  1. 与 HED 相同,RCF 去掉了最后一个池化层和之后的全连接层,形成了全卷积网络。
  2. 在 VGG16 的每个卷积层之后连接一个 1×1 大小深度为 21 的卷积层,并将每一阶段的特征累积得到混合特征。
  3. 在每个阶段得到混合特征之后添加反卷积层进行上采样。
  4. 在上采样层之后添加 loss/sigmoid 层计算损失。
  5. 将所有上采用层连接,对每个阶段的特征进行融合,最后再通过 loss/sigmoid 层计算损失。

RCF网络结构

RCF 损失函数

与 HED 的做法类似,由于图像中边缘像素点和非边缘像素点的数量差异往往很大,需要计算正负样本之间的损失,RCF 对 HED 中的损失函数进行了改进,加入了阈值 η \eta η,若某个像素为边缘像素的概率小于阈值 η \eta η,则认为这个像素为非边缘像素:

l ( X i ; W ) = { α ⋅ log ⁡ ( 1 − P ( X i ; W ) ) if  y i = 0 0 if  0 ≤ y i ≤ η β ⋅ log ⁡ P ( X i ; W ) otherwise l(X_i;W) = \begin{cases} \alpha \cdot \log (1 - P(X_i;W)) \quad & \text{if } y_i = 0 \\ 0 & \text{if } 0 \leq y_i \leq \eta \\ \beta \cdot \log P(X_i;W) & \text{otherwise} \end{cases} l(Xi;W)=αlog(1P(Xi;W))0βlogP(Xi;W)if yi=0if 0yiηotherwise

其中

α = λ ⋅ ∣ Y + ∣ ∣ Y + ∣ + ∣ Y − ∣ \alpha = \lambda \cdot \frac{|Y^+|}{|Y^+| + |Y^-|} α=λY++YY+

β = λ ⋅ ∣ Y − ∣ ∣ Y + ∣ + ∣ Y − ∣ \beta = \lambda \cdot \frac{|Y^-|}{|Y^+| + |Y^-|} β=λY++YY

Y − Y^- Y Y + Y^+ Y+分别表示边缘和非边缘像素数量,超参数 λ 用来平衡正负样本的数量,W 表示网络参数集合。RCF 改进的损失函数是:

L ( W ) = ∑ i = 1 ∣ I ∣ ( ∑ k = 1 K l ( X i ( k ) ; W ) + l ( X i f u s e ; W ) ) L(W) = \sum_{i=1}^{|I|} \left( \sum_{k=1}^{K} l(X_i^{(k)};W) + l(X_i^{fuse};W) \right) L(W)=i=1I(k=1Kl(Xi(k);W)+l(Xifuse;W))

其中 X i ( k ) X_i^{(k)} Xi(k)是阶段 k 的激活值, X i f u s e X_i^{fuse} Xifuse 是融合层的激活值。 ∣ I ∣ |I| I是图像 I 的像素个数,K 是阶段数,这里为 5。

RCF 与 HED 的区别

HED 方法与 RCF 方法最大的区别在于以下两个方面:

  1. HED 方法只考虑了 VGG16 网络每个阶段最后一个卷积层的特征,丢失了很多信息;而 RCF 网络充分考虑了 VGG16 网络的所有卷积层,从而能够获得更加丰富的信息,在几乎没有任何花费的情况下,大幅度提高了图像边缘检测的性能。

  2. 新的损失函数。RCF 在 HED 损失函数的基础上进一步进行了修改,通过设置阈值 η 着重解决了多人标注情况下那些不确定是否为边缘的像素处理,提高了训练的稳定性。具体来说,RCF 将边缘像素概率高于阈值 η 的像素作为正样品,将边缘像素概率等于 0 作为负样本。而 HED 则设置阈值 η=0.5,并且将其作为正负样本的分界线。

参考文献

  1. XIE S, TU Z. Holistically-Nested Edge Detection[J]. International Journal of Computer Vision, 2017, 125(1/3): 3–18.
  2. LIU Y, CHENG M M, HU X 等. Richer Convolutional Features for Edge Detection[J]. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2019, 41(8): 1939–1946.

http://chatgpt.dhexx.cn/article/Qm4v62tj.shtml

相关文章

hed

一、编译caffe cd进入hed-master文件夹目里下 (1) cp Makefile.config.example Makefile.config (2) make all 出现错误a 解决: 打开Makefile.config文件 将 INCLUDE_DIRS : $(PYTHON_INCLUDE) /usr/local/incl…

边缘检测之HED

出自论文,Holistically-Nested Edge Detection ,ICCV2015,Marr奖提名,非常值得看的一篇。 边缘检测的工作分为以下3个研究方向: (1)传统的检测算子:Sobel ,Canny (2)基于信息理论设计的手工特征:Statisti…

HED神经网

本篇论文提出了一种新的网络结构进行边缘检测,论文这种网络结构称为Holistically-nested network。HED能够实现图像到图像的训练,输入一个图像,输出这个图像的边缘检测图。 1.现有的Multi-Scale和Multi-level学习的网络结构 2. (e)图是论文提…

身体证检测与识别(二)——HED边缘检测与矫正

前言 1.关于边缘检测,我这里用了HED这个边缘检测网络,HED创作于2015年,骨干网络是state-of-the-art的VGG-16,并且使用迁移学习初始化了网络权重。关于HED的算法原理与训练模型代码可以转到github。 2.OpenCV也有好几边缘检测算法可用&#x…

mysql otter 数据同步_MySQL数据同步之otter

一、otter介绍 基于日志数据,用于MySQL或者ORACLE之间准实时同步数据。 用途: mysql/oracle互相同步 中间表/行记录同步 二、原理及架构图 otter整体模块 manager (提供web页面进行同步管理) arbitrate (分布式调度,可跨IDC机房) node (同步过…

Otter简介

原文地址:http://m635674608.iteye.com/blog/2314908 Otter它是一个数据同步解决方案,可以解决本地跨网络跨机房跨地域的数据同步问题,并且拥有可观的效率,web管理工具等特点,而且背景也很优秀,据说阿里B2B内部的本地/异地机房的同步需求基本全上了 otte…

Canal和Otter

问题一: 跨公网部署Otter 参考架构图 解析 ​ a. 数据涉及网络传输,S/E/T/L几个阶段会分散在2个或者更多Node节点上,多个Node之间通过zookeeper进行协同工作 (一般是Select和Extract在一个机房的Node,Transform/Load落在另一个机房的Node&a…

otter学习(一)——otter原理

1.otter原理: 基于数据库增量日志解析,准实时同步到本机房或异地机房的mysql/oracle数据库. 一个分布式数据库同步系统 原理描述: 1. 基于Canal开源产品,获取数据库增量日志数据。 2. 典型管理系统架构,manager(web管理…

otter数据同步

一、Otter目前支持了什么 1. 单向同步, mysql/oracle互相同步 2. 双向同步,无冲突变更 3. 文件同步,本地/aranda文件 4. 双A同步,冲突检测&冲突补救 5. 数据迁移,中间表/行记录同步 导历史表还需要程序代码实现吗&…

数据同步 之 Otter

一、Otter 语言:java 定位:基于数据库增量日志解析,准实时同步到本机房或异地机房的mysql/oracle数据库,一个分布式数据库同步系统。 1.工作原理: 2.原理描述 1. 基于Canal开源产品,获取数据库增量日志…

otter:分布式数据库同步系统

一、otter介绍 阿里巴巴B2B公司,因为业务的特性,卖家主要集中在国内,买家主要集中在国外,所以衍生出了杭州和美国异地机房的需求,同时为了提升用户体验,整个机房的架构为双A,两边均可写&#x…

Otter 下载安装

简介 基于数据库增量日志解析,准实时同步到本机房或异地机房的mysql/oracle数据库. 一个分布式数据库同步系统。 原理 1. 基于Canal开源产品,获取数据库增量日志数据。 什么是Canal, 请点击 2. 典型管理系统架构,manager(web管理)node(工…

otter使用手册

目录 1.机器管理 1.1 zookeeper管理 1.2 Node管理 2.配置管理 2.1数据源配置 2.2数据表配置(添加数据库表) 2.3 Canal配置(添加Canal) 3.同步管理 3.1 Channel管理 3.2 Pipeline管理 1.机器管理 1.1 zookeeper管理 添加z…

Otter 双向同步mysql

一、Otter目前支持了什么 1. 单向同步, mysql/oracle互相同步 2. 双向同步,无冲突变更 3. 文件同步,本地/aranda文件 4. 双A同步,冲突检测&冲突补救 5. 数据迁移,中间表/行记录同步 实际测试中,otter的…

Otter安装说明

Otter安装说明 Mysql安装(如果已安装则无需再安装):【忽略安装Mysql】 安装依赖 yum -y install perl perl-devel autoconf #下载Mysql包 https://github.com/alibaba/otter/releases【Otter最新版本下载】 wget https://dev.mysql.com/g…

otter mysql hbase_otter自定义扩展

otter自定义扩展 otter支持数据处理自定义过程。 Extract模块: EventProcessor : 自定义数据处理,可以改变一条变更数据的任意内容 FileResolver : 解决数据和文件的关联关系 目前两者都只支持java语言编写,但都支持运行时动态编译&lib包…

otter搭建

一、安装zookeeper的单机版 apache-zookeeper-3.6.1-bin.tar.gz 如果下载的是3.5及以后的,需要下载包名带有-bin的版本,从3.5.5开始,带有bin的包才是解压以后可以直接使用的里面有编译后二进制的包,而之前的普通的tar.gz里面只是…

otter安装

译意: 水獭,数据搬运工 语言: 纯java开发 定位: 基于数据库增量日志解析,准实时同步到本机房或异地机房的mysql/oracle数据库. 一个分布式数据库同步系统 otter的环境需要:mysql,jdk&#x…

Otter 安装部署维护

介绍 淘宝开源的产品,基于数据库增量日志解析,准实时同步到本机房或异地机房的mysql/oracle数据库,一个分布式数据库同步系统。 目前同步规模: 同步数据量6亿 文件同步1.5TB(2000w张图片) 涉及200个数据库实例之间的同步 80台机器…

Otter配置说明

Otter配置说明 标签: Otter 下载 最新版Otter下载地址 CSDN下载地址 需要下载manager.deployer-4.2.13.tar.gz,node.deployer-4.2.13.tar.gz和Source code (zip) 需要安装zookeeper和jdk支持,canal已经内置,不需要安装 manage…