天天看點

上采樣和反卷積 Up-sampling and Transposed Convolution (Deconvolution)

文章目錄

    • 1. 卷積操作
    • 2. 卷積矩陣
    • 3. 反卷積
    • 4. 反卷積矩陣
    • 5. 使用卷積計算反卷積
    • 6. 總結
    • 參考文獻

使用反卷積(Transposed Convolution)來進行上采樣操作,不需要借助插值方法,并且可以提供能夠學習的參數。

反卷積在DCGAN和圖像的語義分割網絡中,有很重要的應用。

1. 卷積操作

我們用一個簡單的例子來介紹卷積的計算過程。如下圖所示,用一個3x3的卷積核對一個4x4的矩陣進行卷積操作,步長為1,不施加padding,則可以得到一個2x2的結果矩陣。

上采樣和反卷積 Up-sampling and Transposed Convolution (Deconvolution)

計算輸入矩陣和卷積核相對應的各個元素的乘積,最後相加得到卷積結果,如下圖所示:

上采樣和反卷積 Up-sampling and Transposed Convolution (Deconvolution)

從上圖的結果可以看到,卷積之後,輸入矩陣與輸出矩陣存在位置上的聯系(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} ⎣⎡​113​443​131​⎦⎤​

可以排布成一個4x16的矩陣,如下圖所示:

上采樣和反卷積 Up-sampling and Transposed Convolution (Deconvolution)

上圖結果被稱為卷積矩陣,矩陣的每一行決定了一次卷積操作。

在計算卷積的時候,需要把輸入矩陣展平成一個16x1的列向量:

上采樣和反卷積 Up-sampling and Transposed Convolution (Deconvolution)

然後使用矩陣乘法得到卷積結果:

上采樣和反卷積 Up-sampling and Transposed Convolution (Deconvolution)

把乘法結果的4x1列向量reshape成2x2的矩陣,就得到了與圖1一樣的卷積結果:

上采樣和反卷積 Up-sampling and Transposed Convolution (Deconvolution)

3. 反卷積

反卷積可以看作是卷積操作的逆過程,也就是形成一對多的關系。如下圖所示,我們要從一個2x2的矩陣,反推出一個4x4的矩陣:

上采樣和反卷積 Up-sampling and Transposed Convolution (Deconvolution)

接下來,我們介紹如何進行這樣的反卷積操作。

4. 反卷積矩陣

借助于第2節介紹的卷積矩陣,可以很容易進行反卷積操作。

我們把卷積矩陣轉置成一個16x4的矩陣,再與結果的4x1列向量相乘,就可以得到一個16x1的列向量,reshape之後就是一個4x4的矩陣。

上采樣和反卷積 Up-sampling and Transposed Convolution (Deconvolution)

把結果的16x1列向量reshape成一個4x4的矩陣,結果如下:

上采樣和反卷積 Up-sampling and Transposed Convolution (Deconvolution)

到此為止,我們把一個2x2的小矩陣,上采樣變成了一個4x4的大矩陣。反卷積的過程形成了1對9的關系。

5. 使用卷積計算反卷積

如下圖所示,使用相同的卷積核,通過卷積來計算反卷積。

上采樣和反卷積 Up-sampling and Transposed Convolution (Deconvolution)

這種方法非常低效,因為需要對輸入矩陣大量補零,卷積過程中有大量的乘0操作。

6. 總結

  1. 使用反卷積可以進行上采樣
  2. 反卷積具有可供學習的參數,不需要利用插值方法

參考文獻

https://towardsdatascience.com/up-sampling-with-transposed-convolution-9ae4f2df52d0

繼續閱讀