上取樣 以及反卷積 空洞卷積區別

2021-10-10 16:41:55 字數 4823 閱讀 4502

一、 上取樣(upsampling)

upsampling(上取樣)的三種方式:

resize,如雙線性插值直接縮放,類似於影象縮放;

反卷積(deconvolution & transposed convolution);

反池化(unpooling)。

上取樣upsampling的主要目的是放大影象,幾乎都是採用內插值法,即在原有影象畫素的基礎上,在畫素點值之間採用合適的插值演算法插入新的元素。

傳統的網路是subsampling的,對應的輸出尺寸會降低;upsampling的意義在於將小尺寸的高維度feature map恢復回去,以便做pixelwise prediction,獲得每個點的分類資訊。

大名鼎鼎的fcn使用反卷積來完成上取樣的過程。

1.resize

線性插值法(linear interpolation)

這裡講解線性插值法的推導為了給雙線性插值公式做鋪墊。

線性插值法是指使用連線兩個已知量的直線來確定在這個兩個已知量之間的乙個未知量的值的方法。

假設已知兩個座標(x0,y0)(x0,y0)和(x1,y1)(x1,y1),要得到[x0,x1][x0,x1]區間內某一位置x在直線上的值。

該直線的方程可表示為:

假設方程兩邊的值為α,那麼這個值就是插值係數——從x0x0到xx的距離與從x0x0到x1x1的距離的比值。由於x已知,所以可以從公式中得到α的值:

這樣也就是:

2、雙線性插值

雙線性插值是插值演算法中的一種,是線性插值的擴充套件。利用原影象中目標點四周的四個真實存在的畫素值來共同決定目標圖中的乙個畫素值,其核心思想是在兩個方向分別進行一次線性插值。

image.png

已知的紅色資料點和待插值的綠色資料點

假如我們想得到未知函式f在點p= (x,y) 的值,假設我們已知函式f在q11=(x1,y1)、q12=(x1,y2),q21=(x2,y1)以及q22=(x2,y2)q11=(x1,y1)、q12=(x1,y2),q21=(x2,y1)以及q22=(x2,y2) 四個點 值。

第一步:x方向的線性插值,在q12,q22中插入藍色點r2,q11,q21中插入藍色點r1;

第二步 :y方向的線性插值 ,通過第一步計算出的r1與r2在y方向上插值計算出p點。

在x與y方向上,z值成單調性特性的應用中,此種方法可以做外插運算,即可以求解q11~q22所構成的正方形以外的點的值。

總結:線性插值法利用原影象中兩個點計算畫素值進行插值,雙線性插值法利用原影象中四個點計算目標畫素值進行插值。

反卷積**置卷積)

反卷積**置卷積)通常用來兩個方面:

cnn視覺化,通過反卷積將卷積得到的feature map還原到畫素空間,來觀察feature map對哪些pattern相應最大,即視覺化哪些特徵是卷積操作提取出來的;

fcn全卷積網路中,由於要對影象進行畫素級的分割,需要將影象尺寸還原到原來的大小,類似upsampling的操作,所以需要採用反卷積;

gan對抗式生成網路中,由於需要從輸入影象到生成影象,自然需要將提取的特徵圖還原到和原圖同樣尺寸的大小,即也需要反卷積操作。

反卷積(deconvolution),由於實現上採用轉置卷積核的方法,所以有人說應該叫轉置卷積td(transposed convolution)。

當stride不為1的時候,轉置卷積的卷積核就變成了乙個帶』洞』的卷積

image.png

2. 反池化(unpooling)

在池化過程中,記錄下max-pooling在對應kernel中的座標,在反池化過程中,將乙個元素根據kernel進行放大,根據之前的座標將元素填寫進去,其他位置補0 。在下取樣的時候記錄max的位置,上取樣的時候最大值的位置還原,其它位置填0,如下圖所示:

image.png

二、deconv(反卷積)和dilated conv(空洞卷積)的區別

膨脹卷積(空洞卷積,dilated convolution)

膨脹卷積在standard convolution的基礎上多了乙個超引數稱之為膨脹率(dilation rate),該超引數指的是kernel的間隔數量。

deconv的其中乙個用途是做upsampling,即增大影象尺寸。而dilated conv並不是做upsampling,而是增大感受野。

可以形象的做個解釋:

對於標準的k*k卷積操作,stride為s,分三種情況:

(1) s>1,即卷積的同時做了downsampling,卷積後影象尺寸減小;

(2) s=1,普通的步長為1的卷積,比如在tensorflow中設定padding=same的話,卷積的影象輸入和輸出有相同的尺寸大小;

(3) 0而dilated conv不是在畫素之間padding空白的畫素,而是在已有的畫素上,skip掉一些畫素,或者輸入不變,對conv的kernel引數中插一些0的weight,達到一次卷積看到的空間範圍變大的目的。

當然將普通的卷積stride步長設為大於1,也會達到增加感受野的效果,但是stride大於1就會導致downsampling,影象尺寸變小。大家可以從以上理解到deconv,dilated conv

上取樣upsampling的主要目的是放大影象,幾乎都是採用內插值法,即在原有影象畫素的基礎上,在畫素點值之間採用合適的插值演算法插入新的元素。

傳統的網路是subsampling的,對應的輸出尺寸會降低;upsampling的意義在於將小尺寸的高維度feature map恢復回去,以便做pixelwise prediction,獲得每個點的分類資訊。

大名鼎鼎的fcn使用反卷積來完成上取樣的過程。

1.resize

線性插值法(linear interpolation)

這裡講解線性插值法的推導為了給雙線性插值公式做鋪墊。

線性插值法是指使用連線兩個已知量的直線來確定在這個兩個已知量之間的乙個未知量的值的方法。

假設已知兩個座標(x0,y0)(x0,y0)和(x1,y1)(x1,y1),要得到[x0,x1][x0,x1]區間內某一位置x在直線上的值。

該直線的方程可表示為:

假設方程兩邊的值為α,那麼這個值就是插值係數——從x0x0到xx的距離與從x0x0到x1x1的距離的比值。由於x已知,所以可以從公式中得到α的值:

這樣也就是:

2、雙線性插值

雙線性插值是插值演算法中的一種,是線性插值的擴充套件。利用原影象中目標點四周的四個真實存在的畫素值來共同決定目標圖中的乙個畫素值,其核心思想是在兩個方向分別進行一次線性插值。

image.png

已知的紅色資料點和待插值的綠色資料點

假如我們想得到未知函式f在點p= (x,y) 的值,假設我們已知函式f在q11=(x1,y1)、q12=(x1,y2),q21=(x2,y1)以及q22=(x2,y2)q11=(x1,y1)、q12=(x1,y2),q21=(x2,y1)以及q22=(x2,y2) 四個點 值。

第一步:x方向的線性插值,在q12,q22中插入藍色點r2,q11,q21中插入藍色點r1;

第二步 :y方向的線性插值 ,通過第一步計算出的r1與r2在y方向上插值計算出p點。

在x與y方向上,z值成單調性特性的應用中,此種方法可以做外插運算,即可以求解q11~q22所構成的正方形以外的點的值。

總結:線性插值法利用原影象中兩個點計算畫素值進行插值,雙線性插值法利用原影象中四個點計算目標畫素值進行插值。

反卷積**置卷積)

反卷積**置卷積)通常用來兩個方面:

cnn視覺化,通過反卷積將卷積得到的feature map還原到畫素空間,來觀察feature map對哪些pattern相應最大,即視覺化哪些特徵是卷積操作提取出來的;

fcn全卷積網路中,由於要對影象進行畫素級的分割,需要將影象尺寸還原到原來的大小,類似upsampling的操作,所以需要採用反卷積;

gan對抗式生成網路中,由於需要從輸入影象到生成影象,自然需要將提取的特徵圖還原到和原圖同樣尺寸的大小,即也需要反卷積操作。

反卷積(deconvolution),由於實現上採用轉置卷積核的方法,所以有人說應該叫轉置卷積td(transposed convolution)。

當stride不為1的時候,轉置卷積的卷積核就變成了乙個帶』洞』的卷積

image.png

2. 反池化(unpooling)

在池化過程中,記錄下max-pooling在對應kernel中的座標,在反池化過程中,將乙個元素根據kernel進行放大,根據之前的座標將元素填寫進去,其他位置補0 。在下取樣的時候記錄max的位置,上取樣的時候最大值的位置還原,其它位置填0,如下圖所示:

image.png

二、deconv(反卷積)和dilated conv(空洞卷積)的區別

膨脹卷積(空洞卷積,dilated convolution)

膨脹卷積在standard convolution的基礎上多了乙個超引數稱之為膨脹率(dilation rate),該超引數指的是kernel的間隔數量。

deconv的其中乙個用途是做upsampling,即增大影象尺寸。而dilated conv並不是做upsampling,而是增大感受野。

可以形象的做個解釋:

對於標準的k*k卷積操作,stride為s,分三種情況:

(1) s>1,即卷積的同時做了downsampling,卷積後影象尺寸減小;

(2) s=1,普通的步長為1的卷積,比如在tensorflow中設定padding=same的話,卷積的影象輸入和輸出有相同的尺寸大小;

(3) 0而dilated conv不是在畫素之間padding空白的畫素,而是在已有的畫素上,skip掉一些畫素,或者輸入不變,對conv的kernel引數中插一些0的weight,達到一次卷積看到的空間範圍變大的目的。

當然將普通的卷積stride步長設為大於1,也會達到增加感受野的效果,但是stride大於1就會導致downsampling,影象尺寸變小。大家可以從以上理解到deconv,dilated conv

上取樣,反卷積,上池化區別

通過卷積和池化等技術可以將影象進行降維,因此,一些研究人員也想辦法恢復原解析度大小的影象,特別是在語義分割領域應用很成熟。通過對一些資料的學習,簡單的整理下三種恢復方法,並進行對比。在fcn u net等網路結構中,涉及到了上取樣。上取樣概念 上取樣指的是任何可以讓影象變成更高解析度的技術。最簡單的...

上取樣 反卷積 上池化的區別

上取樣 反卷積 上池化的區別 圖 a 表示unpooling的過程,特點是在maxpooling的時候保留最大值的位置資訊,之後在unpooling階段使用該資訊擴充feature map,除最大值位置以外,其餘補0。與之相對的是圖 b 兩者的區別在於unsampling階段沒有使用maxpooli...

反卷積 上取樣 上池化

反卷積 上取樣 上池化圖示理解,如上所示。目前使用得最多的deconvolution有2種。方法1 full卷積,完整的卷積可以使得原來的定義域變大 上圖中藍色為原影象,白色為對應卷積所增加的padding,通常全部為0,綠色是卷積後。卷積的滑動是從卷積核右下角與左上角重疊開始進行卷積,滑動步長為1...