通道洗牌、變形卷積核、可分離卷積?盤點卷積神經網絡中十大令人拍案叫絕的操作。

CNN從2012年的AlexNet發展至今,科學家們發明出各種各樣的CNN模型,一個比一個深,一個比一個準確,一個比一個輕量。我下面會對近幾年一些具有變革性的工作進行簡單盤點,從這些充滿革新性的工作中探討日后的CNN變革方向。

注:水平所限,下面的見解或許有偏差,望大牛指正。另外只介紹其中具有代表性的模型,一些著名的模型由于原理相同將不作介紹,若有遺漏也歡迎指出。

一、卷積只能在同一組進行嗎?-- Group convolution

Group convolution 分組卷積,最早在AlexNet中出現,由于當時的硬件資源有限,訓練AlexNet時卷積操作不能全部放在同一個GPU處理,因此作者把feature maps分給多個GPU分別進行處理,最后把多個GPU的結果進行融合。

alexnet

分組卷積的思想影響比較深遠,當前一些輕量級的SOTA(State Of The Art)網絡,都用到了分組卷積的操作,以節省計算量。但題主有個疑問是,如果分組卷積是分在不同GPU上的話,每個GPU的計算量就降低到 1/groups,但如果依然在同一個GPU上計算,最終整體的計算量是否不變?找了pytorch上有關組卷積操作的介紹,望讀者解答我的疑問。

pytroch github

二、卷積核一定越大越好?-- 3×3卷積核

AlexNet中用到了一些非常大的卷積核,比如11×11、5×5卷積核,之前人們的觀念是,卷積核越大,receptive field(感受野)越大,看到的圖片信息越多,因此獲得的特征越好。雖說如此,但是大的卷積核會導致計算量的暴增,不利于模型深度的增加,計算性能也會降低。于是在Inception網絡中,作者提出利用2個3×3卷積核的組合比1個5×5卷積核的效果更佳,同時參數量(3×3×2+1 VS 5×5×1+1)被降低,因此后來3×3卷積核被廣泛應用在各種模型中。

三、每層卷積只能用一種尺寸的卷積核?-- Inception結構

傳統的層疊式網絡,基本上都是一個個卷積層的堆疊,每層只用一個尺寸的卷積核,例如VGG結構中使用了大量的3×3卷積層。事實上,同一層feature map可以分別使用多個不同尺寸的卷積核,以獲得不同尺度的特征,再把這些特征結合起來,得到的特征往往比使用單一卷積核的要好,因此谷歌發明的GoogleNet,或者說Inception系列的網絡,就使用了多個卷積核的結構:

最初版本的Inception結構

如上圖所示,一個輸入的feature map分別同時經過1×1、3×3、5×5的卷積核的處理,得出的特征再組合起來,獲得更佳的特征。但這個結構會存在一個嚴重的問題:參數量比單個卷積核要多很多,如此龐大的計算量會使得模型效率低下。這就引出了一個新的結構:

四、怎樣才能減少卷積層參數量?-- Bottleneck

發明GoogleNet的團隊發現,如果僅僅引入多個尺寸的卷積核,會帶來大量的額外的參數,為了解決這個問題,他們往Inception結構中加入了一些1×1的卷積核,如圖所示:

加入1×1卷積核的Inception結構

根據上圖,我們看著1×1 --> 3×3這段通路,來做個計算,假設輸入feature map的維度為256維,要求輸出維度也是256維。有以下兩種操作:

  1. 256維的輸入直接經過一個3×3×256的卷積層,輸出一個256維的feature map,那么參數量為:256×3×3×256 = 589,824

  2. 256維的輸入先經過一個1×1×64的卷積層,再經過一個3×3×64的卷積層,最后經過一個3×3×256的卷積層,輸出256維,參數量為:256×1×1×64 + 64×3×3×63 + 64×1×1×256 = 69,632。足足把第一種操作的參數量降低到九分之一!

1×1卷積核也被認為是影響深遠的操作,往后大型的網絡為了降低參數量都會應用上1×1卷積核。

五、越深的網絡就越難訓練嗎?-- Resnet殘差網絡

ResNet skip connection

傳統的卷積層層疊網絡會遇到一個問題,當層數加深時,網絡的表現越來越差,很大程度上的原因是因為當層數加深時,梯度消散得越來越嚴重,以至于反向傳播很難訓練到淺層的網絡。為了解決這個問題,何凱明大神想出了一個“殘差網絡”,使得梯度更容易地流動到淺層的網絡當中去,而且這種“skip connection”能帶來更多的好處,這里可以參考一個PPT:極深網絡(ResNet/DenseNet): Skip Connection為何有效及其它 ,以及我的一篇文章:為什么ResNet和DenseNet可以這么深?一文詳解殘差塊為何能解決梯度彌散問題。 ,大家可以結合下面的評論進行思考。

六、卷積操作時所有通道都只能用同一個過濾器嗎?-- DepthWise操作

標準的卷積過程可以看上圖,一個2×2的卷積核在卷積時,對應圖像區域中的所有通道均用同一個過濾器,問題在于,為什么一定要同時考慮圖像區域和通道?我們為什么不能每個通道分開考慮?

Xception網絡就是基于以上的問題發明而來。我們首先對每一個通道進行各自的卷積操作,有多少個通道就有多少個過濾器。得到新的通道feature maps之后,這時再對這批新的通道feature maps進行標準的1×1跨通道卷積操作。這種操作被稱為 “DepthWise convolution” ,縮寫“DW”。

這種操作是相當有效的,在imagenet 1000類分類任務中已經超過了InceptionV3的表現,而且也同時減少了大量的參數,我們來算一算,假設輸入通道數為3,要求輸出通道數為256,兩種做法:

1.直接接一個3×3×256的卷積核,參數量為:3×3×3×256 = 6,912

2.DW操作,分兩步完成,參數量為:3×3×3 + 3×1×1×256 = 795,又把參數量降低到九分之一!

因此,一個depthwise操作比標準的卷積操作降低不少的參數量,同時得到更好的效果,因為它對每一個通道都進行了學習(每個通道對應一個不同的過濾器),而不是所有通道對應同一個過濾器,得到的特征質量更佳!

七、分組卷積能否對通道進行隨機分組?-- ShuffleNet

在AlexNet的Group Convolution當中,特征的通道被平均分到不同組里面,最后再通過兩個全連接層來融合特征,這樣一來,就只能在最后時刻才融合不同組之間的特征,對模型的泛化性是相當不利的。為了解決這個問題,ShuffleNet在每一次層疊這種Group conv層前,都進行一次channel shuffle,shuffle過的通道被分配到不同組當中。進行完一次group conv之后,再一次channel shuffle,然后分到下一層組卷積當中,以此循環。

來自ShuffleNet論文

經過channel shuffle之后,Group conv輸出的特征能考慮到更多通道,輸出的特征自然代表性就更高。另外,AlexNet的分組卷積,實際上是標準卷積操作,而在ShuffleNet里面的分組卷積操作是depthwise卷積,因此結合了通道洗牌和分組depthwise卷積的ShuffleNet,能得到超少量的參數以及超越mobilenet、媲美AlexNet的準確率!

另外值得一提的是,微軟亞洲研究院MSRA最近也有類似的工作,他們提出了一個IGC單元(Interleaved Group Convolution),即通用卷積神經網絡交錯組卷積,形式上類似進行了兩次組卷積,Xception 模塊可以看作交錯組卷積的一個特例,特別推薦看看這篇文章:王井東詳解ICCV 2017入選論文:通用卷積神經網絡交錯組卷積

八、通道間的特征都是平等的嗎? -- SEnet

無論是在Inception、DenseNet或者ShuffleNet里面,我們對所有通道產生的特征都是不分權重直接結合的,那為什么要認為所有通道的特征對模型的作用就是相等的呢? 這是一個好問題,于是,ImageNet2017 冠軍SEnet就出來了。

SEnet 結構

一組特征在上一層被輸出,這時候分兩條路線,第一條直接通過,第二條首先進行Squeeze操作(Global Average Pooling),把每個通道2維的特征壓縮成一個1維,從而得到一個特征通道向量(每個數字代表對應通道的特征)。然后進行Excitation操作,把這一列特征通道向量輸入兩個全連接層和sigmoid,建模出特征通道間的相關性,得到的輸出其實就是每個通道對應的權重,把這些權重通過Scale乘法通道加權到原來的特征上(第一條路),這樣就完成了特征通道的權重分配。作者詳細解釋可以看這篇文章:專欄 | Momenta詳解ImageNet 2017奪冠架構SENet

九、能否讓固定大小的卷積核看到更大范圍的區域?-- Dilated convolution

標準的3×3卷積核只能看到對應區域3×3的大小,但是為了能讓卷積核看到更大的范圍,dilated conv使其成為了可能。dilated conv原論文中的結構如圖所示:

上圖b可以理解為卷積核大小依然是3×3,但是每個卷積點之間有1個空洞,也就是在綠色7×7區域里面,只有9個紅色點位置作了卷積處理,其余點權重為0。這樣即使卷積核大小不變,但它看到的區域變得更大了。詳細解釋可以看這個回答:如何理解空洞卷積(dilated convolution)?

十、卷積核形狀一定是矩形嗎?-- Deformable convolution 可變形卷積核

圖來自微軟亞洲研究院公眾號

傳統的卷積核一般都是長方形或正方形,但MSRA提出了一個相當反直覺的見解,認為卷積核的形狀可以是變化的,變形的卷積核能讓它只看感興趣的圖像區域 ,這樣識別出來的特征更佳。

圖來自微軟亞洲研究院公眾號

要做到這個操作,可以直接在原來的過濾器前面再加一層過濾器,這層過濾器學習的是下一層卷積核的位置偏移量(offset),這樣只是增加了一層過濾器,或者直接把原網絡中的某一層過濾器當成學習offset的過濾器,這樣實際增加的計算量是相當少的,但能實現可變形卷積核,識別特征的效果更好。詳細MSRA的解讀可以看這個鏈接:可變形卷積網絡:計算機新“視”界。

啟發與思考

現在越來越多的CNN模型從巨型網絡到輕量化網絡一步步演變,模型準確率也越來越高。現在工業界追求的重點已經不是準確率的提升(因為都已經很高了),都聚焦于速度與準確率的trade off,都希望模型又快又準。因此從原來AlexNet、VGGnet,到體積小一點的Inception、Resnet系列,到目前能移植到移動端的mobilenet、ShuffleNet(體積能降低到0.5mb!),我們可以看到這樣一些趨勢:

卷積核方面:

  1. 大卷積核用多個小卷積核代替;

  2. 單一尺寸卷積核用多尺寸卷積核代替;

  3. 固定形狀卷積核趨于使用可變形卷積核;

  4. 使用1×1卷積核(bottleneck結構)。

卷積層通道方面:

  1. 標準卷積用depthwise卷積代替;

  2. 使用分組卷積;

  3. 分組卷積前使用channel shuffle;

  4. 通道加權計算。

卷積層連接方面:

  1. 使用skip connection,讓模型更深;

  2. densely connection,使每一層都融合上其它層的特征輸出(DenseNet)

啟發

類比到通道加權操作,卷積層跨層連接能否也進行加權處理?bottleneck + Group conv + channel shuffle + depthwise的結合會不會成為以后降低參數量的標準配置?

如果你有更多的想法或意見,歡迎評論留言,好的idea值得交流傳播。本人的知乎號是:Professor ho—知乎 ,簡書上會發一些比較技術性的文章,如GPU降溫等,知乎上會發比較理論性的見解文章,歡迎關注。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,363評論 6 532
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,497評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,305評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,962評論 1 311
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,727評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,193評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,257評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,411評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,945評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,777評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,978評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,519評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,216評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,642評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,878評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,657評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,960評論 2 373

推薦閱讀更多精彩內容