边缘检测-HED-RCF

article/2025/10/20 9:54:47

(HED)Holistically-Nested Edge Detection

解决问题

ICCV2015的文章。主要解决两个问题:
(1)基于整个图像的训练和预测;
(2)多尺度和多水平(多层次)的特征学习。该算法通过深度学习模型,完成了从图像到图像的预测,并通过学习到的丰富的分级特征,完成边缘检测中的细节问题。
在 HED 网络出现之前,大多数边缘检测方法如 N4-field、DeepEdge、DeepContour 等都是基于局部区域的算法。虽然通过 CNN 的学习能力上述方法也取得了不错的边缘检测性能,但也存在计算成本高,测试成本高的缺陷。而HED基于整体图像的训练和预测通过直接对图像中的每个像素进行判断,简单高效精确度高。

基本思想

HED论文提出的end-to-end的边缘检测系统,称为holistically-nested edge detection (HED),

  1. 使用holistically来表示边缘预测的结果是基于图像到图像的,端到端的过程;
  2. 而nested则强调了在生成的输出过程中不断地继承和学习得到精确的边缘预测图的过程(具体算法后面再说明)。
  3. 这里使用多尺度的方法进行特征的学习,多尺度下的该方法边缘检测结果示意图如下图,图中的d,e,f分别为卷积层2,3,4响应得到的边缘检测结果,HED方法的最后输出是远远优于canny算子的。
    在这里插入图片描述
    HED 网络拥有多个**侧输出(每层conv都输出)**的单流深层网络,能够通过多尺度的学习,对中间细节进行丰富的特征提取。相比于直接利用输出层的最终结果,多尺度多层次的特征学习会拥有更好地边缘检测结果

网络结构

在这里插入图片描述
这个图非常形象,在卷积层后面侧边插入一个输出层 side-output 层,在side-output层上进行deep supervision,使得结果向着边缘检测方向进行。同时随着side-output层越向后大小的变小,将receptive field变大,最后通过一个weighted-fusion layer得到多尺度下的输出。

  • HED 模型包含五个层级的特征提取架构,每个层级中:
    – 使用 VGG Block 提取层级特征图
    – 使用层级特征图计算层级输出
    – 层级输出上采样
  • 最后融合五个层级输出作为模型的最终输出:
    – 通道维度拼接五个层级的输出
    – 1x1 卷积对层级输出进行融合
  • HED 网络架构建立在 VGG16 网络的基础之上,但做出了两方面的修改:
    – 为了进行多尺度多层次的特征学习,在 VGG16 网络每个阶段的最后一个卷积层(conv1_2,conv2_2,conv3_3,conv4_3,conv5_3)之后添加侧输出层。
    – 为了节约网络训练的内存/时间成本,去掉了最后一个池化层和之后的全连接层。 (FCN是将最后的全连接变成了全卷积)

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

算法结构

作者将具体多尺度下的深度学习分为四种,如下图。
在这里插入图片描述
(a)Multi-stream learning 示意图,可以看到图中的平行的网络下,每个网络通过不同参数与receptive field大小的不同,获得多尺度的结果。输入影像是同时进入多个网络处理,得到的特征结果直接反应多尺度。

(b)Skip-layer network learning 示意图,该方法主要连接各个单的初始网络流得到特征响应,并将响应结合在一起输出。

这里(a)和(b)都是使用一个输出的loss函数进行单一的回归预测,而边缘检测可能通过多个回归预测得到结合的边缘图效果更好。

(c)Single model on multiple inputs 示意图,单一网络,图像resize方法得到多尺度进行输入,该方法在训练和test过程均可加入。同时在非深度学习中也有广泛应用。

(d)Training independent networks ,从(a)演化来,通过多个独立网络分别对不同深度和输出loss进行多尺度预测,该方法下训练样本量较大。

(e)Holistically-nested networks,本文提出的算法结构,从(d)演化来,类似地是一个相互独立多网络多尺度预测系统,但是将multiple side outputs组合成一个单一深度网络。

pytorch代码

HED优缺点

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

(RCF)Richer Convolutional Features

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

作者观点

  • 传统的边缘检测算法虽然也很有前景,但是其局限性在于其得到的低层级特征信息很难去表征高层次信息;
  • 大多数基于 CNNs 的边缘检测方法,仅仅只利用卷积网络的最后一层,在深层次的特征信息中缺失了浅层的细节信息,而且容易导致网络无法收敛以及梯度消失的情况。
    在这里插入图片描述
  • 从上图可以看到,高层的特征逐渐变得粗糙,而且浅层的特征并未在深层特征中提现出来。可以看到,深层的信息对于图像的细节信息是模糊的,特征提取的并不充分。
  • 因此,作者提出了RCF网络架构,该架构在每一个卷积层都计算其Loss,且将所有层的特征信息进行融合得到最终的特征。

网络结构

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

  1. 与 HED 相同,RCF 去掉了最后一个池化层和之后的全连接层,形成了全卷积网络。
  2. 在 VGG16 的每个卷积层之后连接一个 1×1 大小深度为 21 的卷积层,并将每一阶段的特征累积得到混合特征。
  3. 在每个阶段得到混合特征之后添加反卷积层进行上采样(upsample)。
  4. 在上采样层之后添加 loss/sigmoid 层计算损失。
  5. 将所有上采用层连接,对每个阶段的特征进行融合,最后再通过 loss/sigmoid 层计算损失。
    在这里插入图片描述
    对VGG16的改动如下:
    1)去除所有的全连接层和第五池化层。去除全连接层主要是为了得到全卷积网络,第五池化层对降采样特征图,不利于边缘定位。
    2)对VGG16中的每个卷积层使用一个 kernel size 1 × 1 and channel depth 21 卷积层, 每个stage中所有的1 × 1 × 21卷积输出进行元素相加操作( eltwise layer),得到一个复合特征
    3)每个 eltwise layer 后面加一个deconv layer 用于放大特征图尺寸的(up-sampling layer)
    4)在每个 up-sampling layer 后面使用一个 cross-entropy loss / sigmoid layer
    5)所有的 up-sampling layers 输出进行concatenated,随后使用一个 1×1 conv layer 进行特征图融合,最后使用 一个 cross-entropy loss / sigmoid layer 得到输出

代码

RCF vs HED

RCF与HED之间最明显区别之处在以下三个方面:
  1. HED对于边缘检测来说,丢失了许多非常有用的信息,因为它仅使用到VGG16中每个阶段的最后一层卷积特征。RCF与之相反,它使用了所有卷积层的特征,使得在更大的范围内捕获更多的对象或对象局部边界成为可能。
  2. RCF创造性的提出了一个对训练样本非常合适的损失函数。而且,本文首先将标注人数大于A的边缘像素作为正样例,为0的作为负样例。除此之外,还忽略了标注者人数小于A的边缘像素,既不作为正样例,也不作为负样例。
  3. 与之相反的是,HED将标注人数小于总人数一半的边缘像素作为负样例。上述做法会迷惑网络的训练,因为这些点并不是真实的分边缘像素点。

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

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

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


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

相关文章

论文笔记 HED:Holistically-Nested Edge Detection

同组小伙伴推荐的文章,一篇看似做边缘检测,实际做出了语义分割的文章,ICCV2015的文章。主要解决两个问题:(1)基于整个图像的训练和预测;(2)多尺度和多水平的特征学习。该…

HED边缘检测:Holistically-nested Edge Detection 解读

Holistically-nested Edge Detection (以下简称HED) HED通过深度学习网络实现边缘检测,网络主要有以下两个特点 Holistically:指端到端(end-to-end 或者image-to-image)的学习方式,也就是说&a…

HED 和 RCF 图像边缘检测

HED 和 RCF 图像边缘检测 引言 虽然传统边缘检测算法在不断发展的过程中也取得了很大的进步,但仍然无法做到精细的边缘检测处理。随着近年来深度学习的快速发展,计算机视觉领域因此获益颇丰,当下最先进的计算机视觉应用几乎都离不开深度学习…

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里面只是…