论文笔记:SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation

前言

SegNet 的新颖之处在于解码器对其较低分辨率的输入特征图进行上采样的方式。具体地说,解码器使用了在相应编码器的最大池化步骤中计算的池化索引(记录了最大池化时最大值所在的位置)来执行非线性上采样。这种方法消除了学习上采样的需要。经上采样后的特征图是稀疏的,因此随后使用可训练的卷积核进行卷积操作,生成密集的特征图。我们将我们所提出的架构与广泛采用的 FCN 以及众所周知的 DeepLab-LargeFOV,DeconvNet 架构进行比较。比较的结果揭示了在实现良好的分割性能时所涉及的内存与精度之间的权衡。
论文链接:https://arxiv.org/pdf/1511.00561.pdf
github:https://github.com/delta-onera/segnet_pytorch

1.网络结构

在这里插入图片描述
上图为SegNet的网络结构图,Encoder交替采用conv+pooling,Decoder交替采用deconv+upsampling,用Softmax做像素分类。在Encoder-Decoder过程中,采用Pooling Indices(pooling时的位置信息)转移Decoder,改善了图像分割率(参考DeconvNet)。

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

Deconvnet具有更多的参数,需要更多的计算资源,并且很难进行端到端训练,主要是因为使用了全连接层。

U-Net没有利用池化位置索引信息,而是将编码阶段的整个特征图传输到相应的解码器(以牺牲更多内存为代价),并将其连接,再进行上采样(通过反卷积),从而得到解码器特征图。

2.解码器结构

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

2.1Pooling&Upsampling(decoder):

Pooling在CNN中是使得图片缩小一半的手段,通常有max与mean两种Pooling方式,下图所示的是max Pooling。max Pooling是使用一个2x2的filter,取出这4个权重最大的一个,原图大小为4x4,Pooling之后大小为2x2,原图左上角粉色的四个数,最后只剩最大的6,这就是max的意思。

在这里插入图片描述
在SegNet中的Pooling与其他Pooling多了一个index功能(该文章亮点之一),也就是每次Pooling,都会保存通过max选出的权值在2x2 filter中的相对位置,对于上图的6来说,6在粉色2x2 filter中的位置为(1,1)(index从0开始),黄色的3的index为(0,0)。同时,从网络框架图可以看到绿色的pooling与红色的upsampling通过pool indices相连,实际上是pooling后的indices输出到对应的upsampling(因为网络是对称的,所以第1次的pooling对应最后1次的upsamping,如此类推)。

Upsamping就是Pooling的逆过程(index在Upsampling过程中发挥作用),Upsamping使得图片变大2倍。我们清楚的知道Pooling之后,每个filter会丢失了3个权重,这些权重是无法复原的,但是在Upsamping层中可以得到在Pooling中相对Pooling filter的位置。所以Upsampling中先对输入的特征图放大两倍,然后把输入特征图的数据根据Pooling indices放入,下图所示,Unpooling对应上述的Upsampling,switch variables对应Pooling indices。

2.2与FCN的对比

对比FCN可以发现SegNet在Unpooling时用index信息,直接将数据放回对应位置,后面再接Conv训练学习。这个上采样不需要训练学习(只是占用了一些存储空间)。反观FCN则是用transposed convolution策略,即将feature 反卷积后得到upsampling,这一过程需要学习,同时将encoder阶段对应的feature做通道降维,使得通道维度和upsampling相同,这样就能做像素相加得到最终的decoder输出.

3.实验效果

在这里插入图片描述
第一行为输入图像,第二行为ground truth,第三行为Bayesian SegNet语义分割输出,第四行为不确定灰度图。可以看到,
1.对于分类的边界位置,不确定性较大,即其置信度较低。
2.对于图像语义分割错误的地方,置信度也较低。
3.对于难以区分的类别,例如人与自行车,road与pavement,两者如果有相互重叠,不确定度会增加。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值