【论文阅读】(边缘检测相关)HED:Holistically-Nested Edge Detection

论文地址:https://arxiv.org/pdf/1504.06375.pdf

Holistically:整体

Nested:嵌套的

参考博客:
深度学习论文笔记之(一)HED边缘检测_大青上的博客-CSDN博客_深度学习边缘检测

边缘检测之HED_年轻即出发,-CSDN博客_hed边缘检测

轮廓检测论文解读 | 整体嵌套边缘检测HED | CVPR | 2015_忽逢桃林的博客-CSDN博客_cvpr边缘检测

目录

论文学习梳理

主要解决两个问题:

基本想法

创新点

算法结构

网络结构示意图

网络整体理解

损失函数

翻译部分

 摘要

1. 介绍

2. Holistically-Nested边缘检测 

2.1.现有多尺度、多层次神经网络 

2.2. 公式 

3.网络体系结构

3.1. 边缘检测裁剪网络

3.2. 结构选择

4. 实验 

4.1. 实现

4.2. BSDS500 dataset 

4.3. NYUDv2 Dataset

5. 结论


论文学习梳理

 主要解决两个问题:

  1. 基于整个图像的训练和预测;
  2. 多尺度多水平的特征学习。
    该算法通过深度学习模型,完成了从图像到图像的预测,并通过学习到的丰富的分级特征,完成边缘检测中的细节问题。  

基本想法

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

  • holistically来表示边缘预测的结果是基于图像到图像的,端到端的过程;
  • nested则强调了在生成的输出过程中不断地继承和学习得到精确的边缘预测图的过程(具体算法后面再说明)。这里使用多尺度的方法进行特征的学习,多尺度下的该方法边缘检测结果示意图如下图,图中的d,e,f分别为卷积层2,3,4响应得到的边缘检测结果,HED方法的最后输出是远远优于canny算子的 

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

创新点

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

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

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

算法结构

具体算法结构上,作者提出的holistically-nested方法,主要通过几种不同的多尺度深度学习下的结构进行对比说明。在多尺度方面,有更加内部网络形成的多尺度,和外部网络形成的多尺度。前者是学习神经网络里不同层由于降采样的不同得到的不同尺度特征,结合形成多尺度,后者是通过对输入图像的尺度处理时的多尺度,获得不同尺度信息。作者将具体多尺度下的深度学习分为四种,如下图。

  1. (a)Multi-stream learning 示意图,可以看到图中的平行的网络下,每个网络通过不同参数与receptive field大小的不同,获得多尺度的结果。输入影像是同时进入多个网络处理,得到的特征结果直接反应多尺度,再连接到一个global out layer得到输出。
  2. (b)Skip-layer network learning 示意图,该方法主要连接各个单的初始网络流得到特征响应,并将响应结合在一起输出(特点:只有一路network,从不同层提取信息连接到输出)。
  3.  这里(a)和(b)都是使用一个输出的loss函数进行单一的回归预测,而边缘检测可能通过多个回归预测得到结合的边缘图效果更好。
  4. (c)Single model on multiple inputs 示意图(就是不同尺寸的图片输入),单一网络,图像resize方法得到多尺度进行输入,该方法在训练和test过程均可加入。同时在非深度学习中也有广泛应用。
  5. (d)Training independent networks ,从(a)演化来,通过多个独立网络分别对不同深度输出loss进行多尺度预测,该方法下训练样本量较大(训练多个不同的网络(深度不同且loss也不同)
    ,得到多个不同的输出,缺点显然是资源消耗太大。)。
  6. (e)Holistically-nested networks,本文提出的算法结构,从(d)演化来,类似地是一个相互独立多网络多尺度预测系统,但是将multiple side outputs组合成一个单一深度网络。

网络结构示意图


基于VGG,做了以下改动
1)将side output layer 与每个stage(理解为每一组卷积池化)的最后一层卷积层相连,也就是conv1 2, conv2 2, conv3 3, conv4 3, conv5 3.这些卷积层的感知野尺寸与对应的side-output layer完全相同。(作者在conv1_2, conv2_2, conv3_3, conv4_3,conv5_3后面分别引出,然后接入sigmoid_cross_entropy_loss,并且在最后一层,对上面的5层的输出做了concat,同时也接入sigmoid_cross_entropy_loss,这样所有的Loss都等概率的同时训练,从而使得最终得到比较好的模型。)
在卷积层后面侧边插入一个输出层 side-output 层,在side-output层上进行deep supervision,使得结果向着边缘检测方向进行。同时随着side-output层越向后大小的变小,将receptive field变大,最后通过一个weighted-fusion layer得到多尺度下的输出。

2)去掉了VGG的最后一个stage,也就是最后一个池化和后面所有的全连接层。
这是因为全连接层太好耗资源(即使转换成conv也很费资源)
下面的表格是HED的网络配置

与FCN-网络对比:
直接替换FCN-8S中的loss为交叉熵的性能不好 ,FCN-2s network that adds additional links fromthe pool1 and pool2 layers.

  • 什么是deep supervision呢?在这里指的是来自side-output 的结果

The “fusion-output without deep supervision” result is learned w.r.t Eqn. 3. The “fusion-output with deep supervision” result is learned w.r.t. to Eqn. 4(学习了“融合输出无深度监督”的结果。将“深度监督的融合输出”结果学习到等式)简单的说就是一个模型有多个输出的结构

  • 关于The role of deep supervision:

deep supervision terms (specifically, ℓside(W,w(m)):
每一层都看做是一个独立的network的输出(在不同的尺度上)
实验表明,仅仅用weighted-fusion supervision训练,在高层的side output上很多关键的边缘信息都丢失了。

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

网络整体理解
 

  • 可以看到的是整个过程只有一个卷积+池化的过程,Unet还有上采样的过程,这是不同点;
  • 图中的有5个马的图片,从大到小,从浅到深,纹理越来越少,这分别是经过了maxpool和卷积得到的不同尺寸的输出。从图中可以看到,这些输出叫做side-output 1到side-output 5。
  • 图中这五个特征图经过虚线,得到了一个Y,这个Y是经过“weighted-fusion”得到了,简单的说就是,五个图经过一个可以训练的权重参数,融合成了最终的输出

结构不难理解,但是到这里读者肯定心中仍有疑惑,看完下面的损失函数的构成就通透了。

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

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

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

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

损失函数

这个损失函数算是deep supervision比较常见的损失函数了,就是每一个side-output输出都是损失函数的一部分

整体来说,这个损失函数是有两个部分:

  • side-output:这个就是上图中五个不同尺度的预测结果,通过上采样成原图大小,然后和mask做交叉熵。因为有5个图,所以损失是五个的和;
  • fusion:五个图fusion出得Y,这个Y与ground truth的交叉熵;
    整体损失函数为:
  • 其中 为了利用side-output的预测结果,我们增加一层weighted-fusion layer
    fusion layer 的损失函数为:(这里的Dist其实使用的就是交叉熵)

训练过程中,由于边缘检测实际是对每个像素进行2分类任务。大部分像素为非边缘(90%以上的像素点为非edge,因此极度不对称(biased)),只有少部分像素为边缘。针对这种biased sampling,文献[19] 引入cost-sensitive loss function,并增加额外的additional trade-off parameters。而HED中采用一种更简单的方法来保证正负样本的loss balance,即引入一个像素级的class-balancing weight β

为了进行正负样本的平衡,这里作者引入了class-balanced_sigmoid_cross_entropy。

此处参考轮廓检测论文解读 | 整体嵌套边缘检测HED | CVPR | 2015_忽逢桃林的博客-CSDN博客_cvpr边缘检测

 

 对于第二个问题,论文中给出了公式:

 这个h应该是一个可以训练的参数,然后加和之后用sigma归一化。

官方提供了代码,来看一下这个损失函数的TF版本:

def class_balance_sigmoid_cross_entropy(logits,label,name='cross_entropy_loss'):
    y = tf.cast(label,tf.float32)

    count_neg = tf.reduce_sum(1.-y)
    count_pos = tf.reduce_sum(y)
    beta = count_neg/(count_neg+count_pos)

    pos_weight = beta/(1-beta)
    cost = tf.nn.weighted_cross_entropy_with_logits(logits,y,pos_weight)
    cost = tf.reduce_mean(cost*(1-beta),name=name)
    return  cost

cost = class_balanced_sigmoid_cross_entropy(dsn_fuse, annotation_tensor) + \
       class_balanced_sigmoid_cross_entropy(dsn1, annotation_tensor) + \
       class_balanced_sigmoid_cross_entropy(dsn2, annotation_tensor) + \
       class_balanced_sigmoid_cross_entropy(dsn3, annotation_tensor) + \
       class_balanced_sigmoid_cross_entropy(dsn4, annotation_tensor) + \
       class_balanced_sigmoid_cross_entropy(dsn5, annotation_tensor)

测试阶段
给定图片X,我们从side-output layer和weighted-fusion layer同时获得边缘预测结果
最终的输出就是将这些结果进行一个聚合。 

HED是一个边缘检测模型,但是使用的和Unet的框架有些类似。HED使用了deep supervision的方法,而Unet并没有,这里我突然想到Unet++ 的结构,Unet++的思想完全可以沿着Unet+HED这条线路诞生。

部分翻译

目录

 摘要

1. 介绍

2. Holistically-Nested边缘检测 

2.1.现有多尺度、多层次神经网络 

2.2. 公式 

3.网络体系结构

3.1. 边缘检测裁剪网络

3.2. 结构选择

4. 实验 

4.1. 实现

4.2. BSDS500 dataset 

4.3. NYUDv2 Dataset

5. 结论


 摘要

本文提出了一种新的边缘检测算法,解决了长期存在的视觉问题中的两个重要问题:(1)整体图像的训练和预测;(2)多尺度、多层次特征学习。我们提出的方法,整体嵌套边缘检测(HED),通过利用全卷积神经网络深度监督网络的深度学习模型执行图像到图像的预测。HED自动学习丰富的层次表示(在对侧面响应的深度监督的指导下),这对于解决边缘和目标边界检测中具有挑战性的模糊性非常重要。我们在BSD500数据集(ODS F-score为。782)和NYU Depth数据集(ODS F-score为。746)上显著提高了技术水平,并且提高了速度(每幅图像0.4s),比一些最近基于cnn的边缘检测算法快了一个数量级。 

1. 介绍

在本文中,我们讨论了在自然图像中检测边缘和目标边界的问题。从传统的任务,如视觉显著性、分割、目标检测/识别、跟踪和运动分析、医学成像、从运动到三维重建的结构,到现代应用,如自动驾驶,这个问题是基础的,对各种计算机视觉领域都非常重要。移动计算和图像文本分析。人们很早就知道,在自然图像中精确定位边缘涉及到不同“层次”的视觉感知[18,27]。一项比较全面的数据收集和认知研究[28]表明,虽然不同的物体对于边缘和边界的放置位置的偏好有所不同,但物体之间的一致性令人印象深刻,例如在一致性研究[28]中达到了F - score0.80。

计算边缘检测的历史非常丰富;现在,我们着重介绍一些已被证明具有重大实际意义的代表性作品。 广义上讲,我们可以把工作分为几个组,如

  1. 早期的先驱方法:如Sobel检测器[20]、 zero crossing[27,37]和广泛采用的Canny检测器[4];
  2. 驱动的方法:信息理论在经过精心的手工设计得到的特征之上,如统计边[22]、Pb[28]和gPb [1];
  3. 仍然依赖于人类设计特征的基于学习的方法,如BEL[5]、Multi-scale[30]、Sketch Tokens[24]、Structured Edges[6]。
  4. 此外,最近有一波使用卷积神经网络的发展,强调自动分层特征学习的重要性,包括N4 - fields[10]、DeepContour[34]、DeepEdge[2]和CSCNN[19]。
  5. 在这一深度学习的爆炸性发展之前,结构化边缘方法(通常简称SE)[6]是边缘检测领域最著名的方法之一,感谢它在BSD500数据集[28]上的最先进的性能(例如,F-score为.746)和它实际上显著的2.5帧每秒的速度。
  6. 最近基于CNN的方法[10,34,2,19]已经证明了与SE相比有希望的F评分性能改进。然而,这些基于CNN的方法仍然有很大的改进空间,无论是在F评分性能上还是在速度上——目前,进行预测的时间范围从几秒[10]到几小时[2](即使使用现代gpu)。

在这里,我们开发了一个端到端边缘检测系统,整体嵌套边缘检测(HED),自动学习丰富的层次特征类型,如果我们要接近人类的能力,以解决自然图像边缘和对象边界检测的模糊。

  • 我们使用术语“整体”,因为HED虽然没有明确地建模结构化输出,但目的是以一种图像到图像的方式训练和预测边缘。
  • 对于“嵌套”,我们强调作为边输出生成的继承的和逐渐细化的边映射——我们想要表明,每个预测所沿着的路径对这些边映射都是公共的,而连续的边映射更简洁

这种层次特征的综合学习不同于以往的多尺度方法[40,41,30],在这些方法中,尺度空间边缘场既不是自动学习的,也不是分层连接的。图1给出了与人体主体ground truth注释的示例图像的说明,以及本文提出的HED边缘检测器的结果(包括各层的侧响应),以及不同尺度参数的Canny边缘检测器[4]的结果。不同尺度上的Canny边缘不仅没有直接连接,而且还表现出空间位移和不一致性。

 图1所示。提出的HED算法的说明。
第一行:(a)显示了BSD500数据集[28]中的示例测试图像;(b)显示人体受试者标注的相应边缘;(c)显示HED结果。
第二行(d)、(e)和(f)分别显示了卷积神经网络第2层、第3层和第4层的侧边响应。
第三行(g)、(h)和(i)分别显示了在σ= 2.0、σ= 4.0和σ= 8.0尺度下Canny探测器[4]的边缘响应
HED在一致性方面明显优于Canny。

提出的整体嵌套边缘检测器(HED)解决了两个关键问题:
(1)基于全卷积神经网络[26]的整体图像训练和预测,用于图像到图像分类(系统以一幅图像作为输入,直接产生边缘图图像作为输出);
(2)嵌套的多尺度特征学习,受深度监督网络[23]的启发,进行深层监督,“指导”早期分类结果。
我们发现这些基础技术在HED中表现出的优点是既精确又计算效率高。

2. Holistically-Nested边缘检测 

在本节中,我们详细描述了我们提出的边缘检测系统的制定。我们首先讨论相关的基于神经网络的方法,特别是那些强调多尺度和多层次特征学习的方法。边缘目标边界检测的任务本身就是一个挑战。经过几十年的研究,已经出现了一些关键的属性,它们可能在一个成功的系统中发挥作用:

(1)精心设计和/或学习的特征[28,5],(2)多尺度响应融合[40,32,30],(3)不同水平视觉知觉的参与[18,27,39,17],如中级格式塔规律信息[7],(4)结合结构信息(输入数据和输出解决方案中携带的内在相关性)[6]和上下文(短期和长期交互)[38],(5)进行整体图像预测(指全局直接取图像内容进行预测的方法)[25],(6)利用3D几何体[15],(7)寻址遮挡边界[16]。

  • 结构化边缘(SE)[6]主要关注以下三个方面:使用大量人工设计的特征(属性1),融合多尺度响应(属性2),并合并结构信息(属性4)。
  • 最近一波使用CNN进行基于patch的边缘预测的工作[10,34,2,19]包含了另一种共同的思路,主要关注三个方面:自动特征学习(属性1)、多尺度响应融合(属性2)以及不同层次视觉感知的可能参与(属性3)。
  • 然而,由于缺乏深度监督(我们的方法中包含了这一点),[2,19]中隐藏层产生的多尺度响应在语义上意义不大,因为反馈必须通过中间层反向传播。更重要的是,他们的patch-to-pixel或patch-to-patch策略导致训练和预测效率显著降低。
  • 通过“整体嵌套”,我们打算强调我们正在生产一个端到端边缘检测系统,该策略受到全卷积神经网络[26]的启发,但在经过修剪的VGG网络[36]上有额外的深度监督(如图3所示)。在缺乏深度监督和侧面输出的情况下,全卷积网络[26](FCN)产生的结果并不令人满意(如F-score)。因为边缘检测需要高度精确的边缘像素定位。值得一提的是,我们的图像到图像的训练和预测策略仍然没有明确地涉及上下文信息,因为在HED中没有直接执行对相邻像素标签的约束。除了相对于基于patch的CNN边缘检测方法的速度增益外,性能增益主要来自三个方面:
    (1)类FCN图像到图像训练允许我们同时训练大量的样本(见表4);
    (2)在我们的模型中,深度监督指导更透明特征的学习(见表2);
    (3)在端到端学习中插入侧输出鼓励了各层的一致性贡献(见表3)。

2.1.现有多尺度、多层次神经网络 

由于深度卷积神经网络中层次学习的本质,多尺度和多层次学习的概念可能因情况而异。
例如,

  • 多尺度学习可以“在”神经网络内部,以越来越大的接受域和下采样(跨步)层的形式。在这种“内部”的情况下,在每一层中学习的特征表示自然是多尺度的。
  • 另一方面,多尺度学习可以“在”神经网络之外,例如通过“调整”输入图像的尺度。

虽然这两种变体有一些显著的相似之处,但我们已经看到它们都被应用到各种任务中。

接下来,我们将多尺度深度学习的可能配置形式化为四类,即多流学习跨网络学习在多个输入上运行的单个模型独立网络的训练。如图2所示。考虑到这些可能性,将有助于更清楚我们所提议的整体嵌套网络方法与以往工作的不同之处,并有助于突出在代表性和效率方面的重要好处。

2(a)给出了一个典型的多流学习体系结构。请注意,多个(并行)网络流有不同的参数数和接收字段大小,对应于多个尺度。输入数据被同时输入到多个流中,然后由不同流产生的串接的特征响应被输入到全局输出层以产生最终结果。

跨层网络学习:这种网络形式的例子包括[26,14,2,33,10]。“跨层”网络学习的关键概念如图2(b)所示。与训练多个并行流不同,skip-net体系结构的拓扑以一个主流为中心。添加链接是为了合并来自主网络流不同级别的特征响应,然后这些响应被合并到一个共享的输出层中。

上述两种设置的一个共同点是,在这两种架构中,只有一个输出损失函数和产生的单一预测(看图可以发现最后归结为一个节点)。然而,在边缘检测中,通常是有利的(确实流行的),以获得多个预测结合在一起的边缘地图。

单模型多输入:为了得到多尺度的预测,还可以在多个(缩放)输入图像上运行单个网络(或带绑定权重的网络),如图2(c)所示。这种策略可以发生在训练阶段(作为数据增强)和测试阶段(作为“集成测试”)。一个显著的例子是固定权重金字塔网络[8]。这种方法在基于非深度学习的方法[6]中也很常见。需要注意的是,集成测试会降低学习系统的预测效率,特别是对于更深层的模型[2,10]。

训练独立网络:作为图2(a)的极端变体,我们可以追求图2(d),图2(d)是通过训练不同深度和不同输出损耗层的多个独立网络来进行多尺度预测。这实际上可能难以实施,因为这种重复会增加培训所需的资源。

全嵌套网络:我们列出这些变体,以帮助澄清现有方法和我们提议的全嵌套网络方法之间的区别,如图2(e)所示。就表示和计算复杂度而言,现有方法中经常存在显著的冗余。我们提出的全嵌套网络是一个相对简单的变体,能够从多个尺度产生预测。架构可以被解释为图2(d)中“独立网络”方法的“全嵌套”版本,这促使我们选择名称。我们的体系结构由具有多个侧输出的单流深度网络组成。这种体系结构类似于之前的几项工作,特别是深度监督网[23]方法,作者在该方法中表明,隐藏层监督可以提高图像分类任务的优化和泛化。如果需要统一的输出,多端输出也给我们增加一个额外的融合层的灵活性。

2.2. 公式 

 略

3.网络体系结构

接下来,我们描述了HED的网络架构。

3.1. 边缘检测裁剪网络

为我们的框架选择层次结构值得思考。我们需要架构(1)深度,以便有效地生成感知多层次的特征;和(2)有不同步幅的多个阶段,从而捕捉到边缘图的固有比例尺。我们必须牢记,从零开始训练此类深度神经网络时,要经历多个阶段的潜在困难。最近,VGGNet[36]被认为在ImageNet挑战中实现了最先进的性能,具有极大的深度(16个卷积层)、极大的密度(大步-1卷积核)和多个阶段(5个2步下行采样层)。最近的工作[2]也证明了在一般的图像分类任务上预先训练的微调深度神经网络对低水平的边缘检测任务是有用的。

因此,我们采用了VGGNet架构,但做了以下修改:

  • (a)我们在每个阶段将我们的侧输出层连接到最后一个卷积层,分别是conv12、conv22、conv33、conv43、conv53。每个卷积层的接收域大小与相应的侧输出层相同;
  • (b)剪掉VGGNet的最后阶段,包括第5池化层和所有全连通层。

“精简”VGGNet的原因有两个。

  1. 首先,因为我们希望得到具有不同尺度的有意义的边输出,所以stride 32的层会产生一个太小的输出平面,其结果是插值的预测图将过于模糊而无法使用。
  2. 其次,完全连接的层(即使当重定向为卷积时)是计算密集型的,因此从pool5上裁剪层可以显著降低训练和测试期间的内存/时间成本。

我们最终的HED网络架构有5个阶段,步幅分别为1、2、4、8和16,并且具有不同的接收域大小,全部嵌套在vggnet中。有关接收字段和跨步配置的摘要,请参见表1。

表1。应用于HED的VGGNet[36]的感受野和步幅。加粗的卷积层连接到额外的侧输出层。

3.2. 结构选择

下面我们将讨论一些可能的方案在结构设计中,特别是HED的深度监督在边缘检测任务中的作用。

表2。可选体系结构在BSDS数据集上的性能。“融合输出无深度监督”的结果是学习w.r.t Eqn.3。将“深度监督的融合输出”结果学习到Eqn.4。

FCN和跨层架构 
FCN模型中使用的拓扑结构与我们的HED模型有几个方面的不同。正如我们已经讨论过的,虽然FCN重新解释了逐像素预测的分类网络,但它只是一个输出损失函数。因此,在FCN中,虽然跳越网结构是一种结合了粗、高层信息和细、低层信息的DAG,但它并没有明确地产生多尺度输出预测
我们探索如何在与HED模型相同的实验设置下,将该体系结构用于边缘检测任务。

  • 我们首先尝试直接应用FCN-8s模型,用交叉熵损失代替损失函数进行边缘检测。table2的第一行显示的结果并不令人满意,这是意料之中的,因为这个架构还不够好。我们将进一步探讨是否可以通过添加来自底层的更多链接来提高性能。
  • 然后,我们创建一个fcn -2网络,它添加了来自pool1和pool2层的其他链接。尽管如此,直接应用FCN跨网拓扑仍落后于我们提出的HED架构(见表2第二行)。通过对FCN的大量调整,我们有可能在边缘检测上取得竞争性能,但HED的多尺度侧面输出对于边缘检测来说是自然和直观的。

深度监督的作用:由于我们合并了一个加权融合输出层,将每个侧输出层连接起来,因此有必要证明采用深度监管术语(具体来说,‘侧(W, W (m)):此时整个网络是路径连接的,输出层参数可以通过加权融合层误差传播路径的反向传播进行更新(受公式3的约束)。在这里,我们表明深度监督是重要的,以获得所需的边缘图。我们提出的网络的关键特征是,每个网络层都应该扮演一个独立网络的角色,负责生成一定比例的边缘图。以下是基于上面讨论的两种变体的一些定性结果:(1)同时使用加权融合监督和深度监督进行训练,(2)只使用加权融合监督进行训练。

我们观察到,在深度监督的情况下,嵌套的侧输出是自然和直观的,因为连续的边缘地图预测是逐渐粗到细,局部到全局。另一方面,只有加权融合输出损耗的训练给出的边缘预测缺乏这种可识别的顺序:许多关键边缘在较高的层侧输出缺失;在完全相同的实验设置下,在基准数据集(表2的第三行)上的结果只有略微不同的f分数,但显示严重退化的平均精度;由于没有跨多个尺度的直接控制和引导,该网络严重偏向于学习大型结构的边缘。

4. 实验 

 在本节中,我们将讨论我们的详细实现,并报告我们提出的算法的性能。

4.1. 实现

我们使用公共可用的Caffe来实现我们的框架,并在FCN[26]和DSN[23]的公共可用实现之上构建。在我们的HED系统中,整个网络是通过预先训练的VGG-16网络模型从初始化开始进行微调的。

模型参数 与微调CNN进行图像分类或语义分割相比,调整CNN进行低水平边缘检测需要特别注意。数据分布、ground truth分布和损失函数的差异都导致了网络收敛的困难,即使是预先训练的模型初始化。我们首先使用一个验证集,并遵循[6]中使用的评估策略来调优深度模型超参数。超参数(以及我们选择的值)包括:小批量(10),学习率(1e-6),每个侧输出层的损失权重αm(1),动量(0.9),嵌套滤波器的初始化(0),融合层权值的初始化(1/5),权值衰减(0.0002),训练迭代次数(10,000;学习速率除以5000后的10)。我们关注网络的收敛行为。我们观察到,每当训练收敛时,验证集上F-score的偏差趋于非常小。为了研究是否包括额外的非线性帮助,我们还考虑在每个侧输出层之前添加一个额外的层(有50个过滤器和一个ReLU)的设置;我们发现,这样会降低性能。另一方面,我们观察到嵌套的多尺度框架对输入图像尺度不敏感;在我们的训练过程中,我们通过调整所有图像的大小来利用这一点to400×400to减少GPU内存的使用,并利用高效的批处理。在接下来的实验中,我们修正了上面讨论的所有超参数的值,以探索HED可能变体的好处。

Consensus sampling 在我们的方法中,我们在每个侧输出层复制ground truth,并将(下采样)侧输出的大小调整为其原始比例。因此,在高层次的边输出中存在着不匹配的情况:边缘预测是粗糙的、全局的,而ground truth中仍然含有许多弱边缘,甚至可以被认为是噪声。这个问题会导致有问题的收敛行为,即使是在预先训练的模型的帮助下。我们观察到这种不匹配导致了在高水平侧输出层爆炸的反向传播梯度。因此,我们调整如何使用BSDS数据集中的ground truth标签来解决这个问题。具体来说,ground truth标签是由多个注释器提供的,因此,隐含地,更大的标签器共识表明更强的ground truth边缘。

我们采用一种相对的蛮力解决方案:只有当一个像素被至少三个注释器标记为正时,才为它分配一个正标签;将所有其他标记的像素视为负值。这有助于解决高水平侧输出层中的梯度爆炸问题。对于低层,这种一致性方法为边缘分类带来了额外的鲁棒性,并防止网络被弱边缘干扰。尽管在本文中没有进行充分的探讨,但对ground truth边缘的共识级别的谨慎处理可能会导致进一步的改进。

Data augmentation  数据增强已被证明是深度网络中的一项关键技术。我们将图像旋转到16个不同的角度,并裁剪旋转后图像中最大的矩形;我们还在每个角度翻转图像,得到一个比未增强集大32倍的增强训练集。在测试过程中,我们对原始大小的输入图像进行操作。我们还注意到,“整体测试”(对旋转/翻转的图像进行预测并对预测进行平均)在f分数和平均精度方面都没有提高。

 Different pooling functions 之前的工作[2]表明,不同的池函数对边缘检测结果有很大的影响。我们进行了一个控制实验,将所有的池化层都替换为平均池化层。我们发现使用平均池会将性能降低到ODS=.741。

 网络双线性插值 侧输出预测上采样采用网络内反卷积层实现,类似于[26]。我们修复了所有的反卷积层来执行线性插值。虽然在[26]中指出可以学习任意插值函数,但我们发现学习反卷积在我们的实验中并没有得到明显的改进。

Running time 在单个NVIDIA K40 GPU上进行训练大约需要7小时。对于一个320×480图像,生成最终的边缘图需要HED 400 ms(包括接口开销),这比现有的基于cnn的方法要快得多[34,2]。一些以前的边缘检测器也试图通过牺牲效率来提高性能(例如,通过对来自多个尺度的输入图像测试,并对结果求平均)

4.2. BSDS500 dataset 

我们在由200张训练图像、100张验证图像和200张测试图像组成的Berkeley Segmentation Dataset and Benchmark (BSDS 500)[1]上评估HED。每张图片都手工标注了ground truth轮廓。边缘检测精度的评估采用三个标准措施:固定轮廓阈值(ODS),每幅图像最佳阈值(OIS)和平均精度(AP)。我们采用标准的非最大抑制技术来获得薄边以进行评估。结果如图5和表4所示。

 Side outputs 为了显式验证边线输出,我们在表3中总结了各个边线输出在不同比例尺下产生的结果,包括多比例尺边缘图的不同组合。我们在这里强调,所有的侧输出预测都是在一次传递中获得的;这使我们能够充分研究组合输出的不同配置,而不需要额外的成本。从结果中可以观察到一些有趣的现象:例如,结合多个尺度的预测可以获得更好的性能;此外,所有的侧输出层都有助于性能增益,无论是在f分数或平均精度。要看到这一点,在表3中,侧输出层1和层5(最低和最高层)实现了类似的相对较低的性能。人们可能会认为这两个侧输出层在平均结果中没有用处。然而,事实并非如此——例如,平均1-4人达到ODS=.760。加上侧输出层5,平均预测得到ODS=.774。在考虑其他范围时,我们也发现了类似的现象。如上所述,使用不同的组合策略得到的预测是互补的,将平均预测与学习的融合层预测进行较晚的合并会得到最好的结果。另一个观察结果是,与之前的“非深度”方法相比,所有“深度”方法在高召回状态下的表现下降得更多。这可能表明深度学习特征能够(并且有利于)学习全局对象边界——因此省略了许多弱边。在高召回状态下,HED优于其他基于深度学习的方法,因为深度监督有助于我们考虑低水平的预测

延迟合并以提高平均精度  我们发现加权融合层输出在Fscore中具有最好的性能。然而,与直接平均所有侧输出相比,平均精度下降。这可能是因为我们在融合层权值学习中关注“全局”对象边界。利用HED中现成的侧输出,我们将融合层输出与侧输出合并(无需额外成本),以补偿平均精度的损失。这个简单的启发式方法为我们提供了图5和表4中报告的所有度量的最佳性能。

More training data  深度模型在各种计算机视觉应用中都取得了显著的进步,至少部分是由于大量训练数据的可用性。然而,在边缘检测中,我们受到现有基准中可用训练图像的数量的限制。在这里,我们想探讨增加更多的训练数据是否有助于进一步提高结果。为此,我们从测试集中随机抽样100张图像来扩展训练集。然后对剩余的100张测试图像进行评估。我们报告了5个这样的试验的平均结果。

我们观察到,只要添加100个训练图像,性能就会从ODS=得到改善。782到ODS=.797(±.003),几乎达到人体基准。这表明了一个很有潜力的方向,即通过更大的数据集对HED进行训练来进一步增强HED。

4.3. NYUDv2 Dataset

NYU Depth (NYUD)数据集[35]有1449张RGB-D图像。在[31]和[11]中使用该数据集进行边缘检测。这里我们使用[6]中描述的设置,并对[11]处理的数据计算HED。NYUD数据集被分成381张训练图像、414张验证图像和654张测试图像。所有的图像都是相同的大小,我们训练我们的网络在全分辨率的图像。正如在[12,6]中所使用的,在评估过程中,我们将边缘预测的正确匹配允许的最大公差从.0075增加到.011。

深度信息编码 在[12]和[26]取得成功后,我们通过利用HHA特征来利用深度信息,其中深度信息嵌入到三个通道中:水平视差、地面高度和当地地表法线与推断重力方向的角度。我们使用与BSDS 500相同的HED架构和超参数设置。我们并行训练两个不同的模型,一个在RGB图像上,另一个在HHA特征图像上,并报告结果如下。通过利用RGB- d信息,我们直接对RGB和HHA预测进行平均,从而产生最终结果。我们还尝试了其他方法来合并深度信息,例如,通过对原始深度通道进行训练,或者通过在第一卷积层之前将深度通道与RGB通道连接起来。这些尝试都没有产生显著的改善,相比于批准的马萨诸塞州HHA。HHA特征的有效性表明,尽管深度神经网络能够自动学习特征,但对于深度数据,手工精心设计的特征仍然是必要的,特别是当只有有限的训练数据可用时。

表5和图6显示了HED与其他竞争方法的查全率评价结果。我们的培训网络结构与BSDS保持一致。在测试期间,我们使用了average2 -4预测,而不是fusion层输出,因为它产生了最好的性能。我们不执行延迟合并,因为合并两个来源的边缘地图预测(RGB和HHA)已经给出了良好的平均精度。请注意,只使用RGB模式获得的结果已经比以前的方法更好。

 

5. 结论

在本文中,我们开发了一种新的基于卷积神经网络的边缘检测系统,该系统以实际相关的速度在自然图像上展示了最先进的性能(例如,GPU 0.4秒,CPU 12秒)。我们的算法建立在全卷积神经网络和深度监督网络的思想之上。我们也通过采用一个预先训练过的裁剪过的VGGNet来初始化我们的网络结构和参数。我们的方法通过结合多尺度和多层次的视觉反应,在执行图像到图像的学习中显示出良好的结果,即使明确的上下文和高层信息没有被强制执行。源代码和经过训练的模型是可用的 https://github.com/s9xie/hed 

猜你喜欢

转载自blog.csdn.net/dujuancao11/article/details/122884416
今日推荐