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”:调整输入图像的尺度。
将多尺度深度学习分为四类
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
每个side-output上采样到GT的size后都会与GT有个loss,最后对这M个loss求一个加权平均,在实验部分,所有的weight即
α
=
1
\alpha=1
α=1.
由于90%的pixel都是non-edge的,所以对于此二分类任务来说,是class-imbalance的。
y
j
y_j
yj=1表示的白色,即non-edge。
β
\beta
β 是动态的,等于每张图中edge的pixel占全图pixel的比例,从
β
\beta
β放置的位置来看,对
j
∈
Y
+
j\in Y+
j∈Y+,即属于非边缘的部分乘上一个比较小的
β
\beta
β(edge pixel占比)相当于放比较小的权重,对于边缘部分来说,乘上比较大的占比,从而达到处理class-imbalance的问题。
除此之外,还有一个“weight-fusion”layer,整合上面M个side-output
论文里面有说,对于每个side-output都会有一个可以学习的weight,体现在代码中的话,对这几个side-output在channel方向上进行一个concate,此时的channel数为M,需要通过一个卷积将其channel降为class_num=2(二分类)上,不知道是不是这个可学习的权重是不是体现在这里???
所以,总的loss为:M个side-output的loss+一个fusion layer的loss
Test阶段 在做test时,作者使用的是M+1个prediction的平均值
实验结果
模型参数 除了使用在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)
side-output 1和5效果不好,一个是low-level,另一个是high-level。但是对比avg1-4和avg1-5可以看到side-output 5是有效的。
另外,作者从200张test中随机采样100张放在训练集中,发现效果提高了,表明更多的训练数据有助于网络学到更多的信息。