0


转置卷积 transposed convolution

1. 转置卷积

转置卷积(Transposed Convolution)也叫Fractionally-strided Convolution和Deconvolution,但用的最多的是Transposed Convolution。

注意:

  • 转置卷积不是卷积的逆运算,只会大小恢复为原本大小。
  • 转置卷积也卷积,也需要卷积核

1.1 转置卷积的作用

转置卷积的作用是进行上采样upsampling,增大图像。

2. 转置卷积的执行过程

输入为2x2的特征图,但会在周围填充0,卷积核的大小为3x3,最终得到一个4x4的特征图,这是一个上采样的过程
stride=1,padding=0
在这里插入图片描述

2.1转置卷积的运算步骤

首先一些参数的介绍:

  • stride( s s s):步长
  • kernel size( k k k):卷积核大小
  • padding( p p p):填充大小

下面是运算的步骤:

  1. 首先在元素间填充 s − 1 s-1 s−1 行和列的0
  2. 然后在特征图四周填充 k − p − 1 k-p-1 k−p−1行和列的0
  3. 然后对卷积核进行转置,也就是上下左右翻转。注意:转置的卷积核一般是进行之前进行卷积操作(下采样)的卷积核
  4. 最后进行正常的卷积一般不进行填充,步长为1

输出的特征图的大小的计算方式如公式所示,其中索引

     [ 
    
   
     0 
    
   
     ] 
    
   
  
    [0] 
   
  
[0]代表高度方向的数值,索引 
 
  
   
   
     [ 
    
   
     1 
    
   
     ] 
    
   
  
    [1] 
   
  
[1]代表宽度方向的数值。

在这里插入图片描述

下图是例子(忽略偏移),其中s=1,p=0,k=3。因此:元素间不填充,特征图四周填充3-0-1=2行与列
最后使用经过转置的卷积核进行卷积,步长为1。
输出特征图的高=(2-1)x1-2x0+3=4;宽=(2-1)x1-2x0+3=4
在这里插入图片描述

2.2 运算例子

     s 
    
   
     = 
    
   
     2 
    
   
     , 
    
   
     p 
    
   
     = 
    
   
     0 
    
   
     , 
    
   
     k 
    
   
     = 
    
   
     3 
    
   
  
    s=2,p=0,k=3 
   
  
s=2,p=0,k=3

在元素间填充2-1=1个0;然后在特征图之间填充3-0-1=2 行和列的0
输出的特征图高=(2-1)x2-2x0+3=5;宽=(2-1)x2-2x0+3=5
在这里插入图片描述

     s 
    
   
     = 
    
   
     2 
    
   
     , 
    
   
     p 
    
   
     = 
    
   
     1 
    
   
     , 
    
   
     k 
    
   
     = 
    
   
     3 
    
   
  
    s=2,p=1,k=3 
   
  
s=2,p=1,k=3

在元素间填充2-1=1个0;然后在特征图之间填充3-1-1=1 行和列的0
输出的特征图高=(3-1)x2-2x1+3=5;宽=(3-1)x2-2x1+3=5
在这里插入图片描述

3. 转置卷积的运行原理

要理解转置卷积的原理,首先要理解普通卷积的执行过程。下面将以一个4x4的特征图与3x3的卷积核为例进行介绍。

3.1普通卷积

这里 s=1,p=0,k=3对特征图进行卷积,得到一个2x2的特征图。
在这里插入图片描述
在之前的介绍中,普通卷积的执行过程是一个窗口在不断滑动来得到结果。
在这里插入图片描述
但在实际执行中,这种方法是低效。下面介绍另一种计算方法:
方法如图所示,

  1. 先根据输入特征图、步长、填充与卷积核得到卷积核的等效矩阵。 这些等效矩阵可以通过类似上面的滑动窗口的方法得到,每个等效矩阵对应一次滑动窗口里的值使用卷积核的值进行替代。 在当前例子中,可以得到4个等效矩阵
  2. 针对每个等效矩阵,都与输入特征图进行运算:先进行对应位置的相乘,再将所有位置的值进行求和,得到输出特征图中的值。

在这里插入图片描述

3.2 转置卷积

上面进行普通卷积时的计算过程可以变为两个矩阵的乘法运算
首先将输入特征图展开为一行,构成矩阵

     I 
    
   
  
    I 
   
  
I;而每个等效矩阵都展开为一列,然后拼在一起,构成矩阵 
 
  
   
   
     C 
    
   
  
    C 
   
  
C

在这里插入图片描述
在这里插入图片描述
然后计算

     I 
    
   
     ∗ 
    
   
     C 
    
   
  
    I*C 
   
  
I∗C,就得到了输出特征图展开成行的矩阵 
 
  
   
   
     O 
    
   
  
    O 
   
  
O。

在这里插入图片描述
要注意的是矩阵

     C 
    
   
  
    C 
   
  
C是**不可逆**的,因此**转置卷积不是普通卷积的逆运算**,只能得到一个**与输入特征图同等大小**的一个结果。

要得到一个与矩阵

     I 
    
   
  
    I 
   
  
I同等大小的矩阵 
 
  
   
   
     P 
    
   
  
    P 
   
  
P,有两种方法:

只需让矩阵

     O 
    
   
  
    O 
   
  
O右乘矩阵 
 
  
   
   
     C 
    
   
  
    C 
   
  
C的转置 
 
  
   
    
    
      C 
     
    
      T 
     
    
   
  
    C^T 
   
  
CT即可。矩阵 
 
  
   
   
     P 
    
   
  
    P 
   
  
P就是将转置卷积的结果展开。

在这里插入图片描述
将矩阵

     O 
    
   
  
    O 
   
  
O**还原为普通卷积的输出特征图**的形式。

而对于

      C 
     
    
      T 
     
    
   
  
    C^T 
   
  
CT,由于其最初是**将等效矩阵以列方向进行展开并拼接**,因此这里**将 
  
   
    
     
     
       C 
      
     
       T 
      
     
    
   
     C^T 
    
   
 CT的每行还原成矩阵**。

而从

      C 
     
    
      T 
     
    
   
  
    C^T 
   
  
CT得到的每个矩阵与输出特征图进行对应位相乘并结果相加,得到矩阵 
 
  
   
   
     P 
    
   
  
    P 
   
  
P的值。

在这里插入图片描述
而这个过程中出现了一个有趣的现象:

① 使用等效矩阵

      C 
     
    
      T 
     
    
   
  
    C^T 
   
  
CT的第一个矩阵来与矩阵 
 
  
   
   
     O 
    
   
  
    O 
   
  
O进行运算,其结果为0,**也就是矩阵 
  
   
    
    
      P 
     
    
   
     P 
    
   
 P的第一个值。**

而图像中的右下角,对输入特征图进行填充后,如果使用绿色矩阵对输入特征图进行卷积操作的话,会得到与前面相同的结果0。
在这里插入图片描述
② 接着使用

      C 
     
    
      T 
     
    
   
  
    C^T 
   
  
CT的第二个矩阵进行运算,结果为2,也就是矩阵 
 
  
   
   
     P 
    
   
  
    P 
   
  
P的第二个值。

而绿色矩阵右移一格后再次进行运算,同样得到矩阵

     P 
    
   
  
    P 
   
  
P的第二个值。

在这里插入图片描述
③ 就这样不断计算矩阵

      C 
     
    
      T 
     
    
   
  
    C^T 
   
  
CT的矩阵与滑动绿色矩阵,最终发现使用**输入特征图 
  
   
    
    
      I 
     
    
   
     I 
    
   
 I与绿色矩阵可以得到矩阵 
  
   
    
    
      P 
     
    
   
     P 
    
   
 P。**

而绿色矩阵在输入特征图

     I 
    
   
  
    I 
   
  
I上进行滑动与运算的过程,其实**让绿色矩阵作为卷积核**,**在步长为1的情况**,**对输入特征图 
  
   
    
    
      I 
     
    
   
     I 
    
   
 I进行普通卷积**。

而且继续观察绿色矩阵,可以发现绿色矩阵就是普通卷积中所使用的卷积核的转置
在这里插入图片描述

4. 总结

通过上面分析,就可以知道为什么通过对输入特征图进行填充使用转置的卷积核并且使用转置卷积核与输入特征图进行步长=1的普通卷积操作就可以得到结果


本文转载自: https://blog.csdn.net/Life1213/article/details/140718487
版权归原作者 Life1213 所有, 如有侵权,请联系我们删除。

“转置卷积 transposed convolution”的评论:

还没有评论