參考:https://blog.csdn.net/leviopku/article/details/84975282
參考:https://blog.csdn.net/g11d111/article/details/82855946
上采樣的概念:
上采樣可以理解為任何可以將圖像變成更高分辨率的技術;最簡單的方式就是重采樣和插值法:將輸入圖片 input image 進行 rescale 到一個想要的尺寸;而且計算每個點的像素點,使用如雙線性插值bilinear 等插值方法對其余點進行插值;
Unpooling 是在CNN中常用來表示max pooling 的逆操作。由2013年紐約大學Matthew D. Zeiler和Rob Fergus發表的《Visualizing and Understanding Convolutional Networks》引用:因為max pooling 不可逆,因此使用近似操作得到 max pooling 操作之前的原始情況;(記住max pooling做的時候的size,比如如下圖的4x4的矩陣,max pooling的size 為2x2, stride為2,反卷積操作需要記住最大值的位置,然后將其余的位置置為0就可以)
反卷積在CNN中常用於表示一種反向卷積,但是它並不是一個完全符合數學規定的反卷積操作;
與Unpooling不同,使用反卷積來對圖像進行上采樣是可以習得的。通常用來對卷積層的結果進行上采樣,使其回到原始圖片的分辨率;
反卷積也被稱為分數步長卷積或者轉置卷積或者后向卷積;
早PyTorch中,上采樣的層被封裝在torch.nn中的Vision Layers里面,一共有4中:
1、PixelShuffle
2、Upsample
3、UpsampleNearest2d
4、UpsamplingBilinear2d
其中,PixelShuffle表示如下:
Sub-pixel convolution 是一種巧妙的圖像及特征圖upscale的方法,又叫pixel shuffle(像素洗牌)。我們知道,用深度學習處理圖像的話,經常需要對特征圖放大。常見的方法有直接上采樣,雙線性插值,反卷積等。本文主要介紹一種在超分辨率中經常使用的 upscale 方法 —— sub-pixel convolution.
采用CNN對feature map 進行放大的方法,除了有 deconvolition 之外,還有一個叫做 sub- pixel convolution 。如果做SR(超分辨率)的話,需要將一張低分辨率圖像轉換成一張高分辨率圖像。如果直接用 deconvolution 作為 upscale 手段的話,通常會帶入過多人工因素進來。而 sub-pixel conv 會大大降低這個風險。先看 sub-pixel 是怎么做的:
前面就是一個普通的CNN網絡,到后面的彩色部分就是 sub- pixel conv 的操作了。首先如果對原圖放大3倍,那么就要生成3^2=9 (通道數)個相同尺寸的特征圖。然后將9個相同尺寸的特征圖拼接成一個x3的大圖,也就是對應的 sub - pixel convolution 操作;
其實也就是要放大r倍的話,那就生成r方個channel的特征圖,這里的r也可以稱為上采樣因子;
這對應的是抽樣的反思想,如果把一張 x3 的大圖,每隔三個點抽樣依次,那么就得到9張低分辨率的圖像;於是就可以通過CNN來獲得這么9張低分辨率的圖像,然后再組成一張高分辨率大圖;