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

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

论文下载地址:SegNet

转载请注明:https://blog.csdn.net/weixin_42143615/article/details/109035138

一、论文简介

提出了一种新颖实用的用于语义分割的深度全卷积神经网络结构SegNet。其核心的分割网络由一个编码器网络、一个对应的解码网络和一个像素级分类层组成。编码器网络的结构在拓扑上与VGG16网络中的13个卷积层相同(与FCN一样,SegNet也基于VGG-16。不同的是,SegNet将后面3个全连接层删掉而不是像FCN一样,将其转换为卷积层)。此外,SegNet明确将反卷积(上采样)组织为解码器,将卷积(下采样)组织为编码器。解码器网络的作用是将低分辨率编码器的特征映射到全输入分辨率的特征图,以进行像素级分类。其核心思想如下:

(1)其新颖之处在于解码器对其低分辨率输入特征映射进行上采样的方式。

具体地说,解码器使用在对应编码器的最大池化步骤中计算的池索引来执行非线性上采样。这就消除了学习向上采样的需要。

(2)可以提高物体边界的分割效果。

(3)相比反卷积操作,减少了参数数量,减少了运算量;相比resize操作,减少了插值的运算量,而实际增加的索引参数也很少,并且它可以通过随机梯度下降算法进行端到端的训练。

(4)该pooling操作可以应用于任何基于编码-解码的分割模型。

二、论文内容

SegNet是为像素级语义分割而设计的,其关键组件是解码器网络,该网络由与每个编码器相对应的一个解码器按层次构成。编码器由卷积层、单元非线性、最大池和子采样组成。其中,合适的解码器使用从相应编码器接收的最大池索引来对其输入特征图进行非线性上采样。它使用一个可训练的解码器滤波器组卷积这个上采样的映射来重建输入图像。

2.1网络结构

SegNet有一个编码器网络和一个相应的解码器网络,然后是最后的像素分类层。该架构如图1所示。

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

                                                                                  图1 SegNet网络结构

(1)卷积单元

可以看到,SegNet的编码和解码都有卷积模块。这个卷积模块包含:same卷积(卷积前后尺寸不变)、BN批归一化、ReLU**。Batch Normalisition通过对输入**函数的数据做归一化处理可以在一定程度上改善梯度弥散的问题。同样,作为Sigmoid的改进版,ReLU可以通过避免输出进入饱和区域而改善梯度弥散问题。

same卷积:https://blog.csdn.net/leviopku/article/details/80327478

(2)池化与上采样

编码与解码模块最大的不同在于,前者通过池化缩小尺寸,后者通过上采样恢复尺寸。SegNet中使用最大池化,用于在输入图像中实现小空间位移的平移不变性,同时输出最大点的index。同一层次的上采样根据index确定池化前max值的点的位置,并对其他丢失的点做插值。

(3)Softmax输出

网络最后一层通过Softmax选择概率最大的为该像素的类别。

2.2 解码器的改变

为了分析SegNet并将其性能与FCN进行比较,作者使用了一个更小版本的SegNet,称为SegNet-Basic,它有4个编码器和4个解码器。SegNet Basic中的所有编码器执行最大池和子采样,相应的解码器使用接收到的最大池索引对其输入进行上采样。在编码器和解码器网络中,在每个卷积层之后都使用批标准化。卷积后不使用任何偏差,解码器网络中不存在ReLU非线性。此外,在所有编码器和解码器层上选择7×7的恒定内核大小以提供用于平滑标记的宽上下文,即,可以将最深层特征映射中的像素追溯到106×106像素的输入图像中的上下文窗口。这个小尺寸的SegNet Basic允许我们探索许多不同的变体(解码器),并在合理的时间内训练它们。同样地,我们创建了FCN Basic,一个FCN的可比版本,用于我们分析使用相同编码器网络的SegNet,但是FCN解码技术用在了所有的解码器中,如图2所示。

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

                                                                           图2 SegNet与FCN上采样区别

图2的左侧是SegNet(也是SegNet Basic)使用的解码技术,其中上采样步骤不涉及学习。然而,上采样图被卷积成可训练的多通道解码器卷积,以加密其稀疏输入。每个解码器卷积具有与上采样特征图数相同的通道数。较小的变体是解码器卷积是单通道的,即它们只卷积相应的上采样特征图。这种变体显著减少了可训练参数的数量和推理时间。

图2的右侧是FCN解码技术。FCN模型的重要设计元素是编码器特征图的降维步骤。这压缩编码器特征图,然后在相应的解码器中使用。编码器特征图(例如64个通道)的维数降维是通过用1×1×64×K可训练滤波器卷积来实现的,其中K是类的数目。压缩后的K通道最终编码器层特征映射是解码器网络的输入。在该网络的译码器中,上采样采用固定或可训练的多通道上采样核进行逆卷积。我们将内核大小设置为8×8。这种上采样方式也称为反卷积。注意,相比之下,SegNet使用可训练解码器卷积的多通道卷积是在上采样到加密特征图之后执行的。FCN中的上采样特征图有K个通道。然后将其逐元素添加到相应的分辨率编码器特征图中,以生成输出解码器特征图。上采样核使用双线性插值权进行初始化。

2.3 训练

使用CamVid道路场景数据集来测试解码器变体的性能。这个数据集很小,由367个训练图像和233个测试RGB图像(白天和黄昏场景)组成,分辨率为360×480。我们面临的挑战是分割11个类别,如道路、建筑、汽车、行人、标志、电线杆、人行道等。我们对RGB输入执行局部对比度标准化。编码器和解码器的权重都是使用何凯明等人描述的技术初始化的。为了训练所有变量,我们使用随机梯度下降(SGD),固定学习率为0.1,动量为0.9,使用SegNet Basic的Caffe实现。我们训练这个模型直到损失值收敛。在每个epochs之前,训练集被打乱,然后按顺序挑选每个小批次(12幅图像),从而确保每个图像在一个epochs中只使用一次。我们选择在验证数据集上性能最高的模型。

利用交叉熵损失作为训练网络的目标函数。在一个小批量中,所有像素的损失总和。当训练集中每个类的像素数量有很大变化时(例如道路、天空和建筑物像素主导CamVid数据集),则需要根据真实类别对损失进行不同的加权。这被称为阶级平衡。我们使用中值频率平衡[,其中在损失函数中分配给一个类的权重是在整个训练集上计算的类频率的中值除以类频率的比率。这意味着训练集中较大的类的权重小于1,最小类的权重最高。我们还试验了在没有类平衡或等效使用自然频率平衡的情况下训练不同的变体。

2.4分析

现在可以用以下几点概括上述分析:

(1)当编码器特征映射被完全存储时,性能最佳。这在语义轮廓描绘度量(BF)中反映得最清楚。

(2)当推理过程中的内存受到限制时,可以存储压缩形式的编码器特征映射(维数缩减、最大池索引)并与适当的解码器(例如SegNet类型)一起使用,以提高性能。

(3)较大的解码器可以提高给定编码器网络的性能。

三、总结

(1)编码器部分的特征如果可以被很好的保存,例如本文的pooling操作,保存了其索引,可以取得很好的分割效果,尤其是在边缘部分。

(2)SegNet效率很高,因为它只存储特征映射的最大池索引,并在其解码器网络中使用它们来获得良好的性能。

(3)本文的pooling操作可以解决推断过程中内存消耗大的问题。

(4)对于给定的编码器,使用更大的解码器可以提升分割的精度。

(5)Bayesian SegNet就是在SegNet基础上网络结构增加dropout,增加后处理操作,本质是一种模型集成。