反卷積、上采樣、上池化圖示理解,如上所示。
目前使用得最多的deconvolution有2種。
方法1:full卷積, 完整的卷積可以使得原來的定義域變大
上圖中藍色為原圖像,白色為對應卷積所增加的padding,通常全部為0,綠色是卷積后圖片。卷積的滑動是從卷積核右下角與圖片左上角重疊開始進行卷積,滑動步長為1,卷積核的中心元素對應卷積后圖像的像素點。可以看到卷積后的圖像是4X4,比原圖2X2大了,我們還記1維卷積大小是n1+n2-1,這里原圖是2X2,卷積核3X3,卷積后結果是4X4,與一維完全對應起來了。其實這才是完整的卷積計算,其他比它小的卷積結果都是省去了部分像素的卷積。
方法2:記錄pooling index,然后擴大空間,再用卷積填充
假設原圖是3X3,首先使用上采樣讓圖像變成7X7,可以看到圖像多了很多空白的像素點。使用一個3X3的卷積核對圖像進行滑動步長為1的valid卷積,得到一個5X5的圖像,我們知道的是使用上采樣擴大圖片,使用反卷積填充圖像內容,使得圖像內容變得豐富,這也是CNN輸出end to end結果的一種方法
圖像的deconvolution過程如下,

輸入:2x2, 卷積核:4x4, 滑動步長:3, 輸出:7x7
即輸入為2x2的圖片經過4x4的卷積核進行步長為3的反卷積的過程
1.輸入圖片每個像素進行一次full卷積,根據full卷積大小計算可以知道每個像素的卷積后大小為 1+4-1=4, 即4x4大小的特征圖,輸入有4個像素所以4個4x4的特征圖
2.將4個特征圖進行步長為3的fusion(即相加); 例如紅色的特征圖仍然是在原來輸入位置(左上角),綠色還是在原來的位置(右上角),步長為3是指每隔3個像素進行fusion,重疊部分進行相加,即輸出的第1行第4列是由紅色特陣圖的第一行第四列與綠色特征圖的第一行第一列相加得到,其他如此類推。
可以看出反卷積的大小是由卷積核大小與滑動步長決定, in是輸入大小, k是卷積核大小, s是滑動步長, out是輸出大小
得到 out = (in - 1) * s + k
上圖過程就是, (2 - 1) * 3 + 4 = 7
轉自:
https://blog.csdn.net/A_a_ron/article/details/79181108
https://blog.csdn.net/qq_38906523/article/details/80520950