深度學習網絡層之上采樣(Unpooling)


之前一篇博文中介紹了深度學習中的pooling層,在本篇中主要介紹轉置卷積這種上采樣操作。轉置卷積也是一種卷積

L2 pooling

\[a^l={1\over k}\sqrt{\sum_{j=1}^k(a_j^{l-1})^2} \]

pooling除了僅輸出一個值, 也可以輸出top k個(mix pooling).

CNN中的上采樣

Unpooling:

  • 近鄰,以復制的方式.

  • "Bed of Nails":其他位置用0填充

  • "Max Unpooling" 在對稱的max pooling中記錄最大值的位置,在unpooling時將最大值位置設置為特征值,其他位置置0.

  • 轉置卷積:Transpose Convolution,參數可學習,而上述的上采樣方式都是固定的函數,不可學習.

轉置卷積

轉置卷積計算過程是將輸入的每個元素值作為卷積核的權重,相乘后作為該元素對應的上采樣輸出,不同輸入的重疊的輸出部分直接相加作為輸出.示意圖如下:

trans-conv-1D

2-D轉置卷積操作:在輸入的相鄰像素間填充stride-1個0,再在邊緣填充kernel_size - 1 - crop個 zero-padding,再進行卷積運算。最后一步還要進行裁剪。

transpose_conv

轉置卷積運算示意圖如下:[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的圖片敏感。
  • 上采樣:在圖像語義分割或生成對抗網絡中需要像素級別的預測,需要較高的圖像尺寸。

參考:


  1. 手寫代碼實現 https://www.jianshu.com/p/f0674e48894c ↩︎

  2. https://buptldy.github.io/2016/10/29/2016-10-29-deconv/ ↩︎

  3. http://deeplearning.net/software/theano_versions/dev/tutorial/conv_arithmetic.html#transposed-convolution-arithmetic ↩︎


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM