深度学习--SegNet总结

SegNet复现详解(全英文):http://mi.eng.cam.ac.uk/projects/segnet/tutorial.html

代码实现:GitHub:https://github.com/alexgkendall/caffe-segnet

论文:《SegNet: A Deep Convolutional Encoder-Decoder Architecture for Robust Semantic Pixel-Wise Labelling》

简介:SegNet是旨在解决自动驾驶或者只能机器人的图像语义分割网络,其基于caffe框架。SegNet基于FCN,修改了VGG-16网络得到的语义分割网络,有两种SegNet,分别为SegNet和贝叶斯SegNet,同时SegNet作者根据网络的深度提供了一个Basic版。

 

网络框架:

深度学习--SegNet总结_第1张图片

 SegNet和FCN的思路很类似,只有在上采样和下采样中使用的技术不同。此外,SegNet的编码器部分使用的是VGG-16的前13层卷积网络,每个编码器层都对应一个解码器层,最终解码器是输出被送到soft-max分类器以独立的为每个像素类产生概率。

如图所示,上图中input为输入图片,output为输出图片,不同的颜色,代表了不同的分类,语义分割不仅告诉你图片中某个东西的类别,还告诉你了他在图中的位置。途中是一个对称网络,左边是卷积提取高维特征,并通过pooling层是图片变小,成为Encoder,右边是反卷积与upsamling,通过反卷积使得图像分类后的特征得以重现,upsamling使图像变大,成为Decoder,最后通过Soft-max,输出不同分类的最大值。

Encoder:

通过卷积提取特征,SegNet使用的卷积为same卷积,即卷积后保持图像原始尺寸;在Decoder过程中,同样使用same卷积,不过卷积的作用是为upsampling变大的图像丰富信息,使得在pooling过程中丢失的信息可以通过学习在Decoder得到。SegNet中的卷积与传统的CNN卷积并没有区别

Pooling&Upsampling(Decoder):

Pooling层是CNN中使图片缩小的手段,通常有max和mean两种方式,通常使用max方式,在一个2*2的filter中,取出权重最大的一个,如果原图大小为4*4,pooling后,大小变为2*2。

SegNet中的pooling比其他的pooling多了一个index功能,就是在每次pooling的过程中,都会保存通过max选出的权值在2*2filer中的位置。Upsamping就是Pooling的逆过程,Upsamping是图片变大两倍,我们清楚知道Pooling之后,每个filter会丢失三个权重,这些权重无法复原,但是在Upsamping层中可以得到在Pooling中相对Pooling filter的位置。所以Upsampling中先对输入的特征图放大两倍,然后把输入特征图的数据根据Pooling indices放入。

深度学习--SegNet总结_第2张图片

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

深度学习--SegNet总结_第3张图片

 

 

 

 

你可能感兴趣的:(深度学习自学)