機器視覺:MobileNet 和 ShuffleNet


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

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

卷積神經網絡,顧名思義,就是會有很多的卷積運算,而卷積神經網絡中,最費時間的就是其中的卷積運算。我們知道,一張 h × w 的圖像,與一個 k × k 的卷積核做卷積卷積運算,需要 h × w × k × k 這么多次的運算,而 CNN 中,隨便一個卷積層, 都會有幾十甚至上百個 feature map, 假設卷積層 l 1 含有 c 1 個 feature map,即通道數為 c 1 , 每個 feature map 的大小為 h 1 × w 1 , 卷積核的大小為 k × k ,假設 l 2 的 feature map 大小與 l 1 一樣,通道數為 c 2 l 2 中每個 feature map 上的一個像素點,都是由 l 1 上的 feature map 與 卷積核做卷積運算得來的。這樣,總共需要的運算次數為:

h 1 × w 1 × k × k × c 1 × c 2

Mobile-Net V1

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

h 1 × w 1 × k × k × c 1

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

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

h 1 × w 1 × k × k × c 1 + h × w × c 2 × c 1

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM