简介

SegNet是基于FCN,修改VGG-16网络得到的语义分割网络,基于caffe框架。

网络架构

语义分割-Segnet学习记录
SegNet由编码网络(encoder),解码网络(decoder)后接一个分类层组成。encoder与decoder是对称的。编码网络由13个卷积层组成,与VGG16的前13层卷积相同,将VGG16在大型数据集上训练得到的权重值作为编码网络的权重初始值,为了保留encoder 最深层输出的到高分辨率的feature maps,删掉VGG16中的全连接层,这么做的一个好处是可以大幅度减少encoder层中训练参数的数量(from 134M to 14.7M),每一层encoder都对应着一层decoder,因此decoder网络也是13层,在decoder网络输出后接一个多分类的soft-max分类器对每个像素生成类别概率。

encoder:

encoder网络中的每一个编码器通过一组卷积核来产生一系列的feature maps,后接一层BN+RELU+Max-pooling(2x2,stride=2),Max-pooling用于实现小空间移动上的空间不变性,同时,可以在feature map上有较大的感受野,但由于使用Max-pooling 导致分辨率上的损失。这种损失对边界界定产生不利的影响,因此encoder网络要在进行下采样前着重捕捉和保存边界信息。由于实际内存的限制,所以无法保存feature map 的全部信息。本文提出只保存encode Max-pooling中feature map value值最大的位置。对于pooling 2*2的窗口可以用2比特位实现,相比存储feature map的float精度,效率较高,但对准确率会有轻微的损失,但仍适用实际应用。

decoder:

decoder 利用对应encoder feature map中保存的max-index对输入的feature map进行上采样,产生的稀疏feature maps后接一系列可训练的卷积核,输出密集的feature maps,后接BN用于规范化处理正则化减弱过拟合,与输入对应的decoder产生多通道feature map,虽然输入只有(RGB)三通道。其他的encoder,decoder的通道数,尺寸大小都是一一对应。decoder输出的高维度的特征表示被送入一个可训练的soft-max多分类器,对每个像素进行单独分类。

亮点:

在SegNet中的Pooling与其他Pooling多了一个index功能,也就是每次Pooling,都会保存通过max选出的权值在2x2 filter中的相对位置。同时,从网络框架图可以看到绿色的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放入。

相关文章: