雖然不少CNN模型在圖像識別領域取得了巨大的成功,可是一個愈來愈突出的問題就是模型的複雜度過高,沒法在手機端使用,爲了能在手機端將CNN模型跑起來,而且能取得不錯的效果,有不少研究人員作了不少有意義的探索和嘗試,今天就介紹兩個比較輕量級的模型 mobile net 和 shuffle net。網絡
在介紹這幾個輕量型的網絡以前,咱們先來看看,爲何卷積神經網絡的運算功耗這麼大。ide
卷積神經網絡,顧名思義,就是會有不少的卷積運算,而卷積神經網絡中,最費時間的就是其中的卷積運算。咱們知道,一張 的圖像,與一個 的卷積核作卷積卷積運算,須要 這麼屢次的運算,而 CNN 中,隨便一個卷積層, 都會有幾十甚至上百個 feature map, 假設卷積層 含有 個 feature map,即通道數爲 , 每一個 feature map 的大小爲 , 卷積核的大小爲 ,假設 的 feature map 大小與 同樣,通道數爲 , 中每一個 feature map 上的一個像素點,都是由 上的 feature map 與 卷積核作卷積運算得來的。這樣,總共須要的運算次數爲:學習
爲了減小運算量,Mobile-net V1 利用了 depth-wise 的概念,咱們都知道 pooling 層的運做機理,input feature map 和 output feature map 是 一 一對應的,depth-wise convolution 也是相似的道理,作卷積的時候再也不把 input feature map 進行線性組合了,而是採起一 一對應的方式,這樣卷積的運算次數就變成了:spa
也就是說,我input 有 個 feature map,卷積以後,仍是有 個 feature map,運算量減小了不少。3d
不過,也帶來一個問題,這樣卷積獲得的 feature map 之間沒有任何信息融合,這確定不利於特徵提取的,因此在 depth-wise 卷積運算後面,會再接一個 的卷積運算,因此總的運算次數是:xml
V1 主要的模塊以下圖所示,就是利用 depth-wise 卷積替換了常規的卷積運算,爲了讓獲得的 feature map 進行信息融合,後面又接了一個 的卷積。blog
Mobile-Net V1 推出來以後,Google 又推出了 Mobile-Net V2,V2 在 residual-block 裏面作文章,利用 depth-wise convolution 和 的卷積,簡單來講,就是對 input feature map,先利用 進行通道擴展,這樣一擴展,能夠增長通道數,提高卷積層特徵的表示能力,接着再利用 depth-wise convolution 作卷積運算,這樣不會增長太多的運算量,又能利用不少的通道,最後再作一個通道壓縮,一壓縮,日後傳的 feature map 的通道數並不會增長,論文中也給出了示意圖:圖片
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 打亂,亂序鏈接到下一層,以下圖所示:ip
經過 group 卷積,能夠下降運算量,經過 channel shuffle,能夠增長 feature map之間的信息融合,因此 shuffle-net 也能在提高運算效率的同時,保持必定的特徵學習能力。論文也給出幾種不一樣的 block,ci
上圖 (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