細數(shù)那些“高大上”的卷積

  1. 卷積只能在同一組進行嗎?-- Group convolution
  2. 卷積核一定越大越好?-- 3×3卷積核
  3. 每層卷積只能用一種尺寸的卷積核?-- Inception結構
  4. 怎樣才能減少卷積層參數(shù)量?-- Bottleneck
  5. 越深的網絡就越難訓練嗎?-- Resnet殘差網絡
  6. 卷積操作時必須同時考慮通道和區(qū)域嗎?-- DepthWise操作(Xception)
  7. 分組卷積能否對通道進行隨機分組?-- ShuffleNet
  8. 通道間的特征都是平等的嗎? -- SEnet
  9. 能否讓固定大小的卷積核看到更大范圍的區(qū)域?-- Dilated convolution
  10. 卷積核形狀一定是矩形嗎?-- Deformable convolution 可變形卷積核

1.空洞卷積(dilated conv)

空洞卷積也可以叫擴張卷積。在圖像分割領域,圖像輸入到CNN(典型的網絡比如FCN)中,F(xiàn)CN先像傳統(tǒng)的CNN那樣對圖像做卷積再pooling,降低圖像尺寸的同時增大感受野,但是由于圖像分割預測是pixel-wise的輸出,所以要將pooling后較小的圖像尺寸upsampling到原始的圖像尺寸進行預測(upsampling一般采用deconv反卷積操作,deconv可參見知乎答案如何理解深度學習中的deconvolution networks:https://www.zhihu.com/question/43609045/answer/132235276),之前的pooling操作使得每個pixel預測都能看到較大感受野信息。因此圖像分割FCN中有兩個關鍵,一個是pooling減小圖像尺寸增大感受野,另一個是upsampling擴大圖像尺寸。在先減小再增大尺寸的過程中,肯定有一些信息損失掉了,那么能不能設計一種新的操作,不通過pooling也能有較大的感受野看到更多的信息呢?答案就是dilated conv。

(a)圖對應3x3的1-dilated conv,和普通的卷積操作一樣
(b)圖對應3x3的2-dilated conv,實際的卷積kernel size還是3x3,但是空洞為1,也就是對于一個7x7的圖像patch,只有9個紅色的點和3x3的kernel發(fā)生卷積操作,其余的點略過。也可以理解為kernel的size為7x7,但是只有圖中的9個點的權重不為0,其余都為0。 可以看到雖然kernel size只有3x3,但是這個卷積的感受野已經增大到了7x7(如果考慮到這個2-dilated conv的前一層是一個1-dilated conv的話,那么每個紅點就是1-dilated的卷積輸出,所以感受野為3x3,所以1-dilated和2-dilated合起來就能達到7x7的conv)
(c)圖是4-dilated conv操作,同理跟在兩個1-dilated和2-dilated conv的后面,能達到15x15的感受野。對比傳統(tǒng)的conv操作,3層3x3的卷積加起來,stride為1的話,只能達到(kernel-1)*layer+1=7的感受野,也就是和層數(shù)layer成線性關系,而dilated conv的感受野是指數(shù)級的增長。

重新思考卷積: Rethinking Convolution

在贏得其中一屆ImageNet比賽里VGG網絡的文章中,他最大的貢獻并不是VGG網絡本身,而是他對于卷積疊加的一個巧妙觀察。

This (stack of three 3 × 3 conv layers) can be seen as imposing a regularisation on the 7 × 7 conv. filters, forcing them to have a decomposition through the 3 × 3 filters (with non-linearity injected in between).

這里意思是 7 x 7 的卷積層的正則等效于 3 個 3 x 3 的卷積層的疊加。而這樣的設計不僅可以大幅度的減少參數(shù),其本身帶有正則性質的 convolution map 能夠更容易學一個 generlisable, expressive feature space。這也是現(xiàn)在絕大部分基于卷積的深層網絡都在用小卷積核的原因。

然而 Deep CNN 對于其他任務還有一些致命性的缺陷。較為著名的是 up-sampling 和 pooling layer 的設計。這個在 Hinton 的演講里也一直提到過。

主要問題有:

  1. Up-sampling / pooling layer (e.g. bilinear interpolation) is deterministic. (a.k.a. not learnable)
  2. 內部數(shù)據(jù)結構丟失;空間層級化信息丟失。
  3. 小物體信息無法重建 (假設有四個pooling layer 則 任何小于 2^4 = 16 pixel 的物體信息將理論上無法重建。)

在這樣問題的存在下,語義分割問題一直處在瓶頸期無法再明顯提高精度, 而 dilated convolution 的設計就良好的避免了這些問題。對于 dilated convolution, 我們已經可以發(fā)現(xiàn)他的優(yōu)點,即內部數(shù)據(jù)結構的保留和避免使用 down-sampling 這樣的特性。但是完全基于 dilated convolution 的結構如何設計則是一個新的問題。

空洞卷積gridding問題
是的,空洞卷積是存在理論問題的,論文中稱為gridding,其實就是網格效應/棋盤問題。因為空洞卷積得到的某一層的結果中,鄰近的像素是從相互獨立的子集中卷積得到的,相互之間缺少依賴。

  • 局部信息丟失:由于空洞卷積的計算方式類似于棋盤格式,某一層得到的卷積結果,來自上一層的獨立的集合,沒有相互依賴,因此該層的卷積結果之間沒有相關性,即局部信息丟失。

  • 遠距離獲取的信息沒有相關性:由于空洞卷積稀疏的采樣輸入信號,使得遠距離卷積得到的信息之間沒有相關性,影響分類結果。

解決方案

  1. (通向標準化設計:Hybrid Dilated Convolution (HDC))Panqu Wang,Pengfei Chen, et al.Understanding Convolution for Semantic Segmentation.//WACV 2018


通過圖a解釋了空洞卷積存在的問題,從左到右屬于top-bottom關系,三層卷積均為r=2的dilatedConv,可以看出最上層的紅色像素的感受野為13且參與實際計算的只有75%,很容易看出其存在的問題。

使用HDC的方案解決該問題,不同于采用相同的空洞率的deeplab方案,該方案將一定數(shù)量的layer形成一個組,然后每個組使用連續(xù)增加的空洞率,其他組重復。如deeplab使用rate=2,而HDC采用r=1,r=2,r=3三個空洞率組合,這兩種方案感受野都是13。但HDC方案可以從更廣闊的像素范圍獲取信息,避免了grid問題。同時該方案也可以通過修改rate任意調整感受野。

  1. Fisher Yu, et al. Dilated Residual Networks. //CVPR 2017
  • Removing max pooling:由于maxpool會引入更高頻的激活,這樣的激活會隨著卷積層往后傳播,使得grid問題更明顯。
  • Adding layers:在網絡最后增加更小空洞率的殘參block, 有點類似于HDC。
  • Removing residual connections:去掉殘參連接,防止之前層的高頻信號往后傳播。

更多請參考空洞卷積 ~


2.Deformable Convolutional Networks-v1-v2(可變形卷積網絡)

《Deformable Convolutional Networks》是一篇2017年Microsoft Research Asia的研究?;舅枷胍彩蔷矸e核的采樣方式是可以通過學習得到的。作者提出了兩種新的op:deformable convolution和deformable roi pooling,主要是通過給傳統(tǒng)卷積采樣點加offsets的方式來獲得新的采樣點。

論文引入了兩種新的模塊來提高卷積神經網絡 (CNN) 對變換的建模能力:可變形卷積 (deformable convolution) 和可變形興趣區(qū)域池化 (deformable ROI pooling)

可變形卷積 Deformable Convolution

先看傳統(tǒng)卷積的一個定義:

R代表一個receptive field的grid: R={(?1,?1),(?1,0),...,(0,1),(1,1)},以3*3為例。 對于輸出中每一個像素position P0,一般的卷積就是


而可變形卷積做的是:


圖中,把原來的卷積過程分成兩路,上面一路學習offset Δpn,得到H*W*2N的輸出(offset),N=|R|表示grid中像素個數(shù),2N的意思是有x,y兩個方向的offset。有了這個offset以后,對于原始卷積的每一個卷積窗口,都不再是原來規(guī)整的sliding window(圖1中的綠框),而是經過平移后的window(藍框),取到數(shù)據(jù)后計算過程和卷積一致。Δpn不是整數(shù)像素,而是一個高精度的小數(shù),不能直接獲取像素坐標,而如果采用簡單粗暴的取整又會有一定誤差,因此就采用了和STN中一樣的做法——雙線性插值,插出每個點的像素值。

可變形興趣區(qū)域池化 Deformable RoI Pooling

區(qū)別在于用的是FC,原因是ROI pooling之后的結果是固定大小的k*k,直接用FC得到k *k個offset。但是這些offset不能直接用,因為ROI區(qū)域大小不一,并且input feature map的w和h也是大小不一。作者提出的方法是用一個scale r:


下面是roi pooling原來的公式(用的是average?這個比較奇怪,一般都是用max的,當然按照這個邏輯,max pooling也很容易推出)


有了offset之后就可以這樣做:


和前面一樣,因為offset是帶小數(shù)的,不能直接得到像素,需要用雙線性插值算法得到每一個像素值。注意,這里的offset只有k*k個,而不是每一個像素一個。

【改進】:專欄 | MSRA視覺計算組提出第二代可變形卷積網絡,增強形變,更好效果


3. Octave conv

近期,來自 Facebook AI、新加坡國立大學、奇虎 360 的研究人員聯(lián)合提出了一種新的卷積操作 (OctConv),用于替代現(xiàn)有的通用卷積。這款新卷積不僅占用更少的內存和計算,還有助于提高性能。卷積神經網絡(CNN)在很多計算機視覺任務中都取得了卓越的成就,然而高準確率的背后,卻是很高的冗余度和不可忽視的計算開銷。


圖1. 現(xiàn)有的卷積操作(1x1 卷積)

對于一個卷積操作而言(圖 ),每個位置都是由一個 D 維特征向量 表示,而特征提取,則是通過滑動卷積,對每個位置分別處理得到對應的特征。

但是,這種為每個位置都分別存儲一份特征表達,并分別一一處理的策略明顯是不合理的。因為,對于圖像而言,相鄰位置往往描述的是同一個語義,從而共享一部分特征。


圖2. AlexNet 的第一層卷積核

與此同時,CNN 所學習到的卷積核,也并非全是高頻卷積核,如圖 2 所示。這意味著,一部分卷積專注于提取「低頻特征」,而另一部分則專注于提取「高頻特征」。對于低頻卷積所對應的特征圖而言,我們也許只需要保留它的低頻信號即可,沒必要存儲在高分辨率下的特征圖。


圖3. 本文的:(a) 主要動機; (b,c) 新的特征表達方式;(d) OctConv

如圖 3 所示,本文提出將特征圖分為兩組:低頻特征(藍色)和 高頻特征(橙紅),并將空間上變化較為緩慢的「低頻特征圖」存儲在低分辨率的張量中,共享相鄰位置間的特征。而本文所提出的 OctConv 則是一種可以直接作用在該特征表達下的卷積操作。它包含每個頻率自身狀態(tài)的更新(綠色箭頭),以及頻率間的信息交互(紅色箭頭)。


Octave Convolution(OctConv)的命名應該是受到了 SIFT 特征的啟發(fā)。而 Octave 是八個音階的意思,音樂里降 8 個音階代表頻率減半。本文通過一個 Octave 將 高頻 和 低頻 特征隔離到不同的組中,并將低頻的分辨率減半。

研究人員指出 OctConv 可以直接用于替代現(xiàn)有卷積,并且即插即用,無需調參,也不影響 CNN 的網絡結構以及模型大小。由于 OctConv 專注于降低 CNN 空間維度上的冗余,因此它與現(xiàn)有專注于網絡拓補結構設計,以及減少網絡特征容易的方法是正交和互補的。

【詳細參考】:即插即用新卷積:提升CNN性能、速度翻倍

參考鏈接:
https://www.zhihu.com/question/54149221/answer/192025860
https://www.zhihu.com/question/54149221/answer/323880412
通過簡單代碼來回顧卷積塊的歷史
如何理解空洞卷積(dilated convolution)?
https://www.cnblogs.com/ranjiewen/p/10040410.html

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容