結構雖簡單,但效能強悍——3個小型卷積神經網路簡介

【方向】發表於2018-05-14

摘要: 本文介紹了三種小型結構的卷積神經網路,在降低計算複雜度的前提下,其效能也不錯。此外,無需使用高效能運算機就可以進行模擬,適合初學者模擬體驗。

       人工智慧、深度學習太火了,火到哪一個領域都有討論的聲音。稍微對深度學習有所瞭解的人們,尤其是對於計算機視覺領域有所涉獵的人們,當一聽到深度學習、卷積神經網路時,腦海裡不由得自動腦補這樣一幅畫面——一臺滿和負載嗡嗡響的GPU伺服器、一臺滿屏程式碼不斷跳躍的螢幕以及坐在電腦前不斷嘗試不同卷積神經網路模型的科研人員。這幅場景在各個實驗室不斷的重複出現,那是不是玩人工智慧和深度學習一定都是這樣呢?答案是不一定。雖然大多數卷積神經網路都是由於其大型結構而取得非常好的效能,但是這些模型對計算能力有比較高的要求。有些人員只想嘗試應用下卷積神經網路、體驗下效果,這個時候難道也得配一臺高效能運算的伺服器嗎?如果是這種情況的話,本文將告訴你三種卷積神經網路,這些卷積神經網路在你老的桌上型電腦(哪怕是沒有GPU)、甚至是你的手機上都能夠模擬執行,為你節省一大筆開銷,是不是很期待?下面一窺這三種卷積神經網路模型的結構及其效能分析。

MobileNet

MobileNet使用深度可分離卷積(depthwise separable Convolutions),這種卷積塊結構首先由Xception引入。深度可分離卷積由兩部分組成,分別為深度卷積(depthwise convolution)和逐點卷積(pointwise convolution)。

假設二維特徵圖(feature map)進行標準卷積操作,輸入特徵圖經過卷積操作後進行輸出,如圖所示,其計算複雜度為D2f∗M∗N∗D2kDf2∗M∗N∗Dk2。其中輸入特徵圖的維度為DfDf,MM和NN分別表示輸入通道數以及輸出通道數,DkDk是卷積核大小。

2509688-f279507d2dd179d0.png

 深度卷積在每個輸入通道上分別對映一個卷積。因此,其輸出通道數與輸入通道數相同,其計算成本是Df∗M∗DkDf∗M∗Dk。

2509688-80bec28c2d90ff0c.png

   最後的操作是逐點卷積。它是1×1核心大小的卷積,它將由深度卷積建立的特徵簡單地結合起來,其計算成本是M∗N∗DfM∗N∗Df。

2509688-c00617820ea4b48b.png

深度可分離卷積的計算代價是由深度卷積和逐點卷積兩部分代價組成。與一般的卷積操作相比,深度可分離卷積降低了原始計算複雜度的(1/N+1/D2k)(1/N+1/Dk2)。假設卷積核大小為3x3,則模擬運算量降低了8倍。

       MobileNet同時也提供了兩個引數以允許進一步減少運算量。其中一個引數為瘦身乘子(width multiplier)其取值範圍為0~1,用來減少網路的通道數,每一層減少alpha∗Nalpha∗N個通道,該引數能被用來權衡模型效能與模擬等待時間。另外一個引數為解析度乘子(resolution multiplier),該引數將縮放輸入影像的尺寸,尺寸範圍為224~128之間。由於MobileNet使用全域性平均池化代替全連線,你可以使用224x22$影像訓練該網路,並將訓練好的的網路應用於128x128大小的影像上!

ShuffleNet

ShuffleNet原創了三種混洗單元(Shuffle unit),如下圖所示每個單元都是由逐群卷積(pointwise group convolution)和通道混洗(channel shuffle)組成。

2509688-c2521ef2d0417611.png

     一個組卷積包含幾個卷積,每一組獲取部分輸入通道。下圖是一個組卷積過程,有3組,每一組有3個輸入通道。

2509688-3e9157bafccdbe07.png

 這種結構極大的降低了計算代價。假設,如果有4個輸入通道和8個輸出通道,從中選擇2組,每組有2個輸入通道和4個輸出通道。當只有一組時,其計算代價為D2f∗D2k∗4∗8Df2∗Dk2∗4∗8;當有2組時,其計算代價為D2f∗D2k∗2∗4Df2∗Dk2∗2∗4或者D2f∗D2k∗4∗4Df2∗Dk2∗4∗4。至少是減少了2倍的計算代價。在作者的文章中,當組數為8時取得了最好的結果,因此降低計算量是非常重要的。

EffNet

EffNet為空間可分離卷積(spatial separable convolutions),這與MobileNet的深度可分離卷積非常相似。

2509688-abd8071c4d9826aa.png

   如圖所示,可分離深度卷積以藍色矩形塊表示,它是由一個行核心(1x3)、可分類池化以及列核心(3x1)的深度卷積組成。

       正常深度為3x3的卷積核的計算代價為32∗D2f∗M32∗Df2∗M。第一個深度為1x3卷積核的計算代價為3∗D2f∗M3∗Df2∗M,可分離池化操作將特徵圖高度減半,具有邊際成本。第二個深度為3x1的卷積核的計算代價為3∗D2f/2∗M3∗Df2/2∗M。這樣一來,總的計算代價為1.5∗(3∗D2f∗M)1.5∗(3∗Df2∗M),是原先的一半!

       此外,EffNet相較於MobileNet和ShuffleNet的一個優化操作是在開始時沒有“標準卷積”。

2509688-b00a78c9f4b8284b.png

MobileNet和ShuffleNet都避免更換第一層,因為它們覺得該層的計算量已經很小了。雖然我尊重這種說法,但我認為每一個優化都是重要的。在優化了網路的其它層之後,第一層適當地變大。實驗結果表明,用EffNet塊替換第一層後,降低了每個層計算量的30%。

總結

       MobileNet、ShuffleNet以及EffNet這三種卷積神經網路結構都是通過優化計算量構想出來的。每個都用自己的版本取代了經典卷積結構。

MobileNetGithub)深度可分離卷積使用一個深度卷積與逐點卷積結構,此外,引入了兩超引數,分別為瘦身乘子和解析度乘子,都是用來減少特徵對映空間的維數。

ShuffleNetGithub)每組採用逐點卷積,為了結合每個組所產生的特徵,引入了混洗層(shuffle layer)。

EffNetGithub)使用空間可分離卷積,只是一個簡單的深度卷積被分為沿著X軸和Y軸,二者中間有一個池化層。

2509688-d7ec96b2c330e789.png

作者資訊

Arthur Douillard,深度學習工程師

本文由阿里云云棲社群組織翻譯。

文章原標題《3 Small But Powerful Convolutional Networks》,譯者:海棠,審校:Uncle_LLD

原文連結

本文為雲棲社群原創內容,未經允許不得轉載。

相關文章