1. 程式人生 > >機器視覺:MobileNet 和 ShuffleNet

機器視覺:MobileNet 和 ShuffleNet

雖然很多CNN模型在影象識別領域取得了巨大的成功,但是一個越來越突出的問題就是模型的複雜度太高,無法在手機端使用,為了能在手機端將CNN模型跑起來,並且能取得不錯的效果,有很多研究人員做了很多有意義的探索和嘗試,今天就介紹兩個比較輕量級的模型 mobile net 和 shuffle net。

在介紹這幾個輕量型的網路之前,我們先來看看,為什麼卷積神經網路的運算功耗這麼大。

卷積神經網路,顧名思義,就是會有很多的卷積運算,而卷積神經網路中,最費時間的就是其中的卷積運算。我們知道,一張 h×w 的影象,與一個 k×k 的卷積核做卷積卷積運算,需要 h×w×k×k 這麼多次的運算,而 CNN 中,隨便一個卷積層, 都會有幾十甚至上百個 feature map, 假設卷積層

l1 含有 c1 個 feature map,即通道數為 c1, 每個 feature map 的大小為 h1×w1, 卷積核的大小為 k×k,假設 l2 的 feature map 大小與 l1 一樣,通道數為 c2l2 中每個 feature map 上的一個畫素點,都是由 l1 上的 feature map 與 卷積核做卷積運算得來的。這樣,總共需要的運算次數為:

h1×w1×k×k×c1×c2

Mobile-Net V1

為了減少運算量,Mobile-net V1 利用了 depth-wise 的概念,我們都知道 pooling 層的運作機理,input feature map 和 output feature map 是 一 一對應的,depth-wise convolution 也是類似的道理,做卷積的時候不再把 input feature map 進行線性組合了,而是採取一 一對應的方式,這樣卷積的運算次數就變成了:

h1×w1×k×k×c1

也就是說,我input 有 c1 個 feature map,卷積之後,還是有 c1 個 feature map,運算量減少了很多。

不過,也帶來一個問題,這樣卷積得到的 feature map 之間沒有任何資訊融合,這肯定不利於特徵提取的,所以在 depth-wise 卷積運算後面,會再接一個 1×1 的卷積運算,所以總的運算次數是:

h1×w1×k×k×c1+h×w×c2×c1

V1 主要的模組如下圖所示,就是利用 depth-wise 卷積替換了常規的卷積運算,為了讓得到的 feature map 進行資訊融合,後面又接了一個

1×1 的卷積。

這裡寫圖片描述

Mobile-Net V2

Mobile-Net V1 推出來之後,Google 又推出了 Mobile-Net V2,V2 在 residual-block 裡面做文章,利用 depth-wise convolution 和 1×1 的卷積,簡單來說,就是對 input feature map,先利用 1×1 進行通道擴充套件,這樣一擴充套件,可以增加通道數,提升卷積層特徵的表示能力,接著再利用 depth-wise convolution 做卷積運算,這樣不會增加太多的運算量,又能利用很多的通道,最後再做一個通道壓縮,一壓縮,往後傳的 feature map 的通道數並不會增加,論文中也給出了示意圖:

這裡寫圖片描述

Shuffle-Net

shuffle-net 這個網路模型,是利用了 group 卷積的概念,與 depth-wise 有點像,只不過,depth-wise 是 feature map 一 一對應的,而 group 卷積是將每個卷積層的 feature map 分成幾個組,每個組之間沒有交叉,不過組內的 feature map 做卷積的時候和常規的卷積運算是一樣的,所以 group 卷積的複雜度應該是介於常規卷積核 depth-wise 卷積之間的,shuffle-net 的創新之處在於,group 卷積之後,為了增加組與組之間的 feature map的通訊,提出了一個 shuffle channel 的技術,就是將 group 卷積之後 feature map 打亂,亂序連線到下一層,如下圖所示:

這裡寫圖片描述

通過 group 卷積,可以降低運算量,通過 channel shuffle,可以增加 feature map之間的資訊融合,所以 shuffle-net 也能在提升運算效率的同時,保持一定的特徵學習能力。論文也給出幾種不同的 block,

這裡寫圖片描述

上圖 (a) 是利用 depth-wise 卷積,(b) 和 (c) 都是 shuffle-net 的模組,不同的就是卷積的 stride 不同,所以最後的處理方式也不太一樣。

參考文獻
1: MobileNets: Efficient Convolutional Neural Networks for Mobile Vision
Applications
2: MobileNetV2: Inverted Residuals and Linear Bottlenecks
3: ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile
Devices