上採樣和反捲積 Up-sampling and Transposed Convolution (Deconvolution)

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

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

1. 卷積操作

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

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

從上圖的結果可以看到,卷積之後,輸入矩陣與輸出矩陣存在位置上的聯繫(positional connectivity)。輸入矩陣的左上角元素會影響輸出矩陣的左上角結果。3x3卷積核將輸入矩陣中的9個元素與輸出矩陣中的一個元素連接起來。卷積形成了多對一的關係。

2. 卷積矩陣

我們可以把卷積過程用矩陣乘法來表示。

3x3的卷積核:
[141143331]\begin{bmatrix} 1 & 4 & 1\\ 1 & 4 & 3\\ 3 & 3 & 1 \end{bmatrix}
可以排布成一個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. 總結

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

參考文獻

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章