upsampling(上采樣)的三種方式:
Resize ,如雙線性插值直接縮放,類似於圖像縮放;
反卷積 (deconvolution & transposed convolution);
反池化 (unpooling)。
上采樣upsampling的主要目的是放大圖像,幾乎都是采用內插值法,即在原有圖像像素的基礎上,在像素點值之間采用合適的插值算法插入新的元素。
傳統的網絡是subsampling的,對應的輸出尺寸會降低;upsampling的意義在於將小尺寸的高維度feature map恢復回去,以便做pixelwise prediction,獲得每個點的分類信息。
大名鼎鼎的FCN使用反卷積來完成上采樣的過程。
2、雙線性插值
雙線性插值是插值算法中的壹種,是線性插值的擴展。利用原圖像中目標點四周的四個真實存在的像素值來***同決定目標圖中的壹個像素值,其核心思想是在兩個方向分別進行壹次線性插值。
已知的紅色數據點和待插值的綠色數據點
假如我們想得到未知函數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與y方向上,z值成單調性特性的應用中,此種方法可以做外插運算,即可以求解Q11~Q22所構成的正方形以外的點的值。
總結 : 線性插值法 利用原圖像中 兩個點 計算像素值進行插值, 雙線性插值法 利用原圖像中 四個點 計算目標像素值進行插值。
反卷積(轉置卷積)通常用來兩個方面:
反卷積(deconvolution) ,由於實現上采用轉置卷積核的方法,所以有人說應該叫轉置卷積TD(transposed convolution)。
當stride不為1的時候,轉置卷積的卷積核就變成了壹個帶’洞’的卷積
在池化過程中,記錄下max-pooling在對應kernel中的坐標,在反池化過程中,將壹個元素根據kernel進行放大,根據之前的坐標將元素填寫進去,其他位置補0 。在下采樣的時候記錄max的位置,上采樣的時候最大值的位置還原,其它位置填0,如下圖所示:
膨脹卷積(空洞卷積,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<s<1,fractionally strided convolution,相當於對圖像做upsampling。比如s=0.5時,意味著在圖像每個像素之間padding壹個空白的像素後,stride改為1做卷積,得到的feature map尺寸增大壹倍。
而dilated conv不是在像素之間padding空白的像素,而是在已有的像素上,skip掉壹些像素,或者輸入不變,對conv的kernel參數中插壹些0的weight,達到壹次卷積看到的空間範圍變大的目的。
當然將普通的卷積stride步長設為大於1,也會達到增加感受野的效果,但是stride大於1就會導致downsampling,圖像尺寸變小。大家可以從以上理解到deconv,dilated conv
參考鏈接:
反卷積 轉置卷積的理解
FCN中反卷積、上采樣、雙線性插值之間的關系
upsampling(上采樣)的三種方式
卷積、反卷積 、空洞卷積