關注並星標
從此不迷路
Jiangmen
From:計算機視覺研究院
由於內存和計算資源有限,在嵌入式設備上部署卷積神經網絡(CNNs)是很困難的。特徵映射中的冗餘是CNN成功的一個重要特徵,但在神經結構設計中很少被研究。
在訓練較好的深度網絡的特徵圖中,豐富甚至冗餘的信息常常保證了對輸入數據的全面理解。例如在輸入圖像的一些特徵映射,並且存在許多相似的特徵映射對,就像彼此的「幽靈」一樣。華為的研究員團隊並沒有避免冗餘的特性映射,而是傾向於採用它們,提出了一種新的Ghost模塊,從簡單的操作中獲取更多的特徵映射。
文章連結:https://arxiv.org/pdf/1911.11907.pdf代碼:https://github.com/huawei-noah/ghostnet
一、摘要
作者提出了一種新的Ghost模塊,用於從簡單的操作中獲取更多的特徵映射。基於一組內在特徵映射,應用一系列簡單的線性變換來生成許多Ghost特徵映射,這些映射可以充分揭示內在特徵的信息。提出的Ghost模塊可以作為一個即插即用的組件來升級現有的卷積神經網絡。Ghost瓶頸被設計成stack Ghost modules,然後可以很容易地建立輕量級的GhostNet。
在基準上進行的實驗表明,所提出的Ghost模塊是基線模型中卷積層的一個令人印象深刻的替代方案,GhostNet可以獲得更高的識別性能(例如在ImageNetILSVRC-2012分類數據集上,與具有類似計算成本的MobileNetV3相比,準確率為75.7)。
二、背景
高效的神經結構設計具有很高的潛力,可以建立高效的深度網絡,參數和計算較少,最近取得了相當大的成功。這種方法還可以為自動搜索方法提供新的搜索單元。例如,MobileNet利用深度卷積和點卷積構造了一個單元,用於用較大的濾波器逼近原始卷積層,並取得了類似的性能。ShuffleNet進一步探索了一種通道shuffle操作,以提高輕量級模型的性能。
例如上圖顯示了ResNet-50生成的輸入圖像的一些特徵映射,並且存在許多類似的特徵映射對,就像彼此的「幽靈」一樣。作者並沒有避免冗餘的特性映射,而是傾向於採用它們,但採用的是一種低成本的方式。
今天我們就將介紹這種新的Ghost模塊,通過使用較少的參數來生成更多的特徵。具體來說,深度神經網絡中的一個普通卷積層將被分成兩部分。第一部分涉及普通卷積,但它們的總數將受到嚴格控制。給定第一部分的固有特徵映射,然後應用一系列簡單的線性操作來生成更多的特徵映射。在不改變輸出特徵映射大小的情況下,與vanilla卷積神經網絡相比,該Ghost模塊中所需的參數總數和計算複雜性都有所降低。基於Ghost模塊,建立了一種高效的神經網絡架構,即GhostNet。
作者首先在基準神經架構中替換原始卷積層,以證明Ghost模塊的有效性,然後驗證GhostNet在幾個基準視覺數據集上的優越性。實驗結果表明,所提出的Ghost模塊能夠降低通用卷積層的計算成本,同時保持相似的識別性能,並且GhostNet可以在行動裝置上具有快速推理的各種任務上超越最先進的有效深度模型,如MobileNetV3。
三、相關工作
Model Compression
網絡剪枝、低比特量化、知識蒸餾等方法的性能往往是有上限的,因為使用了預先訓練的深度神經網絡作為其基線。因此這些方法的性能通常取決於給定的預訓練模型。對基本操作和體系結構的改進將使它們走得更遠。
Compact Model Design
雖然Xception、MobileNets、MobileNetV2、MobileNetV3、ShuffleNet和ShuffleNetV2等輕量級模型以很少的FLOPs獲得了很好的性能,但是它們特徵圖之間的相關性和冗餘性一直沒有得到很好的利用。
四、算法框架
Ghost Module for More Features
因為在由主流CNNs網絡計算得到的中間特徵映射中廣泛存在的冗餘,如上圖。作者建議減少需要的資源,即用來生成這些特徵映射的卷積過濾器。實際上,給定輸入X∈Rc*h*w,其中c為channels數,h和w分別為輸入的高和寬。用來生成n特徵映射的任意卷積層的操作公式為:Y = X * f + b
其中*表示卷積操作,b為bias項。Y∈Rh' x w' x n是有著n個channels的輸出特徵映射,f∈Rc x k x k x n是該層的卷積過濾器。在該卷積操作中,需要的FLOPs數為n*h'*w'*c*k*k,該值通常很大,因為過濾器數量n和channel數量c一般很大。
根據上面的公式,需要優化的參數數量 (f和b) 由輸入和輸出特徵圖的維數明確確定。如上圖所示,卷積層的輸出特徵映射通常包含大量冗餘,其中一些可能彼此相似。作者指出沒有必要用大量的FLOPs和參數一個一個地生成這些冗餘的特徵圖。假設輸出的特性映射是一些帶有一些cheap轉換的內在特性映射的「幽靈」。這些固有的特徵圖通常較小,由普通的卷積過濾器產生。
具體來說,m個內在特徵映射Y'∈ Rh' x w' x m是使用一個基本卷積操作生成的:Y' = X * f'
為了進一步獲得想要的n個特徵映射,作者提出在Y'中的每個內在特徵中應用一系列的cheap線性操作來生成s個ghost特徵,如下函數所示:
其中,yi′表示在Y'中的第i個內在特徵映射,在上式中Φi,j是用於生成第j個ghost特徵映射yij的第j個線性操作,也就是說yi′可以有一個甚至多個ghost特徵映射{yij}sj=1。最後一個Φi,s是用來保存如下圖(b)所示的內在特徵映射的identity映射。
通過使用上等式,作者能夠獲得n=m*s特徵映射,Y=[y11,y12,··· ,yms]即如上圖(b)所示的一個Ghost模塊的輸出數據。注意,線性操作Φ在每個通道的計算成本遠小於普通的卷積。在實際應用中,在一個Ghost模塊中可能會有幾種不同的線性運算,例如3×3和5×5的線性內核,這些將在實驗部分進行分析。
Difference from Existing Methods
提出的Ghost模塊與現有的高效卷積方案有很大的不同。如:
與[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模塊中的主卷積可以定製內核大小;現有的方法採用pointwise卷積跨通道處理特徵,然後採用depthwise卷積處理空間信息。相比之下,Ghost模塊採用普通卷積先生成少量的內在特徵圖,然後利用cheap的線性運算來擴充特徵,增加channels;在以往的高效架構中,處理每個特徵映射的操作僅限於depthwise卷積或shift操作,而Ghost模塊中的線性操作可以有較大的多樣性;另外,在Ghost模塊中,將identity映射與線性變換並行進行,保持內在特徵映射。
Analysis on Complexities
由於可以利用上等式中提出的Ghost模塊生成與普通卷積層相同數量的特徵映射,因此可以很容易地將Ghost模塊集成到現有設計良好的神經結構中,從而降低計算成本。
在這裡,進一步分析了使用Ghost模塊在內存使用和理論上的加速方面的好處。比如這裡有一個identity映射和m*(s-1)=(n/s)*(s-1)個線性操作,每個線性操作的平均內核大小為d x d。理想情況下,n*(s-1)個線性操作能有不同形狀和參數,但是線下推斷將會受到阻礙,尤其是考慮到CPU或GPU cards的使用。因此為了高效實現,作者建議在一個Ghost模塊中使用相同大小的線性操作(如3x3、5x5)。Ghost模塊升級普通卷積的理論加速比為:
同樣地,壓縮比計算為:
Building Efficient CNNs
Ghost Bottlenecks:利用Ghost模塊的優點,介紹了專門為小型CNNs設計的Ghost bottleneck(G-bneck)。
Ghost bottleneck看起來類似於ResNet中的基本residual塊,其中集成了幾個卷積層和shortcut。提出的ghost bottleneck主要由兩個堆疊的ghost模塊組成。第一個Ghost模塊作為擴展層,增加通道的數量。作者把輸出通道數與輸入通道數之比稱為expansion ratio;第二個Ghost模塊減少通道的數量以匹配shortcut。然後將這兩個Ghost模塊的輸入和輸出連接起來。除了根據MobileNetV2的建議在第二個Ghost模塊之後不使用ReLU外,每一層之後都使用batch歸一化(BN)和ReLU非線性函數。
上面描述的Ghost bottleneck是stride=1的情況。對於stride=2的情況,通過向下採樣層實現shortcut路徑,並在兩個Ghost模塊之間插入stride=2的depthwise卷積。在實際應用中,Ghost模塊中主要的卷積是pointwise卷積,以提高其效率。
GhostNet
作者基本上遵循了MobileNetV3架構的優勢,用我們的Ghost bottleneck代替了MobileNetV3中的bottleneck塊。GhostNet主要由一組Ghost bottleneck組成,Ghost模塊作為構建塊。第一層是標準的卷積層,有16個filter,然後是一系列的Ghost bottleneck,通道逐漸增加。這些Ghost bottleneck根據其輸入特徵圖的大小被分組到不同的階段。所有的Ghost bottleneck都使用stride=1,除了最後一個階段使用stride=2。最後利用全局平均池化層和卷積層將特徵映射轉化為一個1280維的特徵向量進行最終分類。squeeze and excite(SE)模塊也適用於某些ghost bottleneck的殘層,如下表所示。
與MobileNetV3相比,作者沒有使用hard-swish非線性函數,因為它有很大的延遲。所提出的體系結構提供了一個基本的設計參考,但進一步的超參數調整或基於ghost模塊的自動體系結構搜索將進一步提高系統的性能。
Width Multiplier
儘管上表中的給定架構已經可以提供低延遲和保證精度,但在某些場景中,可能需要更小、更快的模型或更高的特定任務的精度。為了期望的需求可以定製網絡,可以簡單地在每一層channels的數量上均勻地乘以一個係數α。這個因子α稱為寬度乘數,因為它可以改變整個網絡的寬度。作者表示帶有寬度乘數α的GhostNet為GhostNet-α×。寬度乘數可以控制模型大小和計算成本大約α2。通常小α導致更低的延遲和更低的性能,反之亦然。
五、實驗分析
從上表可以看出,所有的MSE值都非常小,這說明在深度神經網絡中,特徵映射之間存在很強的相關性,這些冗餘特徵可以由多個固有的特徵生成。除了上述實驗中用到的卷積,還可以探索其他一些低成本的線性操作來構造Ghost模塊,如仿射變換(affine)和小波變換(wavelet)。然而,卷積是一種高效的運算,已經得到了當前硬體的良好支持,它可以涵蓋許多廣泛使用的線性運算,如平滑、模糊、運動等。此外,雖然我們也可以學習關於Φ線性操作中每個過濾器的大小 、不規則的模塊將降低計算單元的效率(例如CPU和GPU)。
在VGG-16架構上測試了這兩個參數的影響。首先固定s = 2並調節d為{1,3,5,7}中之一,並在下表中列出了CIFAR-10驗證集的結果:
可以看到,提出的d = 3的Ghost模塊比d值較小或較大的Ghost模塊性能更好。這是因為尺寸為1×1的kernel不能在特徵映射上引入空間信息,而尺寸較大的kernel如d = 5或d = 7會導致過擬合和增加計算量。因此,在接下來的實驗中採用d = 3來進行有效性和效率的檢驗。
在研究了所提出的Ghost模塊中使用的內核大小之後,保持d = 3,並在{2,3,4,5}範圍內調優其他超參數s。事實上,s與得到的網絡的計算代價直接相關,即s越大,壓縮比和加速比越大。從上表的結果可以看出,當增加s的時候,FLOPs明顯減小,準確率逐漸降低,這是可以預料到的。特別是當s = 2時,也就是將VGG-16壓縮2倍,提出的方法比原模型的性能稍好一些,說明了所提出的Ghost模塊的優越性。
可視化Ghost模塊的特徵圖
檢測數據集COCO的測試結果:
最後,別忘了
火熱報名中~