1 簡介
深度卷積網路(CNN)的結構經過多年改進變得更加準確和快速。自 2012 年 AlexNet [1] 取得里程碑式突破,各種新型結構層出不窮,一次次重新整理 ImageNet 分類準確率,這些結構包括 VGG [2]、GoogLeNet [3]、ResNet [4、5]、DenseNet [6]、ResNeXt [7]、SE-Net [8] 和神經網路架構自動搜尋 [9–11]。
除了精度,計算複雜度是另一個重要的考慮因素。現實世界的任務通常是當目標平臺(如硬體)和應用場景(如自動駕駛需要低延遲)既定時,在有限算力之下實現最優的精度。這催生出一系列針對輕量級架構設計和速度-精度更好權衡的研究,包括 Xception [12]、MobileNet [13]、MobileNet V2 [14]、ShuffleNet V1[15] 和 CondenseNet [16] 等等。在這些研究中,組卷積(group convolution)和深度卷積(depthwise convolution)至關重要。
度量計算複雜度的常用指標是浮點運算數,即 FLOPs。然而,FLOPs 是一種間接指標。它只是本文真正關心的直接指標(如速度或延遲)的一種近似形式,通常無法與直接指標劃等號。先前研究 [17,18,14,19] 已對這種差異有所察覺。比如,MobileNet V2 [14] 要遠快於 NASNET-A [9],但是兩者 FLOPs 相當。圖 1 (c) (d) 進一步解釋了這一現象,它表明 FLOPs 近似的網路也會有不同的速度。所以,將 FLOPs 作為衡量計算複雜度的唯一標準是不夠的,這樣會導致次優設計。
圖 1:四個網路架構在兩個硬體平臺、四種不同計算複雜度上的(驗證集 ImageNet 分類)精度、速度和 FLOPs 結果。(a, c) GPU 結果,batchsize= 8。(b, d) ARM 結果,batchsize = 1。本文提出的 ShuffleNet V2(右上)在所有情況下取得了最優效能。
間接指標 (FLOPs) 和直接指標(速度)之間存在差異的原因可以歸結為兩點。首先,對速度有較大影響的幾個重要因素對 FLOPs 不產生太大作用。其中一個因素是記憶體訪問成本 (MAC)。在某些操作(如組卷積)中,MAC 佔執行時間的很大一部分。對於像 GPU 這樣具備強大計算能力的裝置而言,這就是瓶頸。在網路架構設計過程中,記憶體訪問成本不能被簡單忽視。另一個因素是並行度。當 FLOPs 相同時,高並行度的模型可能比低並行度的模型快得多。
其次,FLOPs 相同的運算可能有著不同的執行時間,這取決於平臺。例如,早期研究 [20–22] 廣泛使用張量分解來加速矩陣相乘。但是,近期研究 [19] 發現張量分解在 GPU 上甚至更慢,儘管它減少了 75% 的 FLOPs。本文研究人員對此進行了調查,發現原因在於最近的 CUDNN [23] 庫專為 3×3 卷積優化:當然不能簡單地認為 3×3 卷積的速度是 1×1 卷積速度的 1/9。
據此,研究者提出了高效網路架構設計應該考慮的兩個基本原則:第一,應該用直接指標(例如速度)替換間接指標(例如 FLOPs);第二,這些指標應該在目標平臺上進行評估。在這項研究中,作者遵循這兩個原則,並提出了一種更加高效的網路架構。
第 2 部分,作者首先分析了兩個代表性的當前最優網路 [15,14] 的執行效能,然後推匯出高效網路設計的四個準則,它們揚棄了僅考慮 FLOPs 所帶來的侷限性。儘管這些準則獨立於硬體平臺,但研究者通過一系列可控實驗,以專用的程式碼優化在兩個不同的硬體平臺(GPU 和 ARM)上驗證其效能,確保本論文提出的準則是當前最佳的。
第 3 部分,研究者根據這些準則設計了一種新的網路架構。它是 ShuffleNet V1 的改進版,因此被稱為 ShuffleNet V2。第 4 部分,綜合驗證實驗的結果表明,ShuffleNet V2 在兩個平臺上都比先前的網路快得多,並且更加準確。圖 1 (a) (b) 給出了對比結果的概覽。例如,給定計算複雜度預算 40M FLOPs,ShuffleNet V2 的精度比 ShuffleNet V1 高 3.5%,比 MobileNet V2 高 3.7%。
2 高效網路設計的實用準則
研究者分析了兩個移動端當前最佳網路 ShuffleNet V1 和 MobileNet V2 的執行時效能,發現它們的表現代表了當前的研究趨勢。它們的核心元件為組卷積和深度卷積,這也是其它當前最佳架構的關鍵元件,例如 ResNet、Xception、MobileNet 和 CondenseNet 等。
研究者注意到 FLOPs 僅和卷積部分相關,儘管這一部分需要消耗大部分的時間,但其它過程例如資料 I/O、資料重排和元素級運算(張量加法、ReLU 等)也需要消耗一定程度的時間。
基於以上觀察,研究者從不同層面做了執行時(速度方面)分析,並提出了設計高效網路架構需要遵循的準則:
G1. 相同的通道寬度可最小化記憶體訪問成本(MAC);
G2. 過度的組卷積會增加 MAC;
G3. 網路碎片化(例如 GoogLeNet 的多路徑結構)會降低並行度;
G4. 元素級運算不可忽視。
結論和討論:基於上述準則和實證研究,本文總結出一個高效的網路架構應該:(1)使用「平衡」的卷積(相同的通道寬度);(2)考慮使用組卷積的成本;(3)降低碎片化程度;(4)減少元素級運算。這些所需特性依賴於平臺特徵(例如記憶體控制和程式碼優化),且超越了理論化的 FLOPs。它們都應該在實際的網路設計中被考慮到。
近期,輕量級神經網路架構 [15,13,14,9, 11,10,12] 上的研究進展主要基於 FLOPs 間接指標,並且沒有考慮上述四個準則。例如,ShuffleNet V1 [15] 嚴重依賴組卷積(違反 G2)和瓶頸形態的構造塊(違反 G1)。MobileNet V2 [14] 使用一種倒置的瓶頸結構,違反了 G1。它在「厚」特徵圖上使用了深度卷積和 ReLU 啟用函式,違反了 G4。自動生成結構 [9,10,11] 的碎片化程度很高,違反了 G3。
3 新型高效架構 ShuffleNet V2
ShuffleNet V1 回顧
ShuffleNet[15] 是一種先進的網路架構,廣泛應用於手機等低配裝置。它啟發了本文工作,因此首先對其進行回顧與分析。
根據 ShuffleNet V1,輕量級網路的主要挑戰是在給定計算預算(FLOPs)時,只能獲得有限數量的特徵通道。為了在不顯著增加 FLOPs 情況下增加通道數量,ShuffleNet V1 採用了兩種技術:逐點組卷積核和類瓶頸(bottleneck-like)結構;然後引入「channel shuffle」操作,令不同組的通道之間能夠進行資訊交流,提高精度。其構建模組如圖 3(a)(b) 所示。
如第二部分所述,逐點組卷積和瓶頸結構都增加了 MAC(G1 和 G2)。這個成本不可忽視,特別是對於輕量級模型。另外,使用太多分組也違背了 G3。捷徑連線(shortcut connection)中的元素級「加法」操作也不可取 (G4)。因此,為了實現較高的模型容量和效率,關鍵問題是如何保持大量且同樣寬的通道,既沒有密集卷積也沒有太多的分組。
通道分割和 ShuffleNet V2
為此,本文引入一個簡單的操作——通道分割(channel split)。如圖 3(c) 所示。在每個單元的開始,c 特徵通道的輸入被分為兩支,分別帶有 c−c'和 c'個通道。按照準則 G3,一個分支仍然保持不變。另一個分支由三個卷積組成,為滿足 G1,令輸入和輸出通道相同。與 ShuffleNet V1 不同的是,兩個 1×1 卷積不再是組卷積。這部分是為了遵循 G2,部分是因為分割操作已經產生了兩個組。
卷積之後,把兩個分支拼接起來,從而通道數量保持不變 (G1)。然後進行與 ShuffleNet V1 相同的「Channel Shuffle」操作來保證兩個分支間能進行資訊交流。
「Shuffle」之後,下一個單元開始運算。注意,ShuffleNet V1 [15] 中的「加法」操作不再存在。像 ReLU 和深度卷積這樣的操作只存在一個分支中。另外,三個連續的操作「拼接」、「Channel Shuffle」和「通道分割」合併成一個操作。根據 G4,這些變化是有利的。
對於空間下采樣,該單元經過稍微修改,詳見圖 3(d)。通道分割運算被移除。因此,輸出通道數量翻了一倍。
本文提出的構造塊 (c)(d),以及由此而得的網路,被稱之為 ShuffleNet V2。基於上述分析,本文得出結論:由於對上述四個準則的遵循,該架構設計異常高效。
上述構建模組被重複堆疊以構建整個網路。為簡單起見,本文令 c' = c/2。整個網路結構類似於 ShuffleNet V1(見表 5)。二者之間只有一個區別:前者在全域性平均池化層之前新增了一個額外的 1×1 卷積層來混合特徵,ShuffleNet V1 中沒有該層。與 ShuffleNet V1 類似,每個構建塊中的通道數量可以擴充套件以生成不同複雜度的網路,標記為 0.5×、1×等。
圖 3:ShuffleNet V1 [15] 和 ShuffleNet V2 的構造塊。(a)ShuffleNet 基本單元;(b) 用於空間下采樣 (2×) 的 ShuffleNet 單元;(c) ShuffleNet V2 的基本單元;(d) 用於空間下采樣 (2×) 的 ShuffleNet V2 單元。DWConv:深度卷積 (depthwise convolution)。GConv:組卷積 (group convolution)。
表 5:ShuffleNet V2 的整體架構,複雜度包含四個級別。
圖 4:DenseNet [6] 和 ShuffleNet V2 中特徵重用模式的圖示。(a) 模型中卷積層的濾波器絕對權重平均值。畫素顏色 (s,l) 編碼連線層 s 和 l 的權重的平均 L1 範數。(b) 畫素顏色 (s,l) 表示直接連線 ShuffleNet V2 中模組 s 和 l 的通道數量。所有畫素值都歸一化到 [0,1] 區間。
4 實驗結果
本文的 Ablation 實驗是在 ImageNet 2012 分類資料集上展開的。按照一般原則,所有的對比網路有四種不同的計算複雜度,分別是 40,140,300 和 500+ MFLOPs。這樣的複雜度在移動端場景中很典型。超引數及其他設定與 ShuffleNet V1 一樣。本文對比的網路架構分別是 ShuffleNet V1,MobileNet V2,Xception,DenseNet。具體結果如下表所示:
表 6:大模型的結果。
表 7:ShuffleNet V2 在 COCO 目標檢測任務上的效能。輸入影像大小是 800×1200。FLOPs 行列出了輸入影像大小為 224×224 時的複雜度水平。至於 GPU 速度評估,批大小為 4。未測試 ARM,因為 [34] 中所需的 PSRoI 池化操作目前在 ARM 上不可行。
表 8:多個網路架構在兩個平臺、四個計算複雜度級別上的(驗證集、單中心裁剪)分類誤差和速度對比。為方便起見,結果按照複雜度級別分組。GPU 的批大小是 8,ARM 的批大小是 1。除了 [*] 160 × 160 和 [**] 192 × 192,影像大小均為 224×224。由於目前缺少高效實現,本文不提供 CondenseNets [16] 的速度測量結果。
5 結論
本文提出,網路架構設計應該考慮直接指標,比如速度,而不是間接指標,比如 FLOPs。更重要的是,本文還給出四個重要的實用設計準則,以及一個全新的架構——ShuffleNet V2,綜合實驗已經證實了其有效性。研究者希望本文的工作可以啟迪未來的網路架構設計,更加具有平臺意識,並朝著實用的方向發展。
論文:ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design
論文下載地址:https://pan.baidu.com/s/1so7aD3hLKO-0PB8h4HWliw
摘要:目前,神經網路架構設計主要由計算複雜度的間接指標(即 FLOPs)來指導。但是,直接指標(如速度)還依賴於其他因素,如記憶體訪問成本和平臺特點。因此,本文提出在目標平臺上評估直接指標,而不是隻考慮 FLOPs。基於一系列對比實驗,本文得出多個高效、實用的網路設計準則,並據此得到了一個新的架構 ShuffleNet V2。綜合對比實驗證明了該模型在速度和精度的權衡方面達到當前最優水平。