0
点赞
收藏
分享

微信扫一扫

Holistically-Nested Edge Detection 论文总结

主要工作

​​ Holistically-Nested Edge Detection https://arxiv.org/abs/1504.06375 ​​


提出了一种整体嵌套边缘检测网络(Holistically-Nested Edge Detection,HED),用于自然图像的边缘以及物体边界的检测。首先将 VGG 网络的第五层卷积以后的池化层以及所有全连接层全部删除,剩下的部分作为基础网络。然后将五个卷积层输出的特征图分别上采样至输入图像大小,从侧边输出边缘预测图像,与标签图像进行误差计算和反向传播,形成深度监督。再将以上五个输出边缘预测图进行特征融合,得到更精确的边缘预测图像,也进行误差计算和反向传播。最后在 BSD500 以及 NYUD 数据集上进行了测试。结果表明该方法在 BSD500 和 NYUD 上分别取得了 0.782 和 0.746 的 ODS F-score ,性能表现上远超过现有最先进的方法;同时在运行速度上也快其他 CNN 方法几个数量级,平均每幅图预测只需要 0.4s。

Holistically-Nested Edge Detection 论文总结_深度监督

网络结构

HED 的网络结构设计时,主要考虑了以下几个方面的问题:

  • 根据经验,对于边缘和物体边界检测,通常需要从不同层级、不同尺度进行视觉感知,因此网络设计时需要兼顾这两个关键点;
  • 当网络层数较深时,会给训练带来困难。

综合以上问题和现有的 VGG 网络以及深度监督方法,作者设计出了 HED 的主体架构。

  • VGG 结构改造。VGG 在图像分类任务上已经被证明了具有强大学习能力,因此在 VGG16 网络上进行改进。对于五个卷积层,分别将 ​​Conv1-2​​、​​Conv2-2​​、​​Conv3-3​​、​​Conv4-3​​、​​Conv5-3​​ 这五个阶段的特征图通道数压缩到 1 ,并上采样到输入图像尺寸大小,激活后输出边缘预测图。对于 Conv5-3 之后的池化层以及全连接层,将他们全部删除,以减少参数量,加快训练;并且卷积次数太多,导致最终的特征图很小,如果再进行上采样的话,会使得图像的边缘变得十分模糊,所以索性将他们全部删除掉。这样下来,得到了多尺度和多层级的边缘预测图。
  • 深度监督。但是,如何确保侧边输出的预测图一定是我们想要的边缘图像?为了解决这个问题,将标签图分别与各侧边输出图计算误差和反向传播,这样形成一种深度监督。网络只有让侧边输出的图像尽可能的像标签图像,才会逐渐收敛,否则就惩罚它。
  • 特征融合。五个侧边输出图像来自于五个卷积层,这些卷积层是具有层级关系的,层数越深,网络的分类特征越丰富,所以五个输出边缘预测图边缘特征逐渐精细。为了更进一步的充分发挥这五个侧边输出的作用,将他们做一个特征融合,即首先将输出预测图堆叠到一起,做一个卷积,让网络去学习合适的权重,对这几个特征图进行加权融合,从而输出一个更精细的边缘预测图。

Holistically-Nested Edge Detection 论文总结_边缘检测_02

损失函数

根据前面所设计的网络结构,网络进行了侧边输出以及融合输出,因此对应的损失值计算也来自这两部分。

对于五个侧边输出,类似于图像分割,因此考虑使用二进制交叉熵(Binary Cross Entropy,BCE)进行计算。但边缘检测的图像与图像分割图像有很大差异,图像中作为边缘的像素数目非常少,而绝大多数的其他像素都是非边缘的,这就存在一个类不平衡问题。不可以直接使用 BCE ,否则网络得不到足够的训练,更倾向于将像素预测为非边缘的,以获得更低的损失值,但这是我们不想要的,我们希望网络对边缘像素预测的更准一点。因此作者引入一个权重 \(\beta\) ,来平衡损失值。分别统计数据集中边缘像素和非边缘像素的总数,对于预测为边缘像素的,其损失值乘以一个非边缘像素占总像素的比值,同理,预测为非边缘像素的,也乘以一个边缘像素占总像素的比值。这样实现类平衡调整。即

Holistically-Nested Edge Detection 论文总结_卷积_03

对上面这个目标损失函数作最小值优化,即可训练得到所需的网络模型。

数据集

使用了两个常用的边缘检测数据集进行测试。

BSD500

下载地址:​​https://www2.eecs.berkeley.edu/Research/Projects/CS/vision/grouping/resources.html​​

训练集

验证集

测试集

200

100

200

NYUD

下载地址:​​https://cs.nyu.edu/~silberman/datasets/nyu_depth_v2.html​​

训练集

验证集

测试集

381

414

654

训练与测试

训练时,使用 VGG16 预训练权重进行初始化。各超参数选取如下:

  • 优化器:随机梯度下降优化器(SGD)
  • 批大小(batch size):10
  • 学习率(learning rate):1e-6
  • 侧边输出损失值求和时的权重 \(\alpha_m\) :1
  • 动量(momentum):0.9
  • 卷积层权重初始化为0,融合层的卷积权重初始化为1/5
  • 权重衰减系数(weight decay ):0.0002
  • 训练轮数(epoch):10000
  • 学习率更新策略:当迭代轮数达到5000后,学习率除以10
  • 输入图像的大小统一重新调整为 400 × 400 大小,以加快 GPU 处理速度

对比实验

体系结构替代

为了验证所提的网络模型是否具有明显的优势,即该网络结构能否被替换。对比了四种网络: FCN-8S(损失函数改为交叉熵)、FCN-2S(在网络中添加来自 pool1 和 pool2 层的其他链接)、HED在不对侧边层输出进行深度监督情况下的融合层输出(Fusion-output (w/o deep supervision))以及HED在对侧边层输出进行深度监督情况下的融合层输出(Fusion-output (with deep supervision))

对比结果发现,FCN 效果不如所提出的HED 模型;然后HED加深度监督比不加深监督要好。

Holistically-Nested Edge Detection 论文总结_边缘检测_04

当不加深监督时,预测的边缘更粗糙,加了深监督后,各层的侧边输出具有明显的渐进特点,输出变得越来越粗,越来越全局化,保留了关键的边界信息。

Holistically-Nested Edge Detection 论文总结_深度监督_05

其他结论

  • 作者对原始数据集进行了扩张,使用16个不同角度旋转+翻转操作,可扩大32倍,这里旋转后需要裁剪最大矩形,去除黑色背景带来的影响。
  • 如果将所有池化层全部换为平均池化,会使性能降低到 ODS = .741
  • 上采样可以使用插值也可以使用转置卷积,但作者发现转置卷积效果并不明显,因此选择了插值方法进行上采样。
  • 网络在 单个 NVIDIA K40 GPU 上训练大概需要 7 个小时。

BSDS500数据集上的多模型对比实验

Holistically-Nested Edge Detection 论文总结_数据集_06

可以看到 HED 效果最好,F = 0.782,最接近人类水平 0.800。

作者还发现,加权融合的输出能够获得更高的 F-score,而对五个层进行平均则可获得更高的 AP,而将这二者在做一个平均则效果得到进一步提升。

Holistically-Nested Edge Detection 论文总结_权重_07

剩下的就是与其他模型对比了:

Holistically-Nested Edge Detection 论文总结_权重_08

作者还探讨了数据集的容量带来的影响,将测试集中随机采样100张图像扩充到训练集中进行训练,剩下的100张做测试,结果发现ODS 从0.782 提升到了 0.797(±.003),这说明数据集的扩增可以提升模型性能,未来通过更大的数据集可以将模型性能训练到接近人类水平。

NYUD数据集上的多模型对比实验

这里的数据集是深度图像,因此与前面的有所区别。

Holistically-Nested Edge Detection 论文总结_卷积_09

作者使用三个通道对深度图像进行​​HHA编码​​,得到 HHA 特征图像作为输入图像数据,此外还有RGB图像。结果如下:

Holistically-Nested Edge Detection 论文总结_深度监督_10

论文代码

作者原始论文的代码是使用 caffe 实现的,项目地址为 ​​https://github.com/s9xie/hed​​

基于 Pytorch 实现的 HED 项目如下:

  • ​​pytorch-hed​​​
  • ​​pytorch-HED​​​

未经作者授权,禁止转载 THE END

举报

相关推荐

0 条评论