為了減少神經網路的計算消耗,論文提出Ghost模組來構建高效的網路結果。該模組將原始的卷積層分成兩部分,先使用更少的卷積核來生成少量內在特徵圖,然後通過簡單的線性變化操作來進一步高效地生成ghost特徵圖。從實驗來看,對比其它模型,GhostNet的壓縮效果最好,且準確率保持也很不錯,論文思想十分值得參考與學習

來源:曉飛的演算法工程筆記 公眾號

論文: GhostNet: More Features from Cheap Operations

  • 論文地址:https://arxiv.org/abs/1911.11907

Introduction


  目前,神經網路的研究趨向於移動裝置上的應用,一些研究著重於模型的壓縮方法,比如剪枝,量化,知識蒸餾等,另外一些則著重於高效的網路設計,比如MobileNet,ShuffleNet等

  訓練好的網路一般都有豐富甚至冗餘的特徵圖資訊來保證對輸入的理解,如圖1 ResNet-50的特徵圖,相似的特徵圖類似於對方的ghost。冗餘的特徵是網路的關鍵特性,論文認為與其避免冗餘特徵,不如以一種cost-efficient的方式接受,獲得很不錯的效能提升,論文主要有兩個貢獻:

  • 提出能用更少引數提取更多特徵的Ghost模組,首先使用輸出很少的原始卷積操作(非卷積層操作)進行輸出,再對輸出使用一系列簡單的線性操作來生成更多的特徵。這樣,不用改變其輸出的特徵圖,Ghost模組的整體的引數量和計算量就已經降低了
  • 基於Ghost模組提出GhostNet,將原始的卷積層替換為Ghost模組

Approach


Ghost Module for More Features

  對於輸入資料$X\in \mathbb{R}^{c\times h\times w}$,卷積層操作如公式1,$Y\in \mathbb{R}{h{'}\times w^{'}\times n}$為輸出的n維特徵圖,$f\in \mathbb{R}^{c\times k\times k\times n}$為該層的卷積核,可得該層的計算量為$n\cdot h^{'}\cdot w^{'}\cdot c\cdot k\cdot k$,這個數值通常成千上萬,因為$n$和$c$一般都很大。公式1的引數量與輸入和輸出的特徵圖數息息相關,而從圖1可以看出中間特徵圖存在大量冗餘,且存在相似的特徵(Ghost),所以完全沒必要佔用大量計算量來計算這些Ghost

  假設原輸出的特徵為某些內在特徵進行簡單的變換得到Ghost,通常這些內在特徵數量都很少,並且能通過原始卷積操作公式2獲得,$Y^{'}\in \mathbb{R}{h{'}\times w^{'}\times m}$為原始卷積輸出,$f^{'}\in \mathbb{R}^{c\times k\times k\times m}$為使用的卷積核,$m\le n$,bias直接簡化了

  為了獲得原來的$n$維特徵,對$Y{'}$的內在特徵分別使用一系列簡單線性操作來產生$s$維ghost特徵,$\Phi_{i,j}$為生成$y_i{'}$的$j$-th ghost特徵圖的線性變換函式,最後的$\Phi_{i,s}$為儲存內在特徵的identity mapping,整體計算如圖2b

  • Difference from Existing Methods

  與目前主流的卷積操作對比,Ghost模組有以下不同點:

  1. 對比Mobilenet、Squeezenet和Shufflenet中大量使用$1\times 1$ pointwise卷積,Ghost模組的原始卷積可以自定義卷積核數量
  2. 目前大多數方法都是先做pointwise卷積降維,再用depthwise卷積進行特徵提取,而Ghost則是先做原始卷積,再用簡單的線性變換來獲取更多特徵
  3. 目前的方法中處理每個特徵圖大都使用depthwise卷積或shift操作,而Ghost模組使用線性變換,可以有很大的多樣性
  4. Ghost模組同時使用identity mapping來保持原有特徵
  • Analysis on Complexities

  假設Ghost模組包含1個identity mapping和$m\cdot (s-1)=\frac{n}{s} \cdot (s-1)$個線性操作,每個線性操作的核大小為$d\times d$

  理論的加速比如公式4,而理論的壓縮比如公式5,讓$d\times d$與$k\times k$相似且$s\ll c$

Building Efficient CNNs

  • Ghost Bottlenecks

  Ghost Bottleneck(G-bneck)與residual block類似,主要由兩個Ghost模組堆疊二次,第一個模組用於增加特徵維度,增大的比例稱為expansion ration,而第二個模組則用於減少特徵維度,使其與shortcut一致。G-bneck包含stride=1和stride=2版本,對於stride=2,shortcut路徑使用下采樣層,並在Ghost模組中間插入stride=2的depthwise卷積。為了加速,Ghost模組的原始卷積均採用pointwise卷積

  • GhostNet

  基於Ghost bottleneck,GhostNet的結構如圖7所示,將MobileNetV3的bottleneck block替換成Ghost bottleneck,部分Ghost模組加入了SE模組

  • Width Multiplier

  儘管表7的結構已經很高效,但有些場景需要對模型進行調整,可以簡單地使用$\alpha$對每層的維度進行擴縮,$\alpha$稱為width multiplier,模型大小與計算量大約為$\alpha^2$倍

Experiments


Efficiency of Ghost Module

  • Toy Experiments

  論文對圖1的ghost pair進行了不同核大小的線性變化測試,將左圖作為輸出右圖作為輸入訓練depthwise卷積,然後使用訓練的結果對左圖進行變換,計算其變換後與右圖的MSE。可以看到,不同的核大小下差值都很小,說明線性變換是有效的,而且核大小的影響不大,所以用核固定為d的depthwise卷積來進行公式3計算

  • CIFAR-10

  將VGG的卷積層替換成Ghost模組進行超引數測試,表3的$s=2$,表4的$d=3$

  可以看到使用Ghost模組不僅比其它壓縮方法更能降低模型的體量,也最能保持模型準確率

  對Ghost模組產生的特徵進行了視覺化,儘管從內在特徵線性變換而來,但還是有明顯的差異,說明線性變換足夠靈活

  • Large Models on ImageNet

  在大型網路上使用Ghost模組,壓縮效果和準確率依然很不錯

GhostNet on Visual Benchmarks

  • ImageNet Classification

  使用$k=1$, $s=2$, $d=3$的GhostNet,結果如表7,不同的模型大小使用不同的$\alpha$值進行調整,整體而言,GhostNet最輕量且準確率最高

  • Object Detection

  在one-stage和two-stage檢測演算法上,GhostNet能降低大部分計算量,而mAP與其它主幹網路差不多

CONCLUSION


  為了減少神經網路的計算消耗,論文提出Ghost模組來構建高效的網路結果。該模組將原始的卷積層分成兩部分,先使用更少的卷積核來生成少量內在特徵圖,然後通過簡單的線性變化操作來進一步高效地生成ghost特徵圖。從實驗來看,對比其它模型,GhostNet的壓縮效果最好,且準確率保持也很不錯,論文思想十分值得參考與學習



如果本文對你有幫助,麻煩點個贊或在看唄~
更多內容請關注 微信公眾號【曉飛的演算法工程筆記】

相關文章