變形卷積核、可分離卷積?卷積神經網絡中十大拍案叫絕的操作。

2020-12-01 雷鋒網

雷鋒網(公眾號:雷鋒網)按:本文作者Professor ho,原文載於其知乎主頁,雷鋒網獲其授權發布。

從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

EDIT:

關於這個問題,知乎用戶朋友 @蔡冠羽 提出了他的見解:

我感覺group conv本身應該就大大減少了參數,比如當input channel為256,output channel也為256,kernel size為3*3,不做group conv參數為256*3*3*256,若group為8,每個group的input channel和output channel均為32,參數為8*32*3*3*32,是原來的八分之一。這是我的理解。

我的理解是分組卷積最後每一組輸出的feature maps應該是以concatenate的方式組合,而不是element-wise add,所以每組輸出的channel是 input channels / #groups,這樣參數量就大大減少了。

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

AlexNet中用到了一些非常大的卷積核,比如11×11、5×5卷積核,之前人們的觀念是,卷積核越大,receptive field(感受野)越大,看到的圖片信息越多,因此獲得的特徵越好。雖說如此,但是大的卷積核會導致計算量的暴增,不利於模型深度的增加,計算性能也會降低。於是在VGG(最早使用)、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的團隊發現,如果僅僅引入多個尺寸的卷積核,會帶來大量的額外的參數,受到Network In Network中1×1卷積核的啟發,為了解決這個問題,他們往Inception結構中加入了一些1×1的卷積核,如圖所示:

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

根據上圖,我們來做個對比計算,假設輸入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的卷積層,最後經過一個1×1×256的卷積層,輸出256維,參數量為:256×1×1×64 + 64×3×3×64 + 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操作比標準的卷積操作降低不少的參數量,同時論文中指出這個模型得到了更好的分類效果。

EDIT:2017.08.25

本文在發出12小時後,一位知乎用戶私信了我,向我介紹了Depthwise和Pointwise的歷史工作,而Xception和Mobilenet也引用了他們16年的工作,就是Min Wang et al 的Factorized Convolutional Neural Networks,這篇論文的Depthwise中,每一通道輸出的feature map(稱為「基層」)可以不止一個,而Xception中的Depthwise separable Convolution, 正是這篇工作中「單一基層」的情況。推薦有興趣的讀者關注下他們的工作,這裡有篇介紹博文:【深度學習】卷積層提速Factorized Convolutional Neural Networks。而最早關於separable convolution的介紹,Xception作者提到,應該追溯到Lau- rent Sifre 2014年的工作 Rigid-Motion Scattering For Image Classification 6.2章節。

七、分組卷積能否對通道進行隨機分組?-- 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入選論文:通用卷積神經網絡交錯組卷積

要注意的是,Group conv是一種channel分組的方式,Depthwise +Pointwise是卷積的方式,只是ShuffleNet裡面把兩者應用起來了。因此Group conv和Depthwise +Pointwise並不能劃等號。

八、通道間的特徵都是平等的嗎? -- 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值得交流傳播。另外本人的簡書號是:人工智豪 - 簡書 ,簡書上會發一些比較技術性的文章,如GPU降溫等,知乎上會發比較理論性的見解文章,歡迎關注。

雷鋒網版權文章,未經授權禁止轉載。詳情見轉載須知。

相關焦點

  • 自動化所提出不規則卷積神經網絡
    在深度卷積神經網絡(CNN)中,卷積核是最基本和最重要的組件。研究人員給卷積核配置了形狀屬性以生成不規則卷積神經網絡(ICNN)。而這種情況在物體檢測和分割中更加明顯,因為這些任務的基本思想就是將不規則的目標從圖像中分離出來。由於卷積運算本質上是兩個向量的點積操作,即特徵模式和卷積核,那麼這兩個向量在理想狀態下應該具有相同的屬性,這樣才能獲得更加準確的響應。也就是說,卷積核應該跟輸入特徵模式一樣,也擁有不規則的形狀,這樣模型才能更好地提取最有價值的信息。而傳統卷積神經網絡的內核形狀通常是固定的,不能通過訓練來直接學習得到。
  • 淺析人工智慧的卷積神經網絡與圖像處理
    卷積神經網絡被廣泛地運用到計算機視覺中,用於提取圖像數據的特徵,其中發揮關鍵作用的步驟就是卷積層中的卷積運算。 卷積到底是什麼?深度學習中的卷積運算與傳統的信號與系統中的卷積算子有什麼不同?為什麼卷積運算可以提取圖像的特徵呢?下3分鐘帶你讀懂卷積運算與圖像處理。
  • CNN 中千奇百怪的卷積方式大匯總
    原標題:CNN 中千奇百怪的卷積方式大匯總 雷鋒網按:本文原作者Xf Mao,本文原載於知乎。雷鋒網已獲得作者授權。 推薦另一篇很好的總結:變形卷積核、可分離卷積?卷積神經網絡中十大拍案叫絕的操作。
  • 可分離卷積基本介紹
    不幸的是,空間可分離卷積具有一些顯著的局限性,這意味著它在深度學習中沒有被大量使用。 空間可分卷積之所以如此命名,是因為它主要處理圖像和卷積核(kernel)的空間維度:寬度和高度。 (另一個維度,「深度」維度,是每個圖像的通道數)。 空間可分離卷積簡單地將卷積核劃分為兩個較小的卷積核。
  • 梯度上升可視化卷積神經網絡
    不過這樣的方法是我們讓輸入的圖像儘量與卷積核希望看到的東西一樣,通過該層卷積核的損失和梯度進行上升補充,對輸入的原圖進行填充細節,最後得到可視化卷積核圖。可視化所有卷積核圖可視化卷積核是本例子最有趣的部分,也是筆者最喜歡的部分。通過分析CNN網絡模型中的卷積核,我們將會看到每一層卷積核到底提取的是什麼樣的內容、紋理、特徵。
  • 乾貨貼|CNN中常用的四種卷積
    卷積是深度學習中最重要的概念之一。深度學習超越了其他機器學習手段的核心就在於卷積和卷積神經網絡。這就很有必要了解常見的卷積: 一般卷積、 擴張卷積、轉置卷積、可分離卷積。
  • 從圖(Graph)到圖卷積(Graph Convolution):漫談圖神經網絡 (二)
    在從圖(Graph)到圖卷積(Graph Convolution): 漫談圖神經網絡 (一)中,我們簡單介紹了基於循環圖神經網絡的兩種重要模型,在本篇中,我們將著大量筆墨介紹圖卷積神經網絡中的卷積操作。接下來,我們將首先介紹一下圖卷積神經網絡的大概框架,藉此說明它與基於循環的圖神經網絡的區別。
  • 卷積神經網絡算法結構分析及其工作效率的影響因素
    從卷積神經網絡自身的角度考慮,其在卷積層之間採用了共享參數,使得計算過程中對於計算資源的佔用大大縮小,同時也在訓練參數方面實現了有效的簡化,提升了整體運算過程的效率。除此以外,此種計算方式幾乎不需要對圖像展開預處理或者特徵值提取操作,這也成為卷積神經網絡在圖像識別領域優於其他算法的顯著之處。
  • 卷積神經網絡的卷積到底是什麼
    卷積神經網絡是一種特殊的神經網絡結構,是自動駕駛汽車、人臉識別系統等計算機視覺應用的基礎,其中基本的矩陣乘法運算被卷積運算取代。Yann LeCun進一步研究了這個項目,最終在1998年發布了LeNet-5——第一個引入了我們今天在CNN仍然使用的一些基本概念的現代卷積神經網絡。他還發布了MNIST手寫數字數據集,這可能是機器學習中最著名的基準數據集。在20世紀90年代,計算機視覺領域轉移了它的焦點,許多研究人員停止了對CNN架構的研究。
  • 深度學習入門:淺析卷積神經網絡
    卷積神經網絡概述在了解卷積神經網絡之前,我們先簡單了解最基本的神經網絡。通過將這些層疊加起來,就可以構建一個完整的卷積神經網絡。因為卷積後面一般會跟著ReLU,因此在很多示意圖中常常將ReLU忽略。具體說來,卷積層和全連接層(CONV/FC)對輸入執行變換操作的時候,不僅會用到激活函數,還會用到很多參數,即神經元之間連接的權值矩陣W和偏差b;而激活函數和池化層則是進行一個固定不變的函數操作。
  • 斯坦福ICLR 2018錄用論文:高效稀疏Winograd卷積神經網絡| ICLR 2018
    引言卷積神經網絡在許多機器學習應用中體現出巨大優勢。其計算性能和功耗主要由卷積過程中乘法操作的數量決定。但卷積神經網絡的巨大計算量限制了其在行動裝置上的應用。目前有兩種主流方法用於減少卷積神經網絡中的乘法數量:1)利用卷積的線性代數性質,例如 Winograd 卷積算法可以通過神經元和卷積核的線性變換減少乘法數量;2)神經網絡壓縮,例如利用權重經過剪枝後的稀疏性和神經元由於 ReLU 產生的稀疏性。
  • 一文了解各種卷積結構原理及優劣
    這樣,可算出每個網絡層的參數量為I×O×K,其中K為卷積核的參數個數。例,某個網絡層有64個大小為3×3的卷積核,則對應K值為 3×3 =9。轉置卷積只是為了重建先前的空間解析度,執行了卷積操作。這不是卷積的數學逆過程,但是用於編碼器-解碼器結構中,效果仍然很好。這樣,轉置卷積可以同時實現圖像的粗粒化和卷積操作,而不是通過兩個單獨過程來完成。可分離卷積在可分離卷積(separable convolution)中,可將卷積核操作拆分成多個步驟。
  • 卷積神經網絡超詳細總結
    可以看作是卷積神經網絡的第一個實現網絡,神經認知機將一個視覺模式分解成許多子模式(特徵),然後進入分層遞階式相連的特徵平面進行處理,它試圖將視覺系統模型化,使其能夠在即使物體有位移或輕微變形的時候,也能完成識別。
  • 孫啟超:卷積神經網絡在人臉識別技術中的應用 | AI研習社第51期猿...
    隨著 iPhone X 的發布,Face ID 人臉識別技術開始進入人們的日常生活中,當我們拿起手機並看著它的時候就可以實現手機解鎖的功能。而人臉識別中的關鍵技術就是卷積神經網絡。近日,在雷鋒網 AI 研習社公開課上,法國蒙彼利埃大學孫啟超就講述了卷積神經網絡的基本原理以及人臉識別技術是如何運行的。
  • 萬字長文帶你看盡深度學習中的各種卷積網絡(上篇)
    雷鋒網 AI 科技評論按:深度學習中的各種卷積網絡大家知多少?對於那些聽說過卻又對它們沒有特別清晰的認識的小夥伴們,Kunlun Bai 這篇文章非常值得一讀。Kunlun Bai 是一位人工智慧、機器學習、物體學以及工程學領域的研究型科學家,在本文中,他詳細地介紹了 2D、3D、1x1 、轉置 、空洞(擴張)、空間可分離、深度可分離、扁平化、 分組等十多種卷積網絡類型。
  • 深度學習入門教程:手把手帶你用Numpy實現卷積神經網絡(一)
    參考上面的的網絡結構圖,它包含了卷積層(Convolutions),池化層(pooling), 全連接層(Full connection)。卷積層(Convolutions)卷積:如果你有圖像處理的基礎,對於卷積操作我想你一定不會陌生。在傳統的圖像處理中,卷積操作多用來進行濾波,銳化或者邊緣檢測啥的。
  • 人工智慧之卷積神經網絡(CNN)
    今天我們重點探討一下卷積神經網絡(CNN)算法。  而在卷積神經網絡CNN中(下面右圖),卷積層的神經元只與前一層的部分神經元節點相連,即它的神經元間的連接是非全連接的,且同一層中某些神經元之間的連接的權重w和偏移b是共享的,這樣大量地減少了需要訓練參數的數量。
  • 華人博士卷積網絡可視化項目火了:點滑鼠就能看懂的掃盲神器
    Convolutional Neural Network,中文譯為「卷積神經網絡」。這個常見但有些深奧的詞彙,只可意會,不能言傳。如果打開教材,會看到這樣一些解釋:卷積層是深度神經網絡在處理圖像時十分常用的一種層。當一個深度神經網絡以卷積層為主體時,我們也稱之為卷積神經網絡。
  • 基於PVANet卷積神經網絡模型的交通標誌識別算法
    而且, 異於傳統的人工設計特徵提取器, 卷積神經網絡目標物體檢測可自主學習視頻、圖像信息中的特徵, 從而檢測到更多類別以及更細分類的物體[2]。小目標檢測主要是對圖像或視頻中的標誌、行人或車輛等顯示尺寸較小的目標進行檢測, 在民用、軍事和安防等領域具有十分重要的作用[1]。
  • 圖像識別技術——卷積神經網絡CNN詳解
    前言卷積神經網絡不同於神經網絡,在圖片處理這方面有更好的表現。本文主要對神經網絡和卷積神經網絡做了簡要的對比,著重介紹了卷積神經網絡的層次基礎,同時也簡要介紹了卷積神經網絡參數更新方式和其優缺點,並結合具體實例對卷積神經網絡的工作方式做了介紹。