GhostNet: More Features from Cheap Operations

GhostNet: More Features from Cheap Operations

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


Ghost Module

設輸入爲 XRc×h×wX\in \mathbb{R}^{c\times h\times w},其中cc是輸入通道數,hhww分別是高和寬。卷積層可表述爲:
Y=Xf+b Y=X*f+b 其中,*是卷積操作,bb是偏置項,YRh×w×nY\in \mathbb{R}^{h'\times w'\times n}是輸出的nn維feature map,fRc×k×k×nf\in \mathbb{R}^{c\times k\times k\times n}是卷積核。
這個卷積過程中,FLOPs可以用nhwckkn\cdot h'\cdot w'\cdot c\cdot k\cdot k來計算。這個數字往往非常巨大。然而,生成的feature map具有冗餘性,因此,如果要得到相同的feature map,完全可以通過卷積生成一部分intrinsic feature map,另一部分通過對intrinsic feature map進行cheap transform得到。這樣就可以縮減運算量。

利用
Y=Xf Y=X*f 生成了mm個通道的intrinsic feature map YRh×w×mY'\in \mathbb{R}^{h'\times w'\times m}mnm\le n,偏置項爲了簡化而略去了。

爲了得到nn個通道的feature map,對intrinsic feature map進行一系列線性運算:
yij=ϕi,j(yi), i=1,,m, j=1,,s y_{ij}=\phi _{i,j}\left( y_i' \right) ,\ \forall i=1,\cdots ,m,\ j=1,\cdots ,s 其中,yiy_i'是intrinsic feature map中的第ii個map,ϕi,j\phi _{i,j}yiy_i'生成第jj個ghost feature map的線性運算,也就是說,每個yiy_i'可以生成ss個ghost feature map {yij}j=1s\left\{ y_{ij} \right\} _{j=1}^{s};而ϕi,s\phi _{i,s}是恆等映射,將intrinsic feature map保留至最終輸出的feature map中。

由此得到了n=msn=m\cdot s 維的feature map Y=[y11,y12,,yms]Y=\left[ y_{11},y_{12},\cdots ,y_{ms} \right],作爲Ghost module的輸出。

在這裏插入圖片描述

與現有方法的不同

  1. 現有方法(MobileNet、SqueezeNetShuffleNet等)廣泛使用1×11 \times 1點卷積;而Ghost module可以自定義卷積核大小
  2. 現有方法大都是先用pointwise卷積降維、再用depthwise卷積進行特徵提取;而Ghost module則是先做原始卷積獲得 intrinsic feature map,再用簡單的線性變換來獲取更多feature map
  3. 現有方法中處理每個特徵圖大都使用depthwise卷積或shift操作;而Ghost module使用線性變換,可以有很大的多樣性
  4. Ghost module中利用恆等映射與線性變換來保留intrinsic feature map

複雜度分析

由於有1次恆等映射,因此有m(s1)=ns(s1)m\cdot \left( s-1 \right) =\frac{n}{s}\cdot \left( s-1 \right)次線性運算,每個線性運算核大小平均爲d×dd \times d。加速比可以計算爲:

rs=nhwckknshwckk+(s1)nshwdd=ckk1sckk+s1sddscs+c1s r_s=\frac{n\cdot h'\cdot w'\cdot c\cdot k\cdot k}{\frac{n}{s}\cdot h'\cdot w'\cdot c\cdot k\cdot k+\left( s-1 \right) \cdot \frac{n}{s}\cdot h'\cdot w'\cdot d\cdot d}\\ =\frac{c\cdot k\cdot k}{\frac{1}{s}\cdot c\cdot k\cdot k+\frac{s-1}{s}\cdot d\cdot d}\approx \frac{s\cdot c}{s+c-1}\approx s 其中,d×dd \times dk×kk \times k的量級相似,而scs\ll c

類似地,壓縮比可以計算爲:
rc=nckknsckk+s1sddscs+c1s r_c=\frac{n\cdot c\cdot k\cdot k}{\frac{n}{s}\cdot c\cdot k\cdot k+\frac{s-1}{s}\cdot d\cdot d}\approx \frac{s\cdot c}{s+c-1}\approx s


Ghost bottlenect (G-bneck)

如圖,Ghost bottleneck和ResNet中的residual block相似:
在這裏插入圖片描述

  • G-bneck中包含2個Ghost module。第一個充當了expansion layer,用於擴張通道數;第二個則縮減通道數,以此和shortcut path相匹配。
  • 每一層都使用了batch normalization
  • 每層的激活函數都是ReLU(除了第二個Ghost module之後的層不用【具體原因參考MobileNetV2】)
  • stride=2stride=2時,shortcut path通過降採樣層實現,而兩個Ghost module之間還添加了一個stride=2stride=2的深度卷積層
  • 實踐中,爲了提高效率,Ghost module中所有“基礎卷積”都是點卷積

GhostNet

將MobileNetV3中的bottleneck block替換成G-bneck,搭建了GhostNet:
在這裏插入圖片描述

  • 第1層是標準的卷積層,卷積核有16個
  • 根據G-bneck的輸入feature map大小,將網絡分爲若干組
  • 每組最後一個G-bneck的 stride=2stride=2,其餘 stride=1stride=1
  • 最終使用global average pooling,並通過卷積層,將feature map映射爲1280維的feature vector,用於分類問題
  • 某些G-bneck中使用了squeeze and excite (SE) module
  • 和MoileNetV3不同,沒有使用hard-swish,因爲其時延過大

實驗

在這裏插入圖片描述

首先進行一個驗證性實驗,觀察原始feature map和生成的ghost feature map之間的重構誤差。

以圖1中的3對feature map爲例,ResNet50第一個殘差塊提取出的特徵,把左邊的作爲輸入,右邊的作爲輸出,用深度卷積學習映射關係(這是一個線性的關係),深度卷積大小爲dddd取不同值時,MSE值爲:
在這裏插入圖片描述
由表可知,MSE值很小,也就是說,feature map之間確實存在着很強的關聯性,feature map存在着冗餘性。


參考資料:

CVPR2020 | GhostNet:超越MobileNetV3!使用簡單的線性變換生成特徵圖的輕量級網絡

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章