之前一篇博文中介紹了深度學習中的pooling層,在本篇中主要介紹轉置卷積
這種上采樣操作。轉置卷積也是一種卷積。
L2 pooling
pooling除了僅輸出一個值, 也可以輸出top k個(mix pooling).
CNN中的上采樣
Unpooling:
-
近鄰,以復制的方式.
-
"Bed of Nails":其他位置用0填充
-
"Max Unpooling" 在對稱的max pooling中記錄最大值的位置,在unpooling時將最大值位置設置為特征值,其他位置置0.
-
轉置卷積:Transpose Convolution,參數可學習,而上述的上采樣方式都是固定的函數,不可學習.
轉置卷積
轉置卷積計算過程是將輸入的每個元素值作為卷積核的權重,相乘后作為該元素對應的上采樣輸出,不同輸入的重疊的輸出部分直接相加作為輸出.示意圖如下:
2-D轉置卷積操作:在輸入的相鄰像素間填充stride-1
個0,再在邊緣填充kernel_size - 1 - crop
個 zero-padding,再進行卷積運算。最后一步還要進行裁剪。
轉置卷積運算示意圖如下:[1]
為什么叫轉置卷積? 因為卷積的 im2col 矩陣乘實現中對卷積核展開成了二維的矩陣, 大小如\(k^2\times n\),而轉置卷積中需要的卷積矩陣的維度是\(n\times k^2\), 所以在形式上是轉置的形式.
轉置卷積也被稱為小數步長卷積(Fractionally Strided Convolution),如果前向卷積中步長\(s>1\),那么轉置卷積中步長\(s'<1\),但是小於1的步長不能夠直接實現,可以從另外的方式實現:在輸入特征單元之間插入 s−1 個0,此時步長 s′ 設置為1,不再是小數。[2]
輸入輸出尺度關系:[3]
一般前向卷積中\(o=\lfloor{i+2p-k\over s}\rfloor+1\),如果\(i+2p-k\)是s的整數倍,那么轉置卷積中: \(o'= s(i' −1)+k −2p\), (\(k'=k,s'=1,p'=k-p-1\)).
轉置卷積的用途
- CNN可視化:通過轉置卷積將feature map還原到像素空間,以觀察特定的feature map對哪些pattern的圖片敏感。
- 上采樣:在圖像語義分割或生成對抗網絡中需要像素級別的預測,需要較高的圖像尺寸。
參考: