輕量架構ShuffleNet V2:從理論復雜度到實用設計准則


轉自:機器之心

近日,曠視科技提出針對移動端深度學習的第二代卷積神經網絡 ShuffleNet V2。研究者指出過去在網絡架構設計上僅注重間接指標 FLOPs 的不足,並提出兩個基本原則和四項准則來指導網絡架構設計,最終得到了無論在速度還是精度上都超越先前最佳網絡(例如 ShuffleNet V1、MobileNet 等)的 ShuffleNet V2。在綜合實驗評估中,ShuffleNet V2 也在速度和精度之間實現了最佳權衡。研究者認為,高效的網絡架構設計應該遵循本文提出的四項准則。本文已被 ECCV 2018 收錄。

 

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。綜合對比實驗證明了該模型在速度和精度的權衡方面達到當前最優水平。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM