Holistically-Nested Edge Detection

ICCV 2015
Code[Pytorch]

摘要&introduction

新的边缘检测算法 :(1)image-to-image training and prediction (2)multi-scale and multi-level feature learning

由于HED是image-to-image,所以该算法可以扩展到语义分割的领域。(只不过该论文中输入的是图像边缘的GT,在图像分割技术中,输入pixel level的分割的GT)

HED能实现端到端的训练,输入一个图片,输出对应的边缘图片。

作者在introduction部分介绍了边缘检测在众多任务中的重要性,接着分三部分介绍了边缘检测的历史。

在深度学习爆炸式发展之前,最好的performance是结构化边缘方法(SE),F-score达到了0.746,同时实际计算速度为每秒2.5帧。

CNN的方法与SE相比,虽然F-score显著提升,但是速度仍有很大的改进空间。预测的时间范围从几秒到几个小时(即使使用现代GPU)。

Holistically-Nested Edge Detection

值得一提的是,本文的图像到图像训练和预测策略仍然没有明确地使用上下文信息,因为在HED中不直接强制对相邻像素标签的约束。

2.1. Existing multi-scale and multi-level NN

multi-scale和multi-level的learning可能因情况而异。

“inside”:在NN中,越来越大的感受野和下采样(跨步)层的形式,每层中学习的特征表示自然是多尺度的。

“outside”:调整输入图像的尺度。
Holistically-Nested Edge Detection

将多尺度深度学习分为四类

1、multi-stream learning: 使用不同结构,不同参数的网络训练同一副图片,类似的结构有Inception;

2、skip-net learning:该结构有一个主干网络,在主干网络中添加若干条到输出层的skip-layer,类似的结构有FPN;

上述两种方法,只有一个输出损失函数,并且产生了单个预测。然而,在边缘检测中,多个预测组合为边缘图通常是有利的(并且实际上是普遍的)。

3、a single model running on multi-scale inputs:该方法使用同一个网络,不同尺寸的输入图像得到不同尺度分Feature Map,YOLOv2采用了该方法;

4、independent networks:使用完全独立的网络训练同一张图片,得到多个尺度的结果,该方法类似于集成模型;

图c中的方法大大增加了模型的训练数据,大大削减学习系统的预测效率

图d方法则消耗了training时的资源,比如GPU和时间等等,因为要逐个训练每个网络。

2.2. Formulation

训练阶段

对每一个side-output都会连一个classifier,假设有M个side-output layers
Holistically-Nested Edge Detection
每个side-output上采样到GT的size后都会与GT有个loss,最后对这M个loss求一个加权平均,在实验部分,所有的weight即 α = 1 \alpha=1 α=1.

由于90%的pixel都是non-edge的,所以对于此二分类任务来说,是class-imbalance的。
Holistically-Nested Edge Detection
y j y_j yj=1表示的白色,即non-edge。 β \beta β 是动态的,等于每张图中edge的pixel占全图pixel的比例,从 β \beta β放置的位置来看,对 j ∈ Y + j\in Y+ jY+,即属于非边缘的部分乘上一个比较小的 β \beta β(edge pixel占比)相当于放比较小的权重,对于边缘部分来说,乘上比较大的占比,从而达到处理class-imbalance的问题。

除此之外,还有一个“weight-fusion”layer,整合上面M个side-output
Holistically-Nested Edge Detection
论文里面有说,对于每个side-output都会有一个可以学习的weight,体现在代码中的话,对这几个side-output在channel方向上进行一个concate,此时的channel数为M,需要通过一个卷积将其channel降为class_num=2(二分类)上,不知道是不是这个可学习的权重是不是体现在这里???
所以,总的loss为:M个side-output的loss+一个fusion layer的loss
Holistically-Nested Edge Detection
Test阶段 在做test时,作者使用的是M+1个prediction的平均值
Holistically-Nested Edge Detection

实验结果

模型参数 除了使用在ImageNet上pretrain好的参数外,还用val set去调超参。mini-batch size等等

另外,看到输入图片的大小对最终的结果没有影响,所以resize图片到400x400以节省GPU资源。

由于在high level side-outputs进行resize到原始图片大小的时候是coarse和global,GT是多位标注者一起标注的,易梯度爆炸,为了解决这个问题,对三个以上标注为正例的视为正例,其它为负例。

数据增强 训练时使用了16个角度的旋转,crop,16个角度的翻转,所以训练数据增加了32倍。测试时,由于数据增强没有收益,所以直接使用原始大小的图像。

**不同的pooling方法 ** 作者尝试了avg pooling,但是performance下降了

BSDS500 dataset

200 train,100 val,200 test

边缘评价标准:fixed contour threshold (ODS), per-image best threshold (OIS), and average precision (AP)

Holistically-Nested Edge Detection
side-output 1和5效果不好,一个是low-level,另一个是high-level。但是对比avg1-4和avg1-5可以看到side-output 5是有效的。

另外,作者从200张test中随机采样100张放在训练集中,发现效果提高了,表明更多的训练数据有助于网络学到更多的信息。