卷積的多種形式及tensorflow實現

1.常規卷積

2.膨脹卷積 dilate conv

使用實例 ssd中block6

# Block 6: let's dilate the hell out of it!
net = slim.conv2d(net, 1024, [3, 3], rate=6, scope='conv6')
end_points['block6'] = net

卷積核膨脹是將卷積核擴張到膨脹尺度約束的尺度中,並將原卷積核沒有佔用的區域填充零

卷積核膨脹公式:

膨脹的卷積核尺寸 = 膨脹係數 * (原始卷積核尺寸 - 1) + 1

3.反捲積 Deconvolution

下圖表示一個和上圖卷積計算對應的反捲積操作,其中他們的輸入輸出關係正好相反。如果不考慮通道以卷積運算的反向運算來計算反捲積運算的話,我們還可以通過離散卷積的方法來求反捲積(這裏只是爲了說明,實際工作中不會這麼做)。

同樣爲了說明,定義反捲積操作參數如下:

  • 二維的離散卷積(N=2N=2)
  • 方形的特徵輸入(i′1=i′2=i′i1′=i2′=i′)
  • 方形的卷積核尺寸(k′1=k′2=k′k1′=k2′=k′)
  • 每個維度相同的步長(s′1=s′2=s′s1′=s2′=s′)
  • 每個維度相同的padding (p′1=p′2=p′p1′=p2′=p′)

下圖表示的是參數爲( i′=2,k′=3,s′=1,p′=2i′=2,k′=3,s′=1,p′=2)的反捲積操作,其對應的卷積操作參數爲 (i=4,k=3,s=1,p=0)(i=4,k=3,s=1,p=0)。我們可以發現對應的卷積和非卷積操作其 (k=k′,s=s′)(k=k′,s=s′),但是反捲積卻多了p′=2p′=2。通過對比我們可以發現卷積層中左上角的輸入只對左上角的輸出有貢獻,所以反捲積層會出現 p′=k−p−1=2p′=k−p−1=2。通過示意圖,我們可以發現,反捲積層的輸入輸出在 s=s′=1s=s′=1 的情況下關係爲:

o′=i′−k′+2p′+1=i′+(k−1)−2p

 

4.Fractionally Strided Convolution

反捲積有時候也被叫做Fractionally Strided Convolution,翻譯過來大概意思就是小數步長的卷積。對於步長 s>1s>1的卷積,我們可能會想到其對應的反捲積步長 s′<1s′<1。 如下圖所示爲一個參數爲 i=5,k=3,s=2,p=1i=5,k=3,s=2,p=1的卷積操作(就是第一張圖所演示的)所對應的反捲積操作。對於反捲積操作的小數步長我們可以理解爲:在其輸入特徵單元之間插入 s−1s−1 個0,插入0後把其看出是新的特徵輸入,然後此時步長 s′s′ 不再是小數而是爲1。因此,結合上面所得到的結論,我們可以得出Fractionally Strided Convolution的輸入輸出關係爲:

o′=s(i′−1)+k−2p

5.Squeeze-and-Excitation

這是 ImageNet 2017 競賽 Image Classification 任務的冠軍模型 SENet 的核心模塊,原文叫做”Squeeze-and-Excitation“。

和前面不同的是,這個卷積是對特徵維度作改進的。一個卷積層中往往有數以千計的卷積核,而且我們知道卷積覈對應了特徵,於是乎那麼多特徵要怎麼區分?這個方法就是通過學習的方式來自動獲取到每個特徵通道的重要程度,然後依照計算出來的重要程度去提升有用的特徵並抑制對當前任務用處不大的特徵。

 

CNN 中千奇百怪的卷積方式大彙總

這個想法的實現異常的簡單,簡單到你難以置信。

首先做普通的卷積,得到了一個的 output feature map,它的 shape 爲 [C,H,W],根據 paper 的觀點,這個 feature map 的特徵很混亂。然後爲了獲得重要性的評價指標,直接對這個 feature map 做一個 Global Average Pooling,然後我們就得到了長度爲 C 的向量。(這裏還涉及到一個額外的東西,如果你瞭解卷積,你就會發現一旦某一特徵經常被激活,那麼 Global Average Pooling 計算出來的值會比較大,說明它對結果的影響也比較大,反之越小的值,對結果的影響就越小)

然後我們對這個向量加兩個 FC 層,做非線性映射,這倆 FC 層的參數,也就是網絡需要額外學習的參數。

最後輸出的向量,我們可以看做特徵的重要性程度,然後與 feature map 對應 channel 相乘就得到特徵有序的 feature map 了。

雖然各大框架現在都還沒有擴展這個卷積的 api,但是我們實現它也就幾行代碼的事,可謂是簡單且實用了。

另外它還可以和幾個主流網絡結構結合起來一起用,比如 Inception 和 Res:

CNN 中千奇百怪的卷積方式大彙總CNN 中千奇百怪的卷積方式大彙總

代表模型:Squeeze-and-Excitation Networks(Squeeze-and-Excitation Networks

轉載至:http://buptldy.github.io/2016/10/29/2016-10-29-deconv/

更多關於卷積和反捲積的可視化理解:https://github.com/vdumoulin/conv_arithmetic 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章