SegNet 网络

Q1:seq2seq

A1:就是根据一个输入序列x,来生成另一个输出序列y

Q2:padding的三种方式

A2:padding有三种模式:full,same,valid,其实这三种不同模式是对卷积核移动范围的不同限制

假设设 image的大小是7x6,filter的大小是3x3

1.Full mode

 橙色部分为image, 蓝色部分为filter。full模式的意思是,从filter和image刚相交开始做卷积,白色部分为填0。filter的运动范围如图所示。

 2. same mode

当filter的中心(K)与image的边角重合时,开始做卷积运算,可见filter的运动范围比full模式小了一圈。注意:这里的same还有一个意思,卷积之后输出的feature map尺寸保持不变(相对于输入图片)。当然,same模式不代表完全输入输出尺寸一样,也跟卷积核的步长有关系。same模式也是最常见的模式,因为这种模式可以在前向传播的过程中让特征图的大小保持不变,调参师不需要精准计算其尺寸变化(因为尺寸根本就没变化)。

3.vaild mode

当filter全部在image里面的时候,进行卷积运算,可见filter的移动范围较same更小了。

 

 

Encoder-Decoder模型

 Encoder-Decoder Based Models是非常经典的一种图像分割模型(FNC网络,严格来说,其实也是这种模式)。模型通常由两部分组成,即Encoder部分和Decoder 部分Encoder会通过convolutional layers对image进行下采样,使得图片size减小,而channel增加。常见使用的下采样网络有:vgg-16、ResNet。通过去掉下采样网络的fn层,只保留卷积层,从而达到对图片下采样(Encoder)的目的Decoder 有两种方法:使用deconv对图片上采样,从而将Encoder的特征图Decoder 为像素分割图;对特征图进行unpooling后,做same卷积
更直观的理解就是,Encoder负责将一张图片的每个像素点,通过复杂的计算过程,映射到某一个高维分布上,而Decoder则是负责将这个高维分布,映射到给定的类别区域。中间的高维分布,是我们不可见的,但神经网络却可以很好的使用它。正是这种借助中间的高维分布的思想,搭建起来了原图像到像素级分类图像的桥梁,实现了end-to-end的训练过程。

SegNet网络

从主干模型中提取出卷积了多次,具有一定特征的层(典型的是长宽经过4次压缩之后的层),然后利用upsamepling2D函数进行三次上采样,得到输出层(语意分割的结果)

1.网络架构

网络结构:

SegNet网络结构如图所示,Input为输入图片,Output为输出分割的图像,不同颜色代表不同的分类。语义分割的重要性就在于不仅告诉你图片中某个东西是什么,而且告知你他在图片的位置。我们可以看到是一个对称网络,由中间绿色pooling层与红色upsampling层作为分割,左边是卷积提取高维特征,并通过pooling使图片变小,SegNet作者称为Encoder,右边是反卷积(在这里反卷积与卷积没有区别)与upsampling,通过反卷积使得图像分类后特征得以重现,upsampling使图像变大,SegNet作者称为Decoder,最后通过Softmax,输出不同分类的最大值。这就是大致的SegNet过程,

 2.Encoder

Ecoder端是使用Vgg16,总计使用了Vgg16的13个卷积层,如下图所示,encoder在最大池化操作时记录了最大值所在位置(索引),用于之后在decoder中使用那些存储的索引来对相应特征图进行去池化操作,这样在上采样阶段就无需学习。这有助于保持高频信息的完整性,但当对低分辨率的特征图进行去池化时,它也会忽略邻近的信息。上采样后得到的是一个稀疏特征图,再通过普通的卷积得到稠密特征图,再重复上采样。最后再用激活函数得到onehot 分类结果。
Encoder过程中,通过卷积提取特征,SegNet使用的卷积为same卷积,即卷积后保持图像原始尺寸;在Decoder过程中,同样使用same卷积,不过卷积的作用是为upsampling变大的图像丰富信息,使得在Pooling过程丢失的信息可以通过学习在Decoder得到。SegNet中的卷积与传统CNN的卷积并没有区别。

 

 3.Pooling&Upsampling(Decoder):

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

在SegNet中的Pooling与其他Pooling多了一个index功能(该文章亮点之一),每次Pooling,都会保存通过max选出的权值在2x2 filter中的相对位置,对于上图的0.8来说,0.8在黄色2x2 filter中的位置为(0,1)(index从0开始),绿色的0.9的index为(1,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。

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

左边是SegNet的upsampling过程,就是把feature map的值 abcd, 通过之前保存的max-pooling的坐标映射到新的feature map中,其他的位置置零.

右边是FCN的upsampling过程,就是把feature map, abcd进行一个反卷积,得到的新的feature map和之前对应的encoder feature map 相加.

SegNet的分割精度略好于FCN
 

 4.Deconvolution

 pooling&Upsampling示意图中右边的Upsampling可以知道,2x2的输入,变成4x4的图,但是除了被记住位置的Pooling indices,其他位置的权值为0,因为数据已经被pooling走了。因此,SegNet使用的反卷积在这里用于填充缺失的内容,因此这里的反卷积与卷积是一模一样,在网络框架图中跟随Upsampling层后面的是也是卷积层。

5.Output:

 在网络框架中,SegNet,最后一个卷积层会输出所有的类别(包括other类),网络最后加上一个softmax层,由于是end to end, 所以softmax需要求出所有每一个像素在所有类别最大的概率,最为该像素的label,最终完成图像像素级别的分类。

总结


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

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

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

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

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

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值