卷积与反卷积、池化与反池化

一、卷积

1、卷积的简单定义

卷积神经网络中的卷积操作可以看做是输入和卷积核的内积运算。其运算过程非常容易理解,下面有举例。

2、举例解释

(1)为了方便直接解释,我们首先以一个通道(若是彩图,则有RGB的颜色,所以是三个通道)为例进行讲解,首先明确概念:

1) 输入是一个5*5的图片,其像素值如下:

                                                                          \begin{bmatrix} 1 & 1& 1& 0& 0\\ 0& 1& 1& 1& 0\\ 0& 0& 1& 1& 1\\ 0& 0& 1& 1& 0\\ 0& 1& 1& 0& 0\end{bmatrix}

2)卷积核(kernel)是需要训练的参数,这里为了讲解卷积运算的操作,所以最开始我们假设卷积核的值如下:

                                                                               \begin{bmatrix} 1 & 0& 1\\ 0 & 1&0 \\ 1 & 0 &1 \end{bmatrix}

3)通过窗口和卷积核的内积操作得到的结果叫做feature map。

(2)如下图所示(对应的是上面提到的数据),我们在输入图片上框出一个和卷积核相同大小的区域,基于此计算子区域和卷积核对应元素乘积之和:

扫描二维码关注公众号,回复: 15370046 查看本文章

                                           1*1+1*0+1*1+0*0+1*1+1*0+0*1+0*0+1*1=4

所以feature map的第一个元素值为4。

(3)接着计算第二个子区域和卷积核的对应元素乘积之和,如下图所示:

                                            1*1+1*0+0*1+1*0+1*1+1*0+0*1+1*0+1*1=3 

所以feature map的第二个元素值为3。

(4)接着计算第三个子区域和卷积核的对应元素乘积之和,如下图所示:

                                            1*1+0*0+0*1+1*0+1*1+0*0+1*1+1*0+1*1=4

所以feature map的第三个元素值为4。

(5)接着计算第四个子区域和卷积核的对应元素乘积之和,如下图所示:

                                             0*1+1*0+1*1+0*0+0*1+1*0+0*1+0*0+1*1=2

所以feature map的第四个元素值为2。

(6)以此类推,不断执行,最后得到的feature map如下:

                                                                                    \begin{bmatrix} 4 & 3&4 \\ 2 & 4& 3\\ 2& 3&4 \end{bmatrix}

(7)下面的动图可以连贯的展示上面的过程,可以帮助更直观的理解:

3、多个输入通道

若输入含有多个通道,则对于某个卷积核,分别对每个通道求feature map后将对应位置相加得到最终的feature map,如下图所示:

4、多个卷积核

若有多个卷积核,则对应多个feature map,也就是下一个输入层有多个通道。如下图所示:

5、步数的大小

上述展示的步长为1的情况,若步长为2,则滑动窗口每2步产生一个,如下图所示:

输入大小为5*5,卷积核的大小为3*3,第一个滑动窗口为红色部分,第二个滑动窗口为绿色部分,第三个滑动窗口为紫色部分,第四个滑动窗口为蓝色部分,所以最后的feature map的大小为2*2

若假设输入大小是n*n,卷积核的大小是f*f,步长是s,则最后的feature map的大小为o*o,其中o如下:

                                                                   o=\left \lfloor \frac{n-f}{s} \right \rfloor+1,其中\left \lfloor x \right \rfloor表示对x向下取整

6、三种模式:Full,Valid和Same

如上图所示,3种模式的主要区别是从哪部分边缘开始滑动窗口卷积操作,区别如下:

 Full模式:输出结果最大,第一个窗口只包含1个输入的元素,即从卷积核(fileter)和输入刚相交开始做卷积。没有元素的部分做补0操作,即填充大小等于f-1
Valid模式:输出结果最小,卷积核和输入完全相交开始做卷积,这种模式不需要补0,即填充大小为0。
Same模式:输出结果和原图一致,当卷积核的中心C和输入开始相交时做卷积。没有元素的部分做补0操作,即填充大小等于(f-1)/2

7、Full,Valid和Same下的feature map的大小 

(1)若输入大小是n*n,卷积核大小为f*f,步长为s,若采用Full或Same模式,假设填充大小为pp为一边填充的大小,举例:如果输出5*5,卷积核3*3,采用Full模式,则p=2),则feature map的大小是:\small (\left \lfloor \frac{n+2p-f}{s}+1 \right \rfloor)*(\left \lfloor \frac{n+2p-f}{s}+1 \right \rfloor),其中\left \lfloor x \right \rfloor表示对x向下取整

(2)若输入大小是n*n,卷积核大小为f*f,步长为s,若不补0,即Valid模式下,feature map的大小为:\small (\left \lfloor \frac{n-f}{s}+1 \right \rfloor)*(\left \lfloor \frac{n-f}{s}+1 \right \rfloor),其中\left \lfloor x \right \rfloor表示对x向下取整

(3)Same模式下,feature map的维度和输入维度相同。

注意:卷积核大小一般为奇数,原因如下:

①当卷积核为偶数时,p不为整数,假设是Same模式,若想使得卷积之后的维度和卷积之前的维度相同,则需要对图像进行不对称填充,较复杂。
②当kernel为奇数维时,有中心像素点,便于定位卷积核。

8、卷积特点 

(1)局部视野
卷积操作在运算的过程中,一次只考虑一个窗口的大小,因此其具有局部视野的特点,局部性主要体现在窗口的卷积核的大小。

(2)参数减少
比如,在上述输入为5*5,卷积核为3*3,输出为3*3的例子中,如果是使用NN,则其参数个数为(5*5)*(3*3)。而在CNN中,其参数个数为卷积核的大小3*3

(3)权重共享
从上面的讲解可以看到,对一个输入为5*5,卷积核为3*3的情况下,对于每一个滑动窗口,使用的都是同一个卷积核,所以其参数共享。

(4)多个卷积核可以发现不同角度的特征,多个卷积层可以捕捉更全局的特征(处于卷积网络更深的层或者能够的单元,他们的接受域要比处在浅层的单元的接受域更大)。详见下图(图片来源:花书):

可以看到,h_{2}的接受域是x_{1},x_{2},x_{3},而g_{3}的接受域是x_{1},x_{2},x_{3},x_{4},x_{5}

二、反卷积

1、介绍

反卷积,可以理解为卷积操作的逆运算。这里千万不要当成反卷积操作可以复原卷积操作的输入值,反卷积并没有那个功能,它仅仅是将卷积变换过程中的步骤反向变换一次而已,通过将卷积核转置,与卷积后的结果再做一遍卷积,所以它还有个名字叫转置卷积。虽然它不能还原出原来卷积的样子,但是在作用上具有类似的效果,可以将带有小部分缺失的信息最大化恢复,也可以用来恢复被卷积生成后的原始输入。

为了更深度的了解反卷积,先来看下卷积的数学操作。

2、卷积的数学操作
上述是比较直观的图形展示的例子,如果把卷积操作写成矩阵相乘,则对于4*4的输入和3*3的卷积核的结果如下:

最后得到一个4*1的矩阵,可以reshape成2*2的矩阵,便是最后卷积的结果(在实际应用中,并不是通过这种这个转换方法来计算卷积的,因为这个转换会存在很多无用的0乘操作)。

3、反卷积的数学操作

反卷积的操作就相当于对上述y左乘c^{T},维度如下:c^{T}的维度是16*4y的维度是4*1,故c^{T}y的维度是16*1,可以将其reshape成4*4便变回了原来的维度。

4、反卷积和卷积的关系
反卷积就是特殊的卷积,可以将输入还原,在tensorFlow中,反卷积的操作也是卷积操作。
注意:

在卷积操作中:cx=y

在反卷积操作中:c^{T}y=x,这里并不是严格意义上的等于,而只是维度的相等,因为cc^{T}都是训练,并不是直接取转置。

5、反卷积具体步骤如下:

  • 首先是将卷积核反转(并不是转置,而是上下左右方向进行递序操作)。
  • 再将卷积结果作为输入,做补0扩充操作,即往每一个元素后面补0.这一步是根据步长来的,对于每个元素沿着步长方向补(步长-1)个0。例如,步长为1就不用补0了。
  • 在扩充后的输入基础上再对整体补0。以原始输入的shape作为输出,按照前面介绍的卷积padding规则,计算pading的补0的位置及个数,得到补0的位置及个数,得到补0的位置要上下和左右各自颠倒一下。
  • 将补0后的卷积结果作为真正的输入,反转后的卷积核为filter,进行步长为1的卷积操作。

注意:计算padding按规则补0时,统一按照padding='SAME'、步长为1*1的方式来计算。
6、举例

上图上面部分展示:以一个[1,4,4,1]的矩阵为例,进行filter为2*2,步长为2*2的卷积操作。其反卷积操作步骤如上图下半部分。

在反卷积过程中,首先将2*2矩阵通过步长补0的方式变成4*4,再通过padding反方向补0,然后与反转后的filter使用步长为1*1的卷积操作,最终得出结果。但是这个结果已经与原来的全1矩阵不等了,说明转置卷积只能恢复部分特征,无法百分百的恢复原始数据。

三、池化

池化(Pooling):也称为欠采样下采样。主要用于特征降维,压缩数据和参数的数量,减小过拟合,同时提高模型的容错性。常见的池化有最大池化平均池化随机池化。池化层不需要训练参数。

1、三种池化示意图

  • Max Pooling:最大池化(对局部的值取最大)
  • Average Pooling:平均池化(对局部的值取平均)
  • Stochastic Pooling:随机池化(根据概率对局部的值进行采样,采样结果便是池化结果)

概念非常容易理解,其示意图如下所示:

2、三种池化的意义
(1)最大池化可以获取局部信息,可以更好保留纹理上的特征。如果不用观察物体在图片中的具体位置,只关心其是否出现,则使用最大池化效果比较好。
(2)平均池化往往能保留整体数据的特征,能凸出背景的信息。
(3)随机池化中元素值大的被选中的概率也大,但不是像最大池化总是取最大值。随机池化一方面最大化地保证了Max值的取值,一方面又确保了不会完全是max值起作用,造成过度失真。除此之外,其可以在一定程度上避免过拟合。

四、反池化

反池化是池化的逆操作,是无法通过池化的结果还原出全部的原始数据。因为池化的过程就只保留了主要信息,舍去部分信息。如果想从池化后的这些主要信息恢复出全部信息,则存在信息缺失,这时只能通过补位来实现最大程度的信息完整。

池化操作中最常见的最大池化和平均池化,因此最常见的反池化操作有反最大池化反平均池化,其示意图如下:

反最大池化:在池化过程中记录最大激活值的坐标位置,然后在反池化时,只把池化过程中最大激活值所在位置坐标值激活,其他的值设置为0。(这个过程只是一种近似,因为在池化过程中,除了最大值的位置,其他的值也是不为0的。)

反平均池化:将输入还原成原来的大小,再将池化结果中的每个值都填入其对应原始数据区域中的相应位置。

猜你喜欢

转载自blog.csdn.net/weixin_41611054/article/details/104929777