GhostNet论文
論文地址:https://arxiv.org/abs/1911.11907
源碼:huawei-noah/ghostnet
0. 摘要
基于大型卷積網(wǎng)絡(luò)參數(shù)量巨大,無(wú)法有效應(yīng)用在嵌入式設(shè)備上,本文提出一種叫做幻影模塊(Ghost module)的結(jié)構(gòu),可以通過(guò)更少的運(yùn)算量獲得更多的特征參數(shù)。基于原始的輸入特征圖,通過(guò)一系列線性變換將初次卷積得到的特征圖的層數(shù)擴(kuò)大,從而以較少的計(jì)算量獲得與常規(guī)方法相似信息的特征輸出。該模塊可以即插即用,堆疊該模塊可以獲得Ghost bottlenecks,進(jìn)而得到輕量級(jí)的神經(jīng)網(wǎng)絡(luò)GhostNet。在ImageNet分類任務(wù),GhostNet在相似計(jì)算量情況下Top-1正確率達(dá)75.7%,高于MobileNetV3的75.2%。
1. 引言
深度卷積神經(jīng)網(wǎng)絡(luò)已經(jīng)在多種計(jì)算機(jī)視覺(jué)問(wèn)題上取得了很好的表現(xiàn)。傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)通常包含巨大數(shù)量的參數(shù)和浮點(diǎn)運(yùn)算量(FLOPs),例如,對(duì)于尺寸為224的輸入圖片,ResNet50包含25.6M參數(shù)和4.1B的FLOPs。因此,最近卷積神經(jīng)網(wǎng)絡(luò)的設(shè)計(jì)更傾向于分布式或更有效的網(wǎng)絡(luò)結(jié)構(gòu),以便在移動(dòng)設(shè)備上取得良好的表現(xiàn)。
另外,作者發(fā)現(xiàn)傳統(tǒng)神經(jīng)網(wǎng)絡(luò)通常會(huì)產(chǎn)生大量甚至冗余的特征數(shù)量。例如,圖中展示了ResNet50的部分特征圖,可以發(fā)現(xiàn)其中一些特征圖極為相似:
圖 1. ResNet-50 中第一個(gè)殘差組生成的一些特征圖的可視化,其中三個(gè)相似的特征圖對(duì)示例用相同顏色的框進(jìn)行注釋。 這對(duì)中的一個(gè)特征圖可以通過(guò)廉價(jià)操作(用扳手表示)轉(zhuǎn)換另一個(gè)特征圖來(lái)近似獲得。
本文提出Ghost module,使用少量參數(shù)產(chǎn)生更多的特征。常規(guī)深度神經(jīng)網(wǎng)絡(luò)中的一個(gè)卷積層可以被分成兩部分。首先是常規(guī)的卷積操作,但嚴(yán)格控制卷積的輸出層數(shù);第二步是一系列的簡(jiǎn)單線性操作,用第一步產(chǎn)生的特征圖產(chǎn)生更多的特征圖,相比通常的卷積,在產(chǎn)生相同特征數(shù)量的結(jié)果下,減少了相當(dāng)多的計(jì)算量。
基于Ghost module,作者提出GhostNet,并且通過(guò)實(shí)驗(yàn)驗(yàn)證,GhostNet可以在減少計(jì)算量和復(fù)雜度的情況下取得和當(dāng)前最先進(jìn)的模型相似的精度,并且超越MobileNet v3在移動(dòng)設(shè)備上進(jìn)行快速運(yùn)行。
2. 提出的方法
2.1 Ghost module
深度CNN通常引用由大量卷積組成,導(dǎo)致大量的計(jì)算成本。盡管最近的工作,例如MobileNet和ShuffleNet引入了深度卷積(Depth Conv)或混洗操作(Channel Shuffle),以使用較小的卷積核(浮點(diǎn)運(yùn)算)來(lái)構(gòu)建有效的CNN,但其余 1×1 卷積層仍將占用大量?jī)?nèi)存和FLOPs。
鑒于主流CNN計(jì)算出的中間特征圖中存在大量的冗余(如圖1所示),作者提出減少所需的資源,即用于生成它們的卷積核。實(shí)際上,給定輸入數(shù)據(jù) X∈Rc×h×wX \in \mathbb{R}^{c\times h \times w}X∈Rc×h×w ,用于生成 nnn 個(gè)特征圖的任意卷積層的運(yùn)算可表示為:
Y=X?f+bY = X * f + b Y=X?f+b
其中 ?*? 是卷積運(yùn)算, bbb 是偏差項(xiàng), Y∈Rh′×w′×nY \in \mathbb{R}^{h' \times w' \times n}Y∈Rh′×w′×n 是具有 nnn個(gè)通道的輸出特征圖,f∈Rc×k×k×nf \in \mathbb{R}^{c \times k \times k \times n}f∈Rc×k×k×n是這一層中的卷積核。另外, h′h'h′ 和 w′w'w′ 分別是輸出數(shù)據(jù)的高度和寬度,k×kk \times kk×k 分別是卷積核 fff 的內(nèi)核大小。在此卷積過(guò)程中,由于卷積核數(shù)量 nnn 和通道數(shù) ccc 通常非常大(例如256或512),所需的FLOPs數(shù)量達(dá) n?h′?w′?c?k?kn \cdot h' \cdot w' \cdot c \cdot k \cdot kn?h′?w′?c?k?k 之多。
根據(jù)上述公式,要優(yōu)化的參數(shù)數(shù)量(fff 和 bbb 中的參數(shù))由輸入和輸出特征圖的尺寸確定。如圖1中所觀察到的,卷積層的輸出特征圖通常包含很多冗余,并且其中一些可能彼此相似。作者指出,沒(méi)有必要使用大量的FLOP和參數(shù)一一生成這些冗余特征圖,而是說(shuō),輸出特征圖是少數(shù)原始特征圖通過(guò)一些廉價(jià)轉(zhuǎn)換的“幻影”。這些原始特征圖通常具有較小的大小,并由普通的卷積核生成。具體來(lái)說(shuō), mmm 個(gè)原始特征圖 Y′∈Rh′×w′×mY' \in \mathbb{R}^{h' \times w' \times m}Y′∈Rh′×w′×m 是使用一次卷積生成的:
Y′=X?f′Y' = X * f' Y′=X?f′
其中 f′∈Rc×k×k×mf' \in \mathbb{R}^{c \times k \times k \times m}f′∈Rc×k×k×m 是使用的卷積核,m≤nm \le nm≤n,為簡(jiǎn)單起見(jiàn),這里省略了偏差項(xiàng)。超參數(shù)(例如卷積核大小,stride,padding)與普通卷積中的超參數(shù)相同,以保持輸出特征圖的空間大小(即 h′h'h′ 和 w′w'w′ )保持一致。為了進(jìn)一步獲得所需的 nnn 個(gè)特征圖,作者提出對(duì)Y′Y'Y′ 中的每個(gè)原始特征應(yīng)用一系列廉價(jià)的線性運(yùn)算,以生成 sss 個(gè)幻影特征圖:
yij=Φij(yi′)y_{ij} = \Phi_{ij}(y'_i) \\ yij?=Φij?(yi′?)
i=1,2,...,mj=1,2,...,si = 1, 2, ..., m \\ j = 1, 2, ..., s i=1,2,...,mj=1,2,...,s
其中 y′y'y′ 是 Y′Y'Y′ 中第 iii 個(gè)原始特征圖,上述函數(shù)中的 Φij\Phi_{ij}Φij? 是第 jjj 個(gè)線性運(yùn)算,用于生成第 jjj 個(gè)幻影特征圖 yijy_{ij}yij?,也就是說(shuō), y′y'y′ 可以具有一個(gè)或多個(gè)幻影特征圖 {yij}j=1s\{y_{ij}\}^s_{j=1}{yij?}j=1s? 。最后的 Φis\Phi_{is}Φis? 是用于保留原始特征圖的恒等映射,如圖2(b)所示。
通過(guò)使用廉價(jià)操作,我們可以獲得 n=m×sn=m\times sn=m×s 個(gè)特征圖 Y=[y11,y12,...,yms]Y = [y_{11}, y_{12}, ..., y_{ms}]Y=[y11?,y12?,...,yms?] 作為Ghost module的輸出數(shù)據(jù)。
注意,線性運(yùn)算 Φ\PhiΦ 在每個(gè)通道上運(yùn)行,其計(jì)算量比普通卷積少得多。實(shí)際上,Ghost module中可能有幾種不同的線性運(yùn)算,例如3×33\times 33×3 和 5×55 \times 55×5 線性內(nèi)核,將在實(shí)驗(yàn)部分進(jìn)行分析。
2.2 復(fù)雜度分析
Ghost module具有一個(gè)恒等映射和 m×(s?1)=ns×(s?1)m \times (s - 1) = \frac{n}{s} \times (s - 1)m×(s?1)=sn?×(s?1) 個(gè)線性運(yùn)算,并且每個(gè)線性運(yùn)算的平均內(nèi)核大小為 d×dd\times dd×d。理想情況下,n×(s?1)n \times (s-1)n×(s?1) 個(gè)線性運(yùn)算可以具有不同的形狀和參數(shù),但是特別是考慮到CPU或GPU的實(shí)用性,在線推理會(huì)受到阻礙。因此,作者建議在一個(gè)Ghost模塊中采用相同大小的線性運(yùn)算(例如全 3×33 \times 33×3 或全 5×55 \times 55×5 )以高效實(shí)現(xiàn)Ghost module。使用Ghost module升級(jí)普通卷積的理論加速比為:
rs=n×h′×w′×c×k×kns×h′×w′×c×k×k+(s?1)×ns×h′×w′×d×d=c×k×k1s×c×k×k+s?1s×d×d≈s×cs+c?1≈s\begin{aligned} r_s & = \frac{n \times h' \times w' \times c \times k \times k}{\frac{n}{s} \times h' \times w' \times c \times k \times k + (s - 1) \times \frac{n}{s} \times h' \times w' \times d \times d} \\ & = \frac{c \times k \times k}{\frac{1}{s} \times c \times k \times k + \frac{s-1}{s} \times d \times d} \\ & \approx \frac{s \times c}{s + c-1}\\ & \approx s \end{aligned} rs??=sn?×h′×w′×c×k×k+(s?1)×sn?×h′×w′×d×dn×h′×w′×c×k×k?=s1?×c×k×k+ss?1?×d×dc×k×k?≈s+c?1s×c?≈s?
其中 d×dd \times dd×d 的幅度與 k×kk \times kk×k 相似,并且 s<<cs << cs<<c。
同樣,參數(shù)壓縮比可以計(jì)算為:
rs=n×c×k×kns×c×k×k+(s?1)×ns×d×d≈s×cs+c?1≈s\begin{aligned} r_s & = \frac{n \times c \times k \times k}{\frac{n}{s} \times c \times k \times k + (s - 1) \times \frac{n}{s} \times d \times d}\\ & \approx \frac{s \times c}{s + c-1}\\ & \approx s \end{aligned} rs??=sn?×c×k×k+(s?1)×sn?×d×dn×c×k×k?≈s+c?1s×c?≈s?
它大約等于加速比。
2.3 構(gòu)建Ghost Net
2.3.1 Ghost Bottleneck
作者利用Ghost module制作了專門為小型CNN設(shè)計(jì)的Ghost bottleneck(G-bneck),如下圖所示。
圖 3. Ghost 瓶頸。 左:stride=1 的幽靈瓶頸; 右圖:stride=2 的幽靈瓶頸。
Ghost bottleneck類似于ResNet中的基本殘差塊(Basic Residual Block),其中集成了多個(gè)卷積層和shortcut。Ghost bottleneck主要由兩個(gè)堆疊的Ghost module組成。第一個(gè)Ghost module用作擴(kuò)展層,增加了通道數(shù)。這里將輸出通道數(shù)與輸入通道數(shù)之比稱為expansion ratio。第二個(gè)Ghost模塊減少通道數(shù),與shortcut路徑匹配。然后,使用shortcut連接這兩個(gè)Ghost module的輸入和輸出。這里借鑒了MobileNet-v2,第二個(gè)Ghost module之后不使用ReLU,其他層在每層之后都應(yīng)用了批量歸一化(BN)和ReLU非線性激活。上述Ghost bottleneck適用于stride= 1,對(duì)于stride = 2的情況,shortcut路徑由下采樣層和stride = 2的深度卷積(Depthwise Convolution)來(lái)實(shí)現(xiàn)。出于效率考慮,Ghost module中的初始卷積是點(diǎn)卷積(Pointwise Convolution)。
2.3.2 GhostNet
基于Ghost bottleneck,作者提出GhostNet,如下表所示。作者遵循MobileNet-v3的基本體系結(jié)構(gòu),然后使用Ghost bottleneck替換MobileNet-v3中的bottleneck。GhostNet主要由一系列Ghost bottleneck組成,其中Ghost bottleneck以Ghost module為構(gòu)建基礎(chǔ)。第一層是具有16個(gè)卷積核的標(biāo)準(zhǔn)卷積層,然后是一系列Ghost bottleneck,通道逐漸增加。這些Ghost bottleneck根據(jù)其輸入特征圖的大小分為不同的階段。除了每個(gè)階段的最后一個(gè)Ghost bottleneck是stride = 2,其他所有Ghost bottleneck都是stride = 1。最后,利用全局平均池化和卷積層將特征圖轉(zhuǎn)換為1280維特征向量以進(jìn)行最終分類。SE模塊也用在了某些Ghost bottleneck中的殘留層,如下表所示。
表 1. GhostNet 的整體架構(gòu)。 G-bneck 表示 Ghost 瓶頸。 #exp 表示擴(kuò)展大小。 #out 表示輸出通道的數(shù)量。 SE 表示是否使用 SE 模塊。
與MobileNet-v3不同的是,這里用ReLU換掉了Hard-swish激活函數(shù)。盡管進(jìn)一步的超參數(shù)調(diào)整等方法將進(jìn)一步GhostNet的性能,但上表所提供的架構(gòu)提供了一個(gè)基本設(shè)計(jì)參考。
3. 實(shí)驗(yàn)
3.1 超參數(shù)分析
Ghost module中含有兩個(gè)超參數(shù) sss 和 ddd,其中 sss 用于生成 m=nsm = \frac{n}{s}m=sn? 個(gè)內(nèi)在特征圖,ddd 用于生成幻影特征圖的卷積核大小(使用 ddd 深度卷積)。作者測(cè)試了這兩個(gè)超參數(shù)的影響。
首先,作者固定 s=2s=2s=2 在 d∈{1,3,5,7}d\in\{1, 3, 5, 7\}d∈{1,3,5,7} 范圍中調(diào)整 ddd,并在下表中列出CIFAR-10驗(yàn)證集上的結(jié)果。可以看到,當(dāng) d=3d=3d=3 時(shí)的Ghost module的性能優(yōu)于其他的Ghost module。這是因?yàn)榇笮?1×11 \times 11×1 的內(nèi)核無(wú)法在特征圖上引入空間信息,而較大的內(nèi)核(例如 d=5→5×5d=5 \rightarrow 5 \times 5d=5→5×5 或 d=7→7×7d=7 \rightarrow 7 \times 7d=7→7×7)會(huì)導(dǎo)致過(guò)擬合和更多計(jì)算量。因此,在以下實(shí)驗(yàn)中作者采用 d=3d=3d=3 來(lái)提高有效性和效率。
在研究了內(nèi)核大小的影響之后,作者固定 d=3d=3d=3 并在 s∈{2,3,4,5}s \in \{2, 3, 4, 5 \}s∈{2,3,4,5} 的范圍內(nèi)調(diào)整超參數(shù) sss。實(shí)際上,sss 與所得網(wǎng)絡(luò)的計(jì)算成本直接相關(guān),即較大的 sss 導(dǎo)致較大的壓縮率和加速比。結(jié)果如下表所示。
從表中的結(jié)果可以看出,當(dāng)作者增加 sss 時(shí),FLOP顯著減少,并且準(zhǔn)確性逐漸降低,這是在預(yù)期之內(nèi)的。特別地,當(dāng) s=2s=2s=2,也就是將VGG-16壓縮 2×2\times2× 時(shí),Ghost module的性能甚至比原始模型稍好,表明了本文所提出的Ghost module的優(yōu)越性。
作者將Ghost module用在VGG-16和ResNet-56框架上,然后和幾個(gè)代表性的最新模型進(jìn)行了比較。如下表所示。
表 5. 在 CIFAR-10 上壓縮 VGG-16 和 ResNet-56 的最先進(jìn)方法的比較。 - 表示沒(méi)有可用的報(bào)告結(jié)果。
Ghost-VGG-16 (s=2s=2s=2)以最高的性能(93.7%)勝過(guò)競(jìng)爭(zhēng)對(duì)手,但FLOPs明顯減少。 對(duì)于已經(jīng)比VGG-16小得多的ResNet-56,基于Ghost模塊的模型可以將計(jì)算量降低一半時(shí)獲得可比的精度,還可以看到,其他具有相似或更大計(jì)算成本的最新壓縮模型方法所獲得的準(zhǔn)確性低于Ghost模型。
3.2 特征圖可視化
作者還可視化了Ghost模塊的特征圖,如下圖所示。
圖 4. Ghost-VGG-16 第 2 層的特征圖。 左上圖是輸入,左邊紅框中的特征圖來(lái)自初級(jí)卷積,右邊綠框中的特征圖是深度變換后的。
上圖展示了Ghost-VGG-16的第二層特征,左上方的圖像是輸入,左紅色框中的特征圖來(lái)自初始卷積,而右綠色框中的特征圖是經(jīng)過(guò)深度卷積后的幻影特征圖。盡管生成的特征圖來(lái)自原始特征圖,但它們之間確實(shí)存在顯著差異,這意味著生成的特征足夠靈活,可以滿足特定任務(wù)的需求。
與之對(duì)比的還有原始VGG-16第二層卷積生成的特征圖如下:
3.3 大型模型實(shí)驗(yàn)
作者在ImageNet數(shù)據(jù)集上對(duì)Ghost module的性能進(jìn)行了實(shí)驗(yàn),并和目前最先進(jìn)的模型進(jìn)行了比較。
可以看到,對(duì)比ResNet-50,Ghost-ResNet-50 (s=2s=2s=2)相比s=4s=4s=4效果要好,Top-1準(zhǔn)確率高達(dá)75.0%,但二者的FLOPs和Weights不在一個(gè)數(shù)量級(jí)。
- Ghost-ResNet-50 (s=2s=2s=2)上方即為同一數(shù)量級(jí),對(duì)比其他對(duì)ResNet-50壓縮的策略,Ghost-ResNet-50 (s=2s=2s=2)有最低的FLOPs和最高的準(zhǔn)確率。
- Ghost-ResNet-50 (s=4s=4s=4)上方即為同一數(shù)量級(jí),對(duì)比其他對(duì)ResNet-50壓縮的策略,Ghost-ResNet-50 (s=4s=4s=4)在持有最高準(zhǔn)確率的同時(shí),模型的參數(shù)和FLOPs也是比較低的。
4. GhostNet性能
4.1 ImageNet分類數(shù)據(jù)集
為了驗(yàn)證所提出的 GhostNet 的優(yōu)越性,我們對(duì) ImageNet 分類任務(wù)進(jìn)行了實(shí)驗(yàn)。 我們遵循 ShuffleNet 中使用的大部分訓(xùn)練設(shè)置,除了在 8 個(gè) GPU 上批量大小為 1,024 時(shí)初始學(xué)習(xí)率設(shè)置為 0.4。 所有結(jié)果均在 ImageNet 驗(yàn)證集上以單crop top-1 性能報(bào)告。 對(duì)于 GhostNet,為簡(jiǎn)單起見(jiàn),我們?cè)谥骶矸e中設(shè)置內(nèi)核大小 k=1k = 1k=1,在所有 Ghost 模塊中設(shè)置 s=2s = 2s=2 和 d=3d = 3d=3。
選擇了幾個(gè)現(xiàn)代小型網(wǎng)絡(luò)架構(gòu)作為競(jìng)爭(zhēng)對(duì)手,包括 MobileNet 系列,ShuffleNet 系列,ProxylessNAS,FBNet,MnasNet 等。結(jié)果總結(jié)在表 7 中。模型分為通常用于移動(dòng)應(yīng)用程序的三個(gè)計(jì)算復(fù)雜度級(jí)別,即 ~ 50、~ 150 和 200-300 MFLOPs。 從結(jié)果中,我們可以看到,通常較大的 FLOP 會(huì)導(dǎo)致這些小型網(wǎng)絡(luò)的準(zhǔn)確性更高,這表明了它們的有效性。 我們的 GhostNet 在各種計(jì)算復(fù)雜度級(jí)別上始終優(yōu)于其他競(jìng)爭(zhēng)對(duì)手,因?yàn)?GhostNet 在利用計(jì)算資源生成特征圖方面更有效。
啟發(fā):
- 通過(guò)拉寬網(wǎng)絡(luò)進(jìn)而提升其準(zhǔn)確率(這樣在類似準(zhǔn)確率的情況下,對(duì)比網(wǎng)絡(luò)的其他參數(shù)就有可比較性了)
實(shí)際推理速度。 由于所提出的 GhostNet 是為移動(dòng)應(yīng)用程序設(shè)計(jì)的,我們使用 TFLite 工具進(jìn)一步測(cè)量了 GhostNet 在基于 ARM 的手機(jī)上的實(shí)際推理速度。 按照 [21, 44] 中的常見(jiàn)設(shè)置,我們使用批量大小為 1 的單線程模式。從圖 7 的結(jié)果中,我們可以看到 GhostNet 在相同延遲的情況下比 MobileNetV3 獲得了大約 0.5% 的 top-1 準(zhǔn)確率, 和 GhostNet 需要更少的運(yùn)行時(shí)間來(lái)實(shí)現(xiàn)類似的性能。 例如,準(zhǔn)確度為 75.0% 的 GhostNet 只有 40 毫秒的延遲,而準(zhǔn)確度相近的 MobileNetV3 處理一張圖像需要大約 45 毫秒。 總體而言,我們的模型通常優(yōu)于著名的最先進(jìn)模型,即 MobileNet 系列、ProxylessNAS、FBNet和 MnasNet。
4.2 COCO目標(biāo)檢測(cè)數(shù)據(jù)集
為了進(jìn)一步評(píng)估 GhostNet 的泛化能力,我們?cè)?MS COCO 數(shù)據(jù)集上進(jìn)行了對(duì)象檢測(cè)實(shí)驗(yàn)。 我們使用 trainval35k 分割作為訓(xùn)練數(shù)據(jù),并在 [32, 33] 之后以 minival 分割的平均平均精度 (mAP) 報(bào)告結(jié)果。 具有特征金字塔網(wǎng)絡(luò) (FPN) [43, 32] 的兩階段 Faster R-CNN 和單階段 RetinaNet [33] 都用作我們的框架,GhostNet 作為主干特征提取器 (backbone) 的替代品。 我們使用 SGD 對(duì) ImageNet 預(yù)訓(xùn)練權(quán)重的 12 個(gè) epoch 訓(xùn)練所有模型,并使用 [32, 33] 中建議的超參數(shù)。 輸入圖像的大小調(diào)整為短邊為 800,長(zhǎng)邊不超過(guò) 1333。表 8 顯示了檢測(cè)結(jié)果,其中通常使用 224 × 224 圖像計(jì)算 FLOP。 由于計(jì)算成本顯著降低,GhostNet 在單階段 RetinaNet 和兩階段 Faster R-CNN 框架上實(shí)現(xiàn)了與 MobileNetV2 和 MobileNetV3 類似的 mAP。
5. 總結(jié)
為了減少最新的深度神經(jīng)網(wǎng)絡(luò)的計(jì)算成本,本文提出了一種用于構(gòu)建高效的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的新型Ghost module。Ghost module將原始卷積層分為兩部分,首先使用較少的卷積核來(lái)生成原始特征圖,然后,進(jìn)一步使用廉價(jià)的線性變換操作以高效生產(chǎn)更多幻影特征圖。在基準(zhǔn)模型和數(shù)據(jù)集上進(jìn)行的實(shí)驗(yàn)表明,該方法是一個(gè)即插即用的模塊,能夠?qū)⒃寄P娃D(zhuǎn)換為更緊湊的模型,同時(shí)保持可比的性能。此外,在效率和準(zhǔn)確性方面,使用提出的新模塊構(gòu)建的GhostNet均優(yōu)于最新的輕量神經(jīng)網(wǎng)絡(luò),如MobileNet-v3。
總結(jié)
以上是生活随笔為你收集整理的GhostNet论文的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 常见网络攻击手法
- 下一篇: 音频分离Spleeter的安装