分享

自动驾驶-使用fcn语义分割

 IT菜鸟63svx2uw 2021-03-19

上一章利用卷积神经网络处理分类问题,卷积神经网络在图像分类问题中取得了很高的精度,很好的解决了图像是什么的问题,然而其在处理过程中丢失了空间信息,无法回答目标物体在哪里的问题。本章介绍的全卷积神经网络(fully convlutional network)保留了图像的空间信息,输出图像和原始图像分辨率相同,并且在像素粒度上对图像中的目标物进行分类。如图所示使用fcn模型对道路进行语义分割,对每个像素标记为不同的分类,达到场景理解的目的。
自动驾驶-使用fcn语义分割

fcn在卷积神经网络的基础上新增了三项技术:1x1卷积,上采样和跳跃连接。

用卷积层代替全连接层

卷积层和全连接层的去别是其每个神经节点对应输入的一个局部区域,并且卷积的神经元间共享数据,不过卷积和全连接都是通过点积和的形式计算神经元,所以二者间可以相互转化。对一个4x4的输入卷积运算,kernel_size=3,stride=1,padding='same’,输出形状为2x2。如果将输入展开称一个16维的向量,则定义如下图的一个权重矩阵得到一个4维的向量,将4为的向量重新排列称2x2矩阵,此时的矩阵和卷积运算的到的矩阵相等。
自动驾驶-使用fcn语义分割
在实际操作中,将全连接层转换为卷积层更有用。第一,全连接层使用的权重矩阵规模更大,所以更占内存空间;第二,全连接层使用的权重矩阵规模必须预先定义,但是卷积层可以处理任意大小的输入,所以更加灵活。
1x1卷积顾名思义,就是以kernel size 为1x1的卷积和对输入层进行卷积运算,得到和输入层形状相同的输出层,利用1x1卷积可以对输入层进行升维或者降维,并且由于卷积是非线性变换,进一步提高了网络的表达能力。

上采样

如下图所示fcn模型可以分为两部分,编码和解码,其中编码部分和卷积神经网络的卷积运算过程相同,每一层都提取出更复杂的特征,在解码部分使用逆卷积(convolution transpose)过程取代了传统卷积神经网络的全连接层,所以称这种模型为全卷积神经网络。逆卷积可以理解为卷积的逆过程,通过逆卷积将输入的维度放大,通过多层你卷积操作,使最终的输入图像大小和输入相同。
自动驾驶-使用fcn语义分割
举个例子:
定义一次卷积过程input=4x4, kernel=3x3, padding='valid',stride=1,则最终输出为:output=2x2
自动驾驶-使用fcn语义分割
其逆过程如下图所示:input=2x2,kernel=3x3,padding='valid',stride=1,output=4x4
自动驾驶-使用fcn语义分割
当padding='same',stride=1时,输入和输出相同
自动驾驶-使用fcn语义分割
当stride不为1时,逆卷积变换需要在输入矩阵中插入0值,插入的行数和列数为stride-1,如下图所示为input=3,kernel=3,padding=same,stride=2的逆变换,得到output=5。
自动驾驶-使用fcn语义分割
更多的例子戳这里
卷积运算根据padding种类可以分为两种类型,用K表示kernel size, s表示stride。每种类型输出形状的计算方式为:

padding=’same’

output=?inputs?output=?inputs?

padding=’valid’

output=?input?K+1s?output=?input?K+1s?
逆卷积变换根据padding和stride的类型分为四种类型,每种类型输出形状的计算方式为:

padding=’valid’,stride=1

output=input+K?1output=input+K?1

padding=’same’,stride=1

output=input+(K?1)?2Poutput=input+(K?1)?2P
P表示扩边的数量。

padding=’valid’,stride!=1

output=s?(input?1)+Koutput=s?(input?1)+K

padding=’same’,stride!=1

output=s?(input?1)+a+K?2Poutput=s?(input?1)+a+K?2P
其中a=i+2P?K)%sa=(i+2P?K)%s
了解更多关于逆卷积输出形状的计算戳这里

跳跃连接(skip layer)

在编码或者卷积过程中,提取特征的过程是图像缩小,在解码时,即使将图像放大到原始大小,很多信息也已经丢失,跳跃连接技术是一种使用输出层和非相邻层结合的方式保留丢失信息的技术。在fcn模型中,使用编码器中池化层与当前逆卷积层相加,将结果作为下一层的输入。这些跳跃连接可以使网络使用多分辨率的信息,因此网络能作出更精确的分割决策。
自动驾驶-使用fcn语义分割
下图是使用跳跃连接技术前后图像分割结果的对比:
自动驾驶-使用fcn语义分割

总结:

本章介绍全卷积神经网络技术,重点介绍了全卷积神经网络相比于卷积神经网络新加入的三项技术,1x1卷积,上采样和跳跃连接。其中1x1卷积代替卷积神经网络的全连接层,并将输出的维度降为分类数。上采样层在每一层放大输入的分辨率,使最终的输出和原始输入的分辨率相同。编码部分的每一层卷积导致丢失一些位置信息,使用跳跃连接技术将卷积层的输入和当前逆卷积的输出相结合,提高了逆卷积的还原精度。三项技术并不是如流水线一般step by step的应用在模型中,而是在解码部分的每一层都会用到三项技术的部分,下一章将结合源代码说明fcn对标记道路的空闲空间中的应用。 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多