"幽靈網(wǎng)絡(luò)" | 華為高效輕量級網(wǎng)絡(luò)(附源碼鏈接)
前言
由于內(nèi)存和計算資源有限,在嵌入式設(shè)備上部署卷積神經(jīng)網(wǎng)絡(luò)(CNNs)是困難的。特征映射中的冗余是CNN成功的一個重要特征,但在神經(jīng)結(jié)構(gòu)設(shè)計中很少被研究。作者并沒有避免冗余的特性映射,而是傾向于采用它們,但采用的是一種低成本的方式。
由于內(nèi)存和計算資源有限,在嵌入式設(shè)備上部署卷積神經(jīng)網(wǎng)絡(luò)(CNNs)是困難的。特征映射中的冗余是CNN成功的一個重要特征,但在神經(jīng)結(jié)構(gòu)設(shè)計中很少被研究。在訓(xùn)練較好的深度網(wǎng)絡(luò)的特征圖中,豐富甚至冗余的信息常常保證了對輸入數(shù)據(jù)的全面理解。例如在輸入圖像的一些特征映射,并且存在許多相似的特征映射對,就像彼此的“幽靈”一樣。作者并沒有避免冗余的特性映射,而是傾向于采用它們,但采用的是一種低成本的方式。

1.摘要
作者提出了一種新的Ghost模塊,用于從簡單的操作中獲取更多的特征映射。基于一組內(nèi)在特征映射,應(yīng)用一系列簡單的線性變換來生成許多Ghost特征映射,這些映射可以充分揭示內(nèi)在特征的信息。提出的Ghost模塊可以作為一個即插即用的組件來升級現(xiàn)有的卷積神經(jīng)網(wǎng)絡(luò)。Ghost瓶頸被設(shè)計成stack Ghost modules,然后可以很容易地建立輕量級的GhostNet。?
?在基準上進行的實驗表明,所提出的Ghost模塊是基線模型中卷積層的一個令人印象深刻的替代方案,GhostNet可以獲得更高的識別性能(例如在ImageNetILSVRC-2012分類數(shù)據(jù)集上,與具有類似計算成本的MobileNetV3相比,準確率為75.7)。
2.背景
高效的神經(jīng)結(jié)構(gòu)設(shè)計具有很高的潛力,可以建立高效的深度網(wǎng)絡(luò),參數(shù)和計算較少,最近取得了相當大的成功。這種方法還可以為自動搜索方法提供新的搜索單元。例如,MobileNet利用深度卷積和點卷積構(gòu)造了一個單元,用于用較大的濾波器逼近原始卷積層,并取得了類似的性能。ShuffleNet進一步探索了一種通道shuffle操作(這個不是很好翻譯,但是通過具體操作可以理解),以提高輕量級模型的性能。?

例如上圖顯示了ResNet-50生成的輸入圖像的一些特征映射,并且存在許多類似的特征映射對,就像彼此的“幽靈”一樣。作者并沒有避免冗余的特性映射,而是傾向于采用它們,但采用的是一種低成本的方式。
今天我們就介紹了這種新的Ghost模塊,通過使用較少的參數(shù)來生成更多的特征。具體來說,深度神經(jīng)網(wǎng)絡(luò)中的一個普通卷積層將被分成兩部分。第一部分涉及普通卷積,但它們的總數(shù)將受到嚴格控制。給定第一部分的固有特征映射,然后應(yīng)用一系列簡單的線性操作來生成更多的特征映射。在不改變輸出特征映射大小的情況下,與vanilla卷積神經(jīng)網(wǎng)絡(luò)相比,該Ghost模塊中所需的參數(shù)總數(shù)和計算復(fù)雜性都有所降低。基于Ghost模塊,建立了一種高效的神經(jīng)網(wǎng)絡(luò)架構(gòu),即GhostNet。?作者首先在基準神經(jīng)架構(gòu)中替換原始卷積層,以證明Ghost模塊的有效性,然后驗證GhostNet在幾個基準視覺數(shù)據(jù)集上的優(yōu)越性。實驗結(jié)果表明,所提出的Ghost模塊能夠降低通用卷積層的計算成本,同時保持相似的識別性能,并且GhostNet可以在移動設(shè)備上具有快速推理的各種任務(wù)上超越最先進的有效深度模型,如MobileNetV3。
3.相關(guān)工作Model Compression網(wǎng)絡(luò)剪枝、低比特量化、知識蒸餾等方法的性能往往是有上限的,因為使用了預(yù)先訓(xùn)練的深度神經(jīng)網(wǎng)絡(luò)作為其基線。因此這些方法的性能通常取決于給定的預(yù)訓(xùn)練模型。對基本操作和體系結(jié)構(gòu)的改進將使它們走得更遠。
Compact Model Design
雖然Xception、MobileNets、MobileNetV2、MobileNetV3、ShuffleNet和ShuffleNetV2等輕量級模型以很少的FLOPs獲得了很好的性能,但是它們特征圖之間的相關(guān)性和冗余性一直沒有得到很好的利用。
4.算法框架
Ghost Module for More Features
因為在由主流CNNs網(wǎng)絡(luò)計算得到的中間特征映射中廣泛存在的冗余,如上圖。作者建議減少需要的資源,即用來生成這些特征映射的卷積過濾器。實際上,給定輸入X∈Rc*h*w,其中c為channels數(shù),h和w分別為輸入的高和寬。用來生成n特征映射的任意卷積層的操作公式為:

其中*表示卷積操作,b為bias項。Y∈Rh' x w' x n是有著n個channels的輸出特征映射,f∈Rc x k x k x n是該層的卷積過濾器。在該卷積操作中,需要的FLOPs數(shù)為n*h'*w'*c*k*k,該值通常很大,因為過濾器數(shù)量n和channel數(shù)量c一般很大。

根據(jù)上面的公式,需要優(yōu)化的參數(shù)數(shù)量(f和b)由輸入和輸出特征圖的維數(shù)明確確定。如上圖所示,卷積層的輸出特征映射通常包含大量冗余,其中一些可能彼此相似。作者指出沒有必要用大量的FLOPs和參數(shù)一個一個地生成這些冗余的特征圖。假設(shè)輸出的特性映射是一些帶有一些cheap轉(zhuǎn)換的內(nèi)在特性映射的“幽靈”。這些固有的特征圖通常較小,由普通的卷積過濾器產(chǎn)生。
具體來說,m個內(nèi)在特征映射Y'∈ Rh' x w' x m是使用一個基本卷積操作生成的:

為了進一步獲得想要的n個特征映射,作者提出在Y'中的每個內(nèi)在特征中應(yīng)用一系列的cheap線性操作來生成s個ghost特征,如下函數(shù)所示:

其中,yi′表示在Y'中的第i個內(nèi)在特征映射,在上式中Φi,j是用于生成第j個ghost特征映射yij的第j個線性操作,也就是說yi′可以有一個甚至多個ghost特征映射{yij}sj=1。最后一個Φi,s是用來保存如下圖(b)所示的內(nèi)在特征映射的identity映射。

通過使用上等式,作者能夠獲得n=m*s特征映射,Y=[y11,y12,··· ,yms]即如上圖(b)所示的一個Ghost模塊的輸出數(shù)據(jù)。注意,線性操作Φ在每個通道的計算成本遠小于普通的卷積。在實際應(yīng)用中,在一個Ghost模塊中可能會有幾種不同的線性運算,例如3×3和5×5的線性內(nèi)核,這些將在實驗部分進行分析。
Difference from Existing Methods
提出的Ghost模塊與現(xiàn)有的高效卷積方案有很大的不同。如:
1)與[Xiangyu Zhang, Xinyu Zhou, Mengxiao Lin, and Jian Sun. Shufflenet: An extremely efficient convolutional neural net- work for mobile devices.?CVPR]中廣泛使用1×1 pointwise卷積的單元相比,Ghost模塊中的主卷積可以定制內(nèi)核大小;
2)現(xiàn)有的方法采用pointwise卷積跨通道處理特征,然后采用depthwise卷積處理空間信息。相比之下,Ghost模塊采用普通卷積先生成少量的內(nèi)在特征圖,然后利用cheap的線性運算來擴充特征,增加channels;
3)在以往的高效架構(gòu)中,處理每個特征映射的操作僅限于depthwise卷積或shift操作,而Ghost模塊中的線性操作可以有較大的多樣性;
4)另外,在Ghost模塊中,將identity映射與線性變換并行進行,保持內(nèi)在特征映射。
Analysis on Complexities.
由于可以利用上等式中提出的Ghost模塊生成與普通卷積層相同數(shù)量的特征映射,因此可以很容易地將Ghost模塊集成到現(xiàn)有設(shè)計良好的神經(jīng)結(jié)構(gòu)中,從而降低計算成本。
在這里,進一步分析了使用Ghost模塊在內(nèi)存使用和理論上的加速方面的好處。比如這里有一個identity映射和m*(s-1)=(n/s)*(s-1)個線性操作,每個線性操作的平均內(nèi)核大小為d x d。理想情況下,n*(s-1)個線性操作能有不同形狀和參數(shù),但是線下推斷將會受到阻礙,尤其是考慮到CPU或GPU cards的使用。因此為了高效實現(xiàn),作者建議在一個Ghost模塊中使用相同大小的線性操作(如3x3、5x5)。Ghost模塊升級普通卷積的理論加速比為:

同樣地,壓縮比計算為:

Building Efficient CNNs
Ghost Bottlenecks:利用Ghost模塊的優(yōu)點,介紹了專門為小型CNNs設(shè)計的Ghost bottleneck(G-bneck)。

Ghost bottleneck看起來類似于ResNet中的基本residual塊,其中集成了幾個卷積層和shortcut。提出的ghost bottleneck主要由兩個堆疊的ghost模塊組成。第一個Ghost模塊作為擴展層,增加通道的數(shù)量。作者把輸出通道數(shù)與輸入通道數(shù)之比稱為expansion ratio;第二個Ghost模塊減少通道的數(shù)量以匹配shortcut。然后將這兩個Ghost模塊的輸入和輸出連接起來。除了根據(jù)MobileNetV2的建議在第二個Ghost模塊之后不使用ReLU外,每一層之后都使用batch歸一化(BN)和ReLU非線性函數(shù)。
上面描述的Ghost bottleneck是stride=1的情況。對于stride=2的情況,通過向下采樣層實現(xiàn)shortcut路徑,并在兩個Ghost模塊之間插入stride=2的depthwise卷積。在實際應(yīng)用中,Ghost模塊中主要的卷積是pointwise卷積,以提高其效率。
GhostNet
作者基本上遵循了MobileNetV3架構(gòu)的優(yōu)勢,用我們的Ghost bottleneck代替了MobileNetV3中的bottleneck塊。GhostNet主要由一組Ghost bottleneck組成,Ghost模塊作為構(gòu)建塊。第一層是標準的卷積層,有16個filter,然后是一系列的Ghost bottleneck,通道逐漸增加。這些Ghost bottleneck根據(jù)其輸入特征圖的大小被分組到不同的階段。所有的Ghost bottleneck都使用stride=1,除了最后一個階段使用stride=2。最后利用全局平均池化層和卷積層將特征映射轉(zhuǎn)化為一個1280維的特征向量進行最終分類。squeeze and excite(SE)模塊也適用于某些ghost bottleneck的殘層,如下表所示。

與MobileNetV3相比,作者沒有使用hard-swish非線性函數(shù),因為它有很大的延遲。所提出的體系結(jié)構(gòu)提供了一個基本的設(shè)計參考,但進一步的超參數(shù)調(diào)整或基于ghost模塊的自動體系結(jié)構(gòu)搜索將進一步提高系統(tǒng)的性能。
Width Multiplier
盡管上表中的給定架構(gòu)已經(jīng)可以提供低延遲和保證精度,但在某些場景中,可能需要更小、更快的模型或更高的特定任務(wù)的精度。為了期望的需求可以定制網(wǎng)絡(luò),可以簡單地在每一層channels的數(shù)量上均勻地乘以一個系數(shù)α。這個因子α稱為寬度乘數(shù),因為它可以改變整個網(wǎng)絡(luò)的寬度。作者表示帶有寬度乘數(shù)α的GhostNet為GhostNet-α×。寬度乘數(shù)可以控制模型大小和計算成本大約α2。通常小α導(dǎo)致更低的延遲和更低的性能,反之亦然。
5.實驗分析

從上表可以看出,所有的MSE值都非常小,這說明在深度神經(jīng)網(wǎng)絡(luò)中,特征映射之間存在很強的相關(guān)性,這些冗余特征可以由多個固有的特征生成。除了上述實驗中用到的卷積,還可以探索其他一些低成本的線性操作來構(gòu)造Ghost模塊,如仿射變換(affine)和小波變換(wavelet)。然而,卷積是一種高效的運算,已經(jīng)得到了當前硬件的良好支持,它可以涵蓋許多廣泛使用的線性運算,如平滑、模糊、運動等。此外,雖然我們也可以學(xué)習(xí)關(guān)于Φ線性操作中每個過濾器的大小 、不規(guī)則的模塊將降低計算單元的效率(例如CPU和GPU)。
在VGG-16架構(gòu)上測試了這兩個參數(shù)的影響。首先固定s = 2并調(diào)節(jié)d為{1,3,5,7}中之一,并在下表中列出了CIFAR-10驗證集的結(jié)果:

可以看到,提出的d = 3的Ghost模塊比d值較小或較大的Ghost模塊性能更好。這是因為尺寸為1×1的kernel不能在特征映射上引入空間信息,而尺寸較大的kernel如d = 5或d = 7會導(dǎo)致過擬合和增加計算量。因此,在接下來的實驗中采用d = 3來進行有效性和效率的檢驗。
在研究了所提出的Ghost模塊中使用的內(nèi)核大小之后,保持d = 3,并在{2,3,4,5}范圍內(nèi)調(diào)優(yōu)其他超參數(shù)s。事實上,s與得到的網(wǎng)絡(luò)的計算代價直接相關(guān),即s越大,壓縮比和加速比越大。從上表的結(jié)果可以看出,當增加s的時候,F(xiàn)LOPs明顯減小,準確率逐漸降低,這是可以預(yù)料到的。特別是當s = 2時,也就是將VGG-16壓縮2倍,提出的方法比原模型的性能稍好一些,說明了所提出的Ghost模塊的優(yōu)越性。




如果想加入我們“計算機視覺研究院”,請掃二維碼加入我們。我們會按照你的需求將你拉入對應(yīng)的學(xué)習(xí)群!計算機視覺研究院主要涉及深度學(xué)習(xí)領(lǐng)域,主要致力于人臉檢測、人臉識別,多目標檢測、目標跟蹤、圖像分割等研究方向。研究院接下來會不斷分享最新的論文算法新框架,我們這次改革不同點就是,我們要著重”研究“。之后我們會針對相應(yīng)領(lǐng)域分享實踐過程,讓大家真正體會擺脫理論的真實場景,培養(yǎng)愛動手編程愛動腦思考的習(xí)慣!
