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):填充大小
下面是运算的步骤:
- 首先在元素间填充 s − 1 s-1 s−1 行和列的0
- 然后在特征图四周填充 k − p − 1 k-p-1 k−p−1行和列的0
- 然后对卷积核进行转置,也就是上下左右翻转。注意:转置的卷积核一般是进行之前进行卷积操作(下采样)的卷积核。
- 最后进行正常的卷积(一般不进行填充,步长为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的特征图。
 
 在之前的介绍中,普通卷积的执行过程是一个窗口在不断滑动来得到结果。
 
 但在实际执行中,这种方法是低效。下面介绍另一种计算方法:
 方法如图所示,
- 先根据输入特征图、步长、填充与卷积核得到卷积核的等效矩阵。
 这些等效矩阵可以通过类似上面的滑动窗口的方法得到,每个等效矩阵对应一次滑动,窗口里的值使用卷积核的值进行替代。
 在当前例子中,可以得到4个等效矩阵
- 针对每个等效矩阵,都与输入特征图进行运算:先进行对应位置的相乘,再将所有位置的值进行求和,得到输出特征图中的值。

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的普通卷积操作就可以得到结果。



















