AI 语义分割 SegNet

SegNet

Demo: http://mi.eng.cam.ac.uk/projects/segnet/
Last Edited: May 09, 2019 5:18 PM
Tags: FCN,SegNet
论文地址: https://arxiv.org/pdf/1511.00561.pdf

前言

可以看看官网的演示效果:SegNet
或者是直接看看这个演示效果:https://youtu.be/CxanE_W46ts
在这里插入图片描述


  SegNet的主要动机是场景理解的应用(语义分割),主要动机是为了设计一个Memory and Computational Time均高效的网络结构用于道路和室内场景理解。

  设计的最初目的就是为了从解决语义分割后边界精确定位的问题。

  定量的评估表明,SegNet在和其他架构的比较上,时间和内存的使用都比较高效。

模型对比分析

Pascal VOC 12的偏向性

  1. 数据集中大部分图都有一两个由高度多样的背景包围的前景。
  2. 隐含地导致其偏向于含有检测技术的算法。

不同分割论文解码方法总结

  1. Decoupled,用大量弱标签数据进行分类网络的训练,使得分割网络性能得到改善。
  2. DeepLab,使用分类网络的特征图和独立的CRF后处理技术来执行分割。
  3. DeconvNet、Edge Boxes,使用区域proposals,通过额外的推理辅助来增强分割网络的性能。

  因此,上面这些算法,它们与场景理解的不同之处在于,他们的目的是利用对象的共同出现( co-occurrences of objects—CRF)以及其他空间上下文(other spatial-context—proposal)来执行可靠的分割。

提出原因

  多尺度的深层架构也被广泛采用。它们有两种风格,(1)使用几个尺度的输入图像和相应的深度特征提取网络;(2)组合来自单个深层结构的不同层的特征图(ParseNet)。

  通常的想法是提取多尺度特征来提供局部和全局的空间信息(zoom-out),再利用浅层编码层的特征图以保留更高频率的细节,从而获得更细致的类别边界。其中一些架构由于参数太多而难以训练。因此,多阶段训练往往也需要数据增强。由于特征是从多个卷积路径提取的,导致推理过程也是复杂度比较高的。还有的团队在多尺度网络后附加CRF,并共同训练。然而,这个步骤在测试时不是前馈的,需要优化才能确定MAP标签。

介绍

网络结构

在这里插入图片描述
  我们可以看到是一个对称网络,由中间绿色Pooling层与红色Upsampling层作为分割,左边是卷积提取高维特征,并通过Pooling使图片变小,SegNet作者称该过程为Encoder,右边是反卷积(在这里反卷积与卷积没有区别)与Upsampling,通过反卷积使得图像分类后特征得以重现,Upsampling使图像变大,SegNet作者称该过程为Decoder,最后通过Softmax,输出不同分类的最大值。

  SegNet高效的原因是因为仅仅保留了MaxPooling的结果,并没有保留卷积后的产物,因此非常节省内存。

对比VGG-16

  1. 编码网络和VGG-16的卷积层相同。
  2. 移除了全连接层。
  3. 解码器使用从相应的编码器接受的Max-Pooling Indices来进行输入特征图的非线性Upsampling。

使用max-pooling indices的原因

  Max-Pooling可以实现在输入图像上进行小的空间位移时保持平移不变性。然而,连续的下采样导致了在输出的特征图上,每一个像素都重叠着着大量的输入图像中的空间信息。对于图像分类任务,多层最大池化Max-Pooling和下采样由于平移不变性可以获得较好的鲁棒性,但导致了特征图大小和空间信息的损失。图像分割任务中边界划分至关重要,而这么多有损边界细节的图像表示方法显然不利于分割。因此,在进行下采样之前,在编码器特征映射中获取和存储边界信息是十分重要的。如果推理过程中的内存不受约束,则所有编码器特征映射(在下采样后)都可以存储。在实际应用中,情况通常不是这样,因此我们提出了一种更有效的方法来存储这些信息——只存储最大池化索引,即存储每个池化窗口中最大特征值的位置,用于每个编码器特征映射。

  基于VGG16的对称网络结构,网络把全卷积层去掉了,这样就可实现end-to-end的训练,节省计算时间。论文中提到如果把encoder卷积层的信息加入到decoder中会提高准确率,但是运算消耗增加,因此作者并没有这么做,采用了一种Unpooling的方法,如下图:

SegNet和FCN decoder方式对比

  • 没有增加参数:稀疏,且不需要参与训练
  • 降低内存:decoder不用存储encoder中的输出结果
  • 提升了边界的描绘能力
  • 该网络结构可以扩展到任意的encoder-decoder网络结构

在这里插入图片描述
  对比SegNet和FCN实现Decoder的过程。SegNet保留Pooling时的位置信息,Upsampling时直接将数据放在原先的位置,而FCN采用Transposed Convolutions+双线性插值,每一个像素都是运算后的结果。

在这里插入图片描述
  可以看出网络大小相比FCN是要小很多,但是时间上由于加了很多去卷积层,所以并不快。

解码网络中复用max-pooling indices的好处

  1. 改善了边界划分。
  2. 减少了端到端训练的参数量。
  3. 仅需要少量的修改就可以合并到任何编码-解码形式的架构。

Decode实验对比

在这里插入图片描述

变量 说明
SegNet-Basic 1. 4个Encode,4个Decode;
2. upsample上采样采用下采样downsample的indices;
3. encode/decode上,每一个conv之后接一个BN操作;
4. 对于decoder网络,conv中没有采用ReLU非线性激活函数和biases偏置;
5. 采用7x7卷积核,则VGG layer4的感受野为106x106;
6. decoder卷积的filter个数与对一个的encoder卷积filter个数相同。
SegNet-SingleChannelDecoder 1. decoder卷积核个数为1。
FCN-Basic-NoDimReduction 1. 最终的维度和对应的encoder相对应。
  • 采用双线性插值进行上采样,固定参数【不参与学习】
  • 采用max-pooling indices进行上采样【不参与学习】
  • 采用双线性插值进行上采样,参数参与学习
    • 双线性插值进行初始化
  • 结论:FCN-Basic-NoDimReduction效果最好。

总结

  该论文提出了一种encoder-decoder的分割方法,相比较FCN,该方法采用了max-pooling indices进行上采样,有效的降低了upsample中的内存使用问题。

附录

SegNet论文笔记

论文笔记 | SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation - kangdk 视其所以,观其所由,察其所安。 - CSDN博客

深度学习之语义分割-SegNet - whz1861的博客 - CSDN博客

Semantic Segmentation–SegNet:A Deep Convolutional Encoder-Decoder Architecture…论文解读 - DFan的NoteBook - CSDN博客

卷积神经网络CNN(4)-- SegNet - Fate_fjh的博客 - CSDN博客

Semantic Segmentation–SegNet:A Deep Convolutional Encoder-Decoder Architecture…论文解读 - DFan的NoteBook - CSDN博客

中文翻译

【論文翻譯】SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation - IT閱讀

发布了181 篇原创文章 · 获赞 217 · 访问量 45万+

猜你喜欢

转载自blog.csdn.net/Notzuonotdied/article/details/90519058
今日推荐