Holistically-Nested Edge Detection 边缘检测论文笔记

摘要:这篇论文提出了一种基于FCNN和深度监督网络的新的边缘检测算法HED,它解决了两个重要的问题,1)整体图片的训练和预测,2)多尺度多层级的特征学习。HED能实现端到端的训练,输入一个图片,输出对应的边缘图片。

下图中的图c即为HED输出的边缘检测结果,d-f是不同side layer(后面会具体提到)的输出,g-i是Canny边缘检测器的输出。可以看到HED效果明显更好。


b47c51c8-7caf-4cbe-a67b-6a61babefb3c.png.png

算法总览

3847bf0c-cd4b-41e4-8dd4-135248e31956.png.png

HED的思想来源于多尺度&多级别学习的概念,有的是通过内在网络结构的多尺度学习,有的是通过缩放扭曲图片进行的,上图的a-d就是作者列出的一些现有的多尺度&多级别学习的神经网络。前两个网络的问题是只有单一的输出层,所以只有一个预测结果,而在边缘检测中获得多个预测结果然后将所有的边缘映射平均是更有利的。 而图c中的方法一般更多用于不基于深度学习的方法,因为它会大大削减学习系统的预测效率。而作为图a的变种,图d中的方法分别训练多个不同层级的网络,但是这样会导致需要数倍的训练数据。而本论文提出的HED方法就改进自图d中的方法,如图e所示,它将同一个深度学习网络的不同层级侧面输出(side output)。

损失函数

首先,我们定义了针对侧面输出的图片级别的边缘损失函数,其中G(m)是根据侧面输出层(side output layer)m上采样到原始图像尺寸得到的图形,每一个侧面输出层都和一个分类器相连,我们将这些分类器的参数记为w,将其它网络参数统统记为W,G是grondtruth,△是用来计算预测边缘映射和ground truth之间差距的能量函数,αm是用来控制每一个独立的侧面输出层的损失函数占比的超参数。

f703bcab-69dd-4203-bd44-98e752ff8126.png.png

然而在一张图片中,百分之九十的区域都是非边缘,为了解决边缘和非边缘不平衡的问题,论文引入了一个类平衡圈子β,用它来定义我们在公式(1)中用到的类平衡交叉熵函数△:

6b3b50c8-7eaf-4e06-a3d2-52fa8455c1b5.png.png

其中I,I-和I+分别代表总像素,非边缘像素和边缘像素的个数。βj=I-/I(Ij是正样本),1-βj=I+/I(Ij是负样本)。

网络结构
在这篇论文中作者选择了VGG16作为基础网络,对它进行了修剪和更改。

文中提到做了以下更改:
a)连接侧输出层(side output layer)到每一个阶段的最后一个卷积层在,分别为conv1 1,conv3 conv2 2,3,3 conv4,conv5 3。侧输出层被实现为具有内核大小1和输出数1的卷积层。因此每一个卷积层的感受野的大小是相同的相应的对应侧输出层。
B)去掉了VGG第五层的池化层和全连接层。
修剪完之后的网络如下图所示。

f00428d6-c6fd-4d73-b027-4d90045cc31c.png.png

权重混合数层
为了最好地利用本论文提出的结构中的每个侧输出层的结果,我们增加了一个“权重混合层”用来将所有的侧输出层的预测结果连接到一起并且在训练的过程中学习混合权重。我们将混合权重记为h,混合权重层的损失函数如下:

2ad5a9b5-6939-4451-8181-2bf62c9f171c.png.png

所以总体的损失函数为:
8cd9b33f-de83-464d-9ab4-5a18e94a35ea.png.png

同时,论文还特别探讨了隐藏监督层的必要性,即之前在侧输出层进行的卷积操作;因为会有人觉得有了权重混合层之后之前的隐藏监督层就没有必要了。
但是实际上,隐藏输出层是非常重要的,因为论文提出的网络的主要特点是,每一个网络层都应该充当一个单一的网络,负责在一定的范围内产生一个边缘映射。论文也提供了一组对比图,从图中可以看出,在没有隐藏监督层的情况下,边缘不连续,并且丢失了很多重要边缘。如下:

bf0ceac9-69c8-49f4-a1da-e1f8210e5e52.png.png

总结:这篇论文提出的HED方法进行边缘检测还是很可靠的,它提出的这种从深度网络的每一层引一个侧面输出出来再进行混合的思想也可以借鉴。