文章目錄
-
- 1. 卷積操作
- 2. 卷積矩陣
- 3. 反卷積
- 4. 反卷積矩陣
- 5. 使用卷積計算反卷積
- 6. 總結
- 參考文獻
使用反卷積(Transposed Convolution)來進行上采樣操作,不需要借助插值方法,并且可以提供能夠學習的參數。
反卷積在DCGAN和圖像的語義分割網絡中,有很重要的應用。
1. 卷積操作
我們用一個簡單的例子來介紹卷積的計算過程。如下圖所示,用一個3x3的卷積核對一個4x4的矩陣進行卷積操作,步長為1,不施加padding,則可以得到一個2x2的結果矩陣。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiclRnblN2XjlGcjAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL90TUkBDcyMmd5cVZwJlMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLwgTO5ATOwEjMzATNwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
計算輸入矩陣和卷積核相對應的各個元素的乘積,最後相加得到卷積結果,如下圖所示:
從上圖的結果可以看到,卷積之後,輸入矩陣與輸出矩陣存在位置上的聯系(positional connectivity)。輸入矩陣的左上角元素會影響輸出矩陣的左上角結果。3x3卷積核将輸入矩陣中的9個元素與輸出矩陣中的一個元素連接配接起來。卷積形成了多對一的關系。
2. 卷積矩陣
我們可以把卷積過程用矩陣乘法來表示。
3x3的卷積核:
[ 1 4 1 1 4 3 3 3 1 ] \begin{bmatrix} 1 & 4 & 1\\ 1 & 4 & 3\\ 3 & 3 & 1 \end{bmatrix} ⎣⎡113443131⎦⎤
可以排布成一個4x16的矩陣,如下圖所示:
上圖結果被稱為卷積矩陣,矩陣的每一行決定了一次卷積操作。
在計算卷積的時候,需要把輸入矩陣展平成一個16x1的列向量:
然後使用矩陣乘法得到卷積結果:
把乘法結果的4x1列向量reshape成2x2的矩陣,就得到了與圖1一樣的卷積結果:
3. 反卷積
反卷積可以看作是卷積操作的逆過程,也就是形成一對多的關系。如下圖所示,我們要從一個2x2的矩陣,反推出一個4x4的矩陣:
接下來,我們介紹如何進行這樣的反卷積操作。
4. 反卷積矩陣
借助于第2節介紹的卷積矩陣,可以很容易進行反卷積操作。
我們把卷積矩陣轉置成一個16x4的矩陣,再與結果的4x1列向量相乘,就可以得到一個16x1的列向量,reshape之後就是一個4x4的矩陣。
把結果的16x1列向量reshape成一個4x4的矩陣,結果如下:
到此為止,我們把一個2x2的小矩陣,上采樣變成了一個4x4的大矩陣。反卷積的過程形成了1對9的關系。
5. 使用卷積計算反卷積
如下圖所示,使用相同的卷積核,通過卷積來計算反卷積。
這種方法非常低效,因為需要對輸入矩陣大量補零,卷積過程中有大量的乘0操作。
6. 總結
- 使用反卷積可以進行上采樣
- 反卷積具有可供學習的參數,不需要利用插值方法
參考文獻
https://towardsdatascience.com/up-sampling-with-transposed-convolution-9ae4f2df52d0