上一章利用卷积神经网络处理分类问题,卷积神经网络在图像分类问题中取得了很高的精度,很好的解决了图像是什么的问题,然而其在处理过程中丢失了空间信息,无法回答目标物体在哪里的问题。本章介绍的全卷积神经网络(fully convlutional network)保留了图像的空间信息,输出图像和原始图像分辨率相同,并且在像素粒度上对图像中的目标物进行分类。如图所示使用fcn模型对道路进行语义分割,对每个像素标记为不同的分类,达到场景理解的目的。
fcn介绍
fcn在卷积神经网络的基础上新增了三项技术:1x1卷积,上采样和跳跃连接。
用卷积层代替全连接层
卷积层和全连接层的去别是其每个神经节点对应输入的一个局部区域,并且卷积的神经元间共享数据,不过卷积和全连接都是通过点积和的形式计算神经元,所以二者间可以相互转化。对一个4x4的输入卷积运算,kernel_size=3,stride=1,padding=‘same’,输出形状为2x2。如果将输入展开称一个16维的向量,则定义如下图的一个权重矩阵得到一个4维的向量,将4为的向量重新排列称2x2矩阵,此时的矩阵和卷积运算的到的矩阵相等。
在实际操作中,将全连接层转换为卷积层更有用。第一,全连接层使用的权重矩阵规模更大,所以更占内存空间;第二,全连接层使用的权重矩阵规模必须预先定义,但是卷积层可以处理任意大小的输入,所以更加灵活。
1x1卷积顾名思义,就是以kernel size 为1x1的卷积和对输入层进行卷积运算,得到和输入层形状相同的输出层,利用1x1卷积可以对输入层进行升维或者降维,并且由于卷积是非线性变换,进一步提高了网络的表达能力。
上采样
如下图所示fcn模型可以分为两部分,编码和解码,其中编码部分和卷积神经网络的卷积运算过程相同,每一层都提取出更复杂的特征,在解码部分使用逆卷积(convolution transpose)过程取代了传统卷积神经网络的全连接层,所以称这种模型为全卷积神经网络。逆卷积可以理解为卷积的逆过程,通过逆卷积将输入的维度放大,通过多层你卷积操作,使最终的输入图像大小和输入相同。
举个例子:
定义一次卷积过程input=4x4, kernel=3x3, padding=‘valid‘,stride=1,则最终输出为:output=2x2
其逆过程如下图所示:input=2x2,kernel=3x3,padding=‘valid‘,stride=1,output=4x4
当padding=‘same‘,stride=1时,输入和输出相同
当stride不为1时,逆卷积变换需要在输入矩阵中插入0值,插入的行数和列数为stride-1,如下图所示为input=3,kernel=3,padding=same,stride=2的逆变换,得到output=5。
更多的例子戳这里
卷积运算根据padding种类可以分为两种类型,用K表示kernel size, s表示stride。每种类型输出形状的计算方式为:
padding=’same’