深度學習論文翻譯解析(十八):MobileNetV2: Inverted Residuals and Linear Bottlenecks

戰爭熱誠 發表於 2021-02-02
深度學習

論文標題:MobileNetV2: Inverted Residuals and Linear Bottlenecks

論文作者:Mark Sandler Andrew Howard Menglong Zhu Andrey Zhmoginov Liang-Chieh Chen

論文地址:https://arxiv.org/pdf/1801.04381.pdf

參考的 MobileNetV2翻譯部落格:請點選我 

(這篇翻譯也不錯:https://blog.csdn.net/qq_31531635/article/details/80550412)

宣告:小編翻譯論文僅為學習,如有侵權請聯絡小編刪除博文,謝謝!           

  小編是一個機器學習初學者,打算認真研究論文,但是英文水平有限,所以論文翻譯中用到了Google,並自己逐句檢查過,但還是會有顯得晦澀的地方,如有語法/專業名詞翻譯錯誤,還請見諒,並歡迎及時指出。

如果需要小編其他論文翻譯,請移步小編的GitHub地址

  傳送門:請點選我

  如果點選有誤:https://github.com/LeBron-Jian/DeepLearningNote

深度學習論文翻譯解析(十八):MobileNetV2: Inverted Residuals and Linear Bottlenecks

深度學習論文翻譯解析(十八):MobileNetV2: Inverted Residuals and Linear Bottlenecks

摘要

  在本文中,我們描述了一種新的移動端網路架構 MobileNetV2,該架構提高了移動模型在多個任務和多個基準資料集上以及在不同模型尺寸範圍內的最佳效能。我們還描述了在我們稱之為SSDLite的新框架中將這些移動模型應用於目標檢測的有效方法。此外,我們還演示瞭如何通過 DeepLabv3的簡化形式,我們稱之為 Mobile DeepLabv3來構建移動語義分割模型。

  MobileNetV2 架構基於倒置的殘差結構,其中快捷連線位於窄的bottleneck之間。中間展開層使用輕量級的深度卷積作為非線性源來過濾特徵。此外,我們發現了表示能力,去除窄層中的非線性是非常重要的。我們證實了這可以提高效能並提供了產生此設計的直覺。

  最後,我們的方法允許將輸入/輸出域與變換的表現力解耦,這為進一步分析提供了便利的框架。我們在 ImageNet[1]分類,COCO目標檢測[2],VOC影像分割[3]上評估了我們的效能。我們評估了在精度,通過乘加(Multiply-Adds,MAdd)度量的操作次數,以及實際的延遲和引數的數量之間的權衡。

深度學習論文翻譯解析(十八):MobileNetV2: Inverted Residuals and Linear Bottlenecks

深度學習論文翻譯解析(十八):MobileNetV2: Inverted Residuals and Linear Bottlenecks

1,引言

  神經網路已經徹底改變了機器智慧的許多領域,使具有挑戰性的影像識別任務獲得了超過常人的準確性。然而,提高準確性的驅動力往往需要付出代價:現在先進網路需要超出許多移動和嵌入式應用能力之外的高計算資源。

  本文介紹了一種專為移動和資源受限環境量身定製的新型神經網路架構。我們的網路通過顯著減少所需操作和記憶體的數量,同時保持相同的精度推進了移動定製計算機視覺模型的最新水平。

   我們的主要貢獻是一個新的層模型:具有線性瓶頸的倒置殘差。該模組將輸入的低維壓縮表示首先擴充套件到高維並用輕量級深度卷積進行過濾。隨後用線性卷積將特徵投影回低維表示。官方實現可作為 [4] 中 TensorFlow-Slim 模型庫的一部分(https://github.com/tensorflow/ models/tree/master/research/slim/ nets/mobilenet)。

  這個模組可以使用任何現代框架中的標準操作來高效的實現,並允許我們的模型使用基線沿多個效能點選敗最先進的技術。此外,這種卷積模組特別適用於移動設計,因此它可以通過從不完全實現大型中間張量來顯著的減少推斷過程中所需的記憶體佔用。這減少了許多嵌入式硬體設計中對主儲存器訪問的需求,這些設計提供了少量高速軟體控制快取。

深度學習論文翻譯解析(十八):MobileNetV2: Inverted Residuals and Linear Bottlenecks

深度學習論文翻譯解析(十八):MobileNetV2: Inverted Residuals and Linear Bottlenecks

2,相關工作

  調整深層神經架構以在精確性和效能之間達到最佳平衡已成為過去幾年研究活躍的一個領域。由許多團隊進行的手動架構搜尋和訓練演算法的改進,已經比早期的設計(如AlexNet【5】,VGGNet【5】,GoogLeNet【7】和ResNet【8】)有了顯著的改進。最近在演算法架構探索方面取得了很多進展,包括超引數優化【9,10,11】,各種網路修剪方法【12,13,14,15,16,17】和連線學習【18,19】。也有大量的工作致力於改變內部卷積塊的連線結構如ShuffleNet【20】或引入稀疏性【21】和其他【22】。

  最近,【23,24,25,26】開闢了一個新的方向,將遺傳演算法和強化學習等優化方法代入架構搜尋。然而,一個缺點是是最終所得到的網路非常複雜。在本文中,我們追求的目標是發展瞭解神經網路如何執行的更好直覺,並使用它來指導最簡單可能的網路設計。我們的方法應該被視為【23】中描述的方法和相關工作的補充。在這種情況下,我們的方法與【20,22】所採用的方法類似,並且可以進一步提高效能,同時可以一睹其內部的執行。我們的網路設計基於MobileNetV1【27】。它保留了其簡單性,並且不需要任何特殊的運算子,同時顯著提高了它的準確性,為移動應用實現了在多種影像分類和檢測任務上的最新技術。

深度學習論文翻譯解析(十八):MobileNetV2: Inverted Residuals and Linear Bottlenecks

深度學習論文翻譯解析(十八):MobileNetV2: Inverted Residuals and Linear Bottlenecks

3,預備知識,討論,直覺

3.1  深度可分離卷積

  深度可分離卷積對於許多有效的神經網路結構來說都是非常關鍵的元件(ShuffleNet, MobileNetV1,Xception),而對我們的工作來說,也是如此,基本想法是利用一個分解版本的卷積來代替原來的標準卷積操作,即將標準卷積分解成兩步來實現,第一步叫深度卷積,它通過對每個輸入通道執行利用單個卷積進行濾波來實現輕量級濾波,第二步是一個1*1卷積,叫做逐點卷積,它負責通過計算輸入通道之間的線性組合來構建新的特徵。

  MobileNet 是一種基於深度可分離卷積的模型,深度可分離卷積是一種將標準卷積分解成深度卷積以及一個 1*1 的卷積即逐點卷積。對於 Mobilenet 而言,深度卷積針對每個單個輸入通道應用單個濾波器進行濾波,然後逐點卷積應用 1*1 的卷積操作來結合所有深度卷積得到的輸出。而標準卷積一步即對所有的輸入進行結合得到新的一系列輸出。深度可分離卷積將其分為了兩步,針對每個單獨層進行濾波然後下一步即結合。這種分解能夠有效地大量減少計算量以及模型的大小。

   一個標準卷積層輸入 DF*DF*M 的特徵圖 F,並得到一個 DG*DG*N 的輸出特徵圖 G,其中DF 表示輸入特徵圖的寬和高,M是輸入的通道數(輸入的深度),DG 為輸出特徵圖的寬和高,N是輸出的通道數(輸出的深度)。

  標準卷積層通過由大小為 DK*DK*M*N 個卷積核 K 個引數,其中 DK是卷積核的空間維數,M 是輸入通道數,N是輸出通道數。

  標準卷積的輸出卷積圖,假設步長為1,則padding由下式計算:

深度學習論文翻譯解析(十八):MobileNetV2: Inverted Residuals and Linear Bottlenecks

  其計算量為 DK*DK*M*N*DF*DF,其由輸入通道數 M,輸出通道數 N,卷積核大小 DK,輸出特徵圖大小DF 決定。MobileNet 模型針對其進行改進。首先,使用深度可分離卷積來打破輸出通道數與卷積核大小之間的互相連線作用。

  標準的卷積操作基於卷積核和組合特徵來對濾波特徵產生效果來產生一種新的表示。濾波和組合能夠通過分解卷積操作來分成兩個獨立的部分,這就叫做深度可分離卷積,可以大幅度降低計算成本。

  深度可分離卷積由兩層構成:深度卷積和逐點卷積。我們使用深度卷積來針對每一個輸入通道用單個卷積核進行卷積,得到輸入通道數的深度,然後運用逐點卷積,即應用一個簡單的 1*1 卷積來對深度卷積中的輸出進行線性結合。Mobilenets 對每層使用 BatchNorm 和 ReLU 非線性啟用。

  深度卷積對每個通道使用一種卷積核,可以寫為:

深度學習論文翻譯解析(十八):MobileNetV2: Inverted Residuals and Linear Bottlenecks

  其中 Khat 是深度卷積核的尺寸 DK*DK*M,Khat中第m個卷積核應用於 F中的第 m 個通道來產生第 m 個通道的卷積輸出特徵圖 Ghat。

  深度卷積的計算量為:DK*DK*M*DF*DF

  深度卷積相對於標準卷積十分有效,然而其只對輸入通道進行卷積,沒有對其進行組合來產生新的特徵。因此下一層利用另外的層利用1*1 卷積來對深度卷積的輸出計算一個線性組合從而產生新的特徵。

  那麼深度卷積加上 1*1 卷積的逐點卷積的結合就叫做深度可分離卷積,最開始在(Rigid-motion scattering for image classification) 中被提出。

  深度可分離卷積的計算量為:DK*DK*M*DF*DF + M*N*DF*DF

  通過將卷積分為濾波和組合的過濾得到對計算量縮減為:

深度學習論文翻譯解析(十八):MobileNetV2: Inverted Residuals and Linear Bottlenecks

  MobileNet 使用 3*3 的深度可分離卷積相較於標準卷積少了 8~9 倍的計算量,然而只有極小的準確率下降。MobileNetV2 也使用了k=3(3*3 可分離卷積層)。

深度學習論文翻譯解析(十八):MobileNetV2: Inverted Residuals and Linear Bottlenecks

3.2  線性瓶頸(Linear Bottlenecks)

   考慮一個深層神經網路有 n 層 Li 構成,每一層之後都有維數為 hi*wi*di 的啟用張量,通過這節我們將會討論這些啟用張量的基本屬性,我們可以將其看做具有 di 維的有 hi*wi 畫素的容器。非正式的,對於真實圖片的輸入集,一組層啟用(對於任一層 Li)形成一個“感興趣流形”,長期以來,人們認為神經網路中的感興趣流形可以嵌入到低維子空間中。換句話說,當我們單獨看一層深度卷積層所有 d 維通道畫素時,這些依次嵌入到低維子空間的值以多種形式被編碼成資訊。

  這段應該是本文的難點了,我這裡結合網上大佬說的,再理解一下:我們認為深度神經網路是由 n 個 Li 層構成,每層經過啟用輸出的張量為 hi*wi*di,我們認為一連串的卷積和啟用層形成一個興趣流形(mainfold of interest,這就是我們感興趣的資料內容),現階段還無法定量的描述這種流形,這裡以經驗為主的研究這些流形性質。長期依賴,人們認為:在神經網路中興趣流行可以嵌入到低維子空間,通俗說,我們檢視的卷積層中所有單個 d 通道畫素時,這些值中存在多種編碼資訊,興趣流形位於其中的。我們可以變換,進一步嵌入到下一個低維子空間中(例如通過 1*1 卷積變換維數,轉換興趣流形所在空間維度)

  咋一看,這可以通過簡單的約減一層的維度來做到,從而減少了運算空間的維度。這已經在 MobileNetV1 中被採用,通過寬度乘法器來有效對計算量和準確率進行權衡。並且已經被納入了其他有效的模型設計當中(Shufflenet: An extremely efficient convolutional neural network for mobile devices)。遵循這種直覺,寬度乘法器允許一個方法來減少啟用空間的維度直到感興趣的流形橫跨整個空間。然而,這個直覺當我們這知道深度卷積神經網路實際上對每個座標變換都有非線性啟用的時候被打破。就好像 ReLU,比如,ReLU 應用在一維空間中的一條線就產生了一條射線,那麼在 Rn 空間中,通常產生具有 n 節的分段線性曲線。

深度學習論文翻譯解析(十八):MobileNetV2: Inverted Residuals and Linear Bottlenecks

深度學習論文翻譯解析(十八):MobileNetV2: Inverted Residuals and Linear Bottlenecks  很容易看到通常如果 ReLU 層變換的輸出由一個非零值 S,那麼被對映到 S 的點都是對輸入經過一個線性變換 B 之後獲得,從而表明對應整個維數的輸出部分輸入空間被限制在為一個線性變換。換句話說,深度網路只對輸出域部分的非零值上應用一個線性分類器。我們應用一個補充材料來更加詳細的正式描述。

    另一方面,當沒有ReLU作用通道時,那麼必然失去了那個通道的資訊。然而,如果我們通道數非常多時,可能在啟用流形中有一個結構,其資訊仍然被儲存在其他的通道中。在補充材料中,我們展示瞭如果輸入流形能嵌入到一個顯著低維啟用子空間中,那麼ReLU啟用函式能夠保留這個資訊同時將所需的複雜度引入到表達函式集合中。

深度學習論文翻譯解析(十八):MobileNetV2: Inverted Residuals and Linear Bottlenecks

深度學習論文翻譯解析(十八):MobileNetV2: Inverted Residuals and Linear Bottlenecks

  總的來說,我們已經強調了兩個性質,他們表明了感興趣的流形應該存在於高維啟用空間中的一個低維子空間中的要求。

  1,如果感興趣流形在ReLU之後保持非零值,那麼它對應到一個線性變換。

  2,ReLU 能夠儲存輸入流形的完整資訊,但是輸入流形必須存在於輸入空間的一個低維子空間中。

  這兩點為我們優化現有神經網路提供了經驗性的提示:假設感興趣流形是低維的,我們能夠通過插入線性瓶頸層到卷積塊中來得到它。經驗性的證據表明使用線性是非常重要的,因為其阻止了非線性破壞了太多的資訊。在第6節中,我們展示了經驗性的在瓶頸中使用非線性層使得效能下降了幾個百分點,這更加進一步的驗證了我們的假設。我們注意到有類似的實驗在(Deep pyramidal residual networks)中,即傳統的殘差塊的輸入中去掉非線性結果提升了在 CIFAR 資料集的效能。論文的接下來部分,我們將利用瓶頸卷積,我們將輸入瓶頸尺寸和內部尺寸的比值稱為擴充套件率。

深度學習論文翻譯解析(十八):MobileNetV2: Inverted Residuals and Linear Bottlenecks

  圖1,低維流形嵌入到高維空間的ReLU轉換的例子。在這些例子中,一個原始螺旋形被利用隨機矩陣 T 經過 ReLU 後嵌入到一個 n 維空間中,然後使用 T-1 投影到二維空間中。例子中,n=2,3 導致資訊損失,可以看到流形的中心點之間的互相坍塌。同時 n=15, 30 時的資訊變成高度非凸。

  此圖表明:如果當前啟用空間內興趣流形完整度較高,經過ReLU,可能會讓啟用空間坍塌,不可避免的會丟失資訊,所以我們設計網路的時候,想要減少運算量,就需要儘可能將網路維度設計的低一些但是維度如果低的話,啟用變換ReLU函式可能會濾除很多有用資訊。然後我們就想到了,反正ReLU另外一部分就是一個線性對映,那麼如果我們全用線性分類器,會不會就不會丟失一些維度資訊,同時可以設計出維度較低的層呢?

  所以論文針對這個問題使用Linear Bottleneck(即不使用ReLU啟用,做了線性變換)的來代替原本的非線性啟用變換。到此,優化網路架構的思想也出來了:通過在卷積模組中後插入 linear bottleneck來捕獲興趣流形。實驗證明,使用linear bottleneck 可以防止非線性破壞太多資訊。

  從linear bottleneck 到深度卷積之間的維度比成為 Expansion factor(擴充套件係數),該係數控制了整個 block 的通道數

深度學習論文翻譯解析(十八):MobileNetV2: Inverted Residuals and Linear Bottlenecks

  圖2,深度可分離卷積的演化過程。對角線陰影紋理表示層不含非線性。最後的淺色層表示下一個卷積塊的起始。注意:d和c從顏色上可以看出是等效塊。

深度學習論文翻譯解析(十八):MobileNetV2: Inverted Residuals and Linear Bottlenecks

深度學習論文翻譯解析(十八):MobileNetV2: Inverted Residuals and Linear Bottlenecks

3.3  反向殘差(Inverted residuals)

  瓶頸塊看起來與殘差塊相同,每個塊包含一個輸入接幾個瓶頸然後進行擴充套件。然而,受到直覺的啟發,瓶頸層實際上包含了所有必要的資訊,同時一個擴充套件層僅僅充當實現張量非線性變換的實現細節部分,我們直接在瓶頸層之間運用 shortcuts,圖3提供了一個設計上差異的視覺化。插入 shortcuts 的動機與典型的殘差連線相同,我們想要提升在多層之間梯度傳播的能力,然而,反向設計能夠提高記憶體效率(第五節詳細描述)以及在我們的實驗中變現的更好一些。

  瓶頸層的執行時間和引數量,基本的實現結構在表1中體現。對於一個大小為 h*w 的塊,擴充套件因子 t 和卷積核大小 k, 輸入通道數為 d ' ,輸出通道數為 d '' ,那麼乘加運算有:

深度學習論文翻譯解析(十八):MobileNetV2: Inverted Residuals and Linear Bottlenecks

  與之前的計算量比較,這個表示式多出了一項,因為我們有額外的 1*1 卷積,然而我們的網路性質允許我們利用更小的輸入和輸出的維度。在表3中我們比較了不同解析度下的 MobileNetV1,MobileNetV2,ShuffleNet 所需要的尺寸大小。

深度學習論文翻譯解析(十八):MobileNetV2: Inverted Residuals and Linear Bottlenecks

  圖3:殘差塊在(Aggregated residual transformations for deep neural networks.)與ResNet的不同。對角線陰影層沒有用非線性,塊中的厚度表示相關的通道數,注意到,經典的殘差連線的層都是通道數非常多的層,然而,反向殘差連線的是瓶頸層。

深度學習論文翻譯解析(十八):MobileNetV2: Inverted Residuals and Linear Bottlenecks

深度學習論文翻譯解析(十八):MobileNetV2: Inverted Residuals and Linear Bottlenecks

  表3  在不同結構的每個空間解析度下都需要實現通道數/記憶體的最大值。假設啟用需要 16bit,對於 ShuffleNet,我們使用 2x,g=3來匹配 MobileNetV1,MobileNetV2。對於MobileNetv2 和 ShuffleNet 的第一層而言,我們利用在第5節中的技巧來減少記憶體的需要。雖然 ShuffleNet 在其他地方利用了瓶頸,非瓶頸張量由於非瓶頸張量之間的 shortcuts 存在仍然需要被實現。

深度學習論文翻譯解析(十八):MobileNetV2: Inverted Residuals and Linear Bottlenecks

3.4  資訊流解釋

   我們結構的一個特性在於構建塊(瓶頸層)的輸入輸出域之間提供一個自然分離,並且層變換這是一種輸入到輸出之間的非線性函式。前者能看成是網路每層的容量,而後者看做是網路的表達能力。這與傳統卷積塊相反,傳統卷積塊的正則化和可分離性,在表達能力和容量都結合在一起,是輸出層深度的函式。

  特別的,在我們的例子中,當內層深度為0時,下面層卷積由於 shortcuts 變成了恆等函式。當擴充套件率小於1時,這就變成了一個經典的殘差卷積塊。然而,為了我們的目的,當擴充套件率大於1時是最有效的

  這個解釋允許我們從網路的容量來研究網路的表達能力,而且我們相信對可分離性更進一步探索能夠保證對網路的性質理解更加深刻。

深度學習論文翻譯解析(十八):MobileNetV2: Inverted Residuals and Linear Bottlenecks

深度學習論文翻譯解析(十八):MobileNetV2: Inverted Residuals and Linear Bottlenecks

4,模型結構

  現在我們詳細的描述我們的模型結構。就像前面提到的一樣,基本的構建塊是殘差瓶頸深度可分離卷積塊,塊的詳細結構在表1中可以看到。MobileNetV2包含初始的 32個卷積核的全連線層,後接 19 個殘差瓶頸層(如表2),我們使用 ReLU6 作為非線性啟用函式,用於低精度計算時,ReLU6 啟用函式更加魯棒。我們總使用大小為 3*3 的卷積核,並且在訓練時利用 dropout 和 batchnorm 規範化。

  除開第一層之外,我們在整個網路中使用常數擴充套件率。在我們的實驗中,我們發現擴充套件率在 5~10 之間幾乎有著相同的效能曲線。隨著網路規模的縮小,擴充套件率略微降低效果更好,而大型網路有更大的擴充套件率,效能更佳。

  我們主要的實驗部分來說,我們使用擴充套件率為6應用在輸入張量中。比如,對於一個瓶頸層來說,輸入為 64 通道的張量,產生一個 128 維的張量,內部擴充套件層就是 64*6=384 通道。

深度學習論文翻譯解析(十八):MobileNetV2: Inverted Residuals and Linear Bottlenecks

  權衡超引數  就像MobileNetV1 中的一樣,我們對於不同的效能要求制定不同的結構。通過使用輸入影像解析度以及可調整的寬度乘法器超引數來根據期望的準確率/效能折中來進行調整。我們先前的工作(寬度乘法器,1,224*224),有大約3億的乘加計算量以及使用了340萬的引數量。我們探索對輸入解析度從 96 到 224,寬度乘法器從 0.35 到 1.4 來探索效能的權衡。網路計算量從 7 變成了 585MMads,同時模型的尺寸變換影響引數量從1.7M到 6.9M。

  與MobileNetV1 實現小小不同的是,MobileNetV1 的寬度乘法器的取值小於1,除了最後一層卷積層,我們對所有層都應用了寬度乘法器,這對於小模型提升了效能。

深度學習論文翻譯解析(十八):MobileNetV2: Inverted Residuals and Linear Bottlenecks

  表2  MobileNetV2 :每行描述了1個或多個相同的層的序列,重複 n 次。所有序列相同的層有相同的輸出通道數c,第一層的序列步長為s,所有其他的層都用步長為1,所有空間卷積核使用 3*3 的大小,擴充套件因子 t 總是應用在表1描述的輸入尺寸中。

深度學習論文翻譯解析(十八):MobileNetV2: Inverted Residuals and Linear Bottlenecks

  這裡再來聊一下,MobileNet V2 的網路模組樣式,其樣式如下(和上面差不多,不過我這裡拿了網頁的圖):

深度學習論文翻譯解析(十八):MobileNetV2: Inverted Residuals and Linear Bottlenecks

  我們知道,MobileNetV1 網路主要思想就是深度可分離的卷積的堆疊。在V2的網路設計中,我們除了繼續使用深度可分離(中間那個)結構之外,還使用了Expansion layer 和 Projection layer。這個 projection layer 也使用 1*1 的網路結構將高維空間對映到低維空間的設計,有些時候我們也將其稱之為 Bottleneck layer。

  而 Expansion layer 的功能正好相反,使用1*1 的網路結構,目的是將低維空間對映到高維空間。這裡 Expansion 有一個超引數是維度擴充套件幾倍。可以根據實際情況來做調整的,預設是6,也就是擴充套件6倍

深度學習論文翻譯解析(十八):MobileNetV2: Inverted Residuals and Linear Bottlenecks

  此圖也更加詳細的展示了整個模組的結構。我們輸入是 24維,最後輸出也是 24維。但這個過程中,我們擴充套件了6倍,然後應用深度可分離卷積進行處理。整個網路是中間胖,兩頭窄,像一個紡錘型。而ResNet中 bottleneck residual block 是兩頭胖中間窄,在MobileNet V2中正好相反,所以我們MobileNet V2中稱為 inverted rediduals。另外,residual connection 是在輸入和輸出的部分進行連線。而linear bottleneck 中最後projection  conv 部分,我們不再使用ReLU啟用函式而是使用線性啟用函式

深度學習論文翻譯解析(十八):MobileNetV2: Inverted Residuals and Linear Bottlenecks

深度學習論文翻譯解析(十八):MobileNetV2: Inverted Residuals and Linear Bottlenecks

深度學習論文翻譯解析(十八):MobileNetV2: Inverted Residuals and Linear Bottlenecks

5,執行記錄

 5.1  記憶體有效管理

  反向殘差瓶頸層允許一個特別的記憶體有效管理方式,這對於移動應用來說非常重要。一個標準有效的管理比如說 TensorFlow或者 Caffe,構建一個有向無環計算超圖G,由表示操作的邊和表示內部計算的張量構成。為了最小化需要儲存在記憶體中的張量數,計算是按順序進行的。在最一般的情況下,其搜尋所有可能的計算順序 ΣG,然後選能夠最小化下式的順序。

深度學習論文翻譯解析(十八):MobileNetV2: Inverted Residuals and Linear Bottlenecks

  其中 R(i,  π, G) 是與任意點{ π1, π2,....πn}相連線的中間張量列表。 |A| 表示張量 A的模,size(i) 表示 i 操作期間,內部儲存所需要的記憶體總數。

  對於只有不重要的並行結構的圖(如殘差連線),只有一個重要可行的計算順序,因此在測試時所需要的總的記憶體在計算圖G中可以簡化為:

深度學習論文翻譯解析(十八):MobileNetV2: Inverted Residuals and Linear Bottlenecks  所有操作中,記憶體量只是結合輸入和輸出的最大總的大小,在下文中,我們展示瞭如果我們將一個瓶頸殘差塊看做一個單一操作(並且將內部卷積看做一個一次性的張量),總的記憶體量將會由瓶頸張量的大小決定,而不是瓶頸內部的張量大小決定(這可能會更大)。

深度學習論文翻譯解析(十八):MobileNetV2: Inverted Residuals and Linear Bottlenecks

深度學習論文翻譯解析(十八):MobileNetV2: Inverted Residuals and Linear Bottlenecks

深度學習論文翻譯解析(十八):MobileNetV2: Inverted Residuals and Linear Bottlenecks

  瓶頸殘差塊  圖3b 中所示的 F(x) 可以表示為三個運算子的組合 F(x)=[A*N*B]x,其中A是線性變換 ,N是一個非線性的每個通道的轉換,B是輸出域的線性轉換。

  對於我們的網路 N=ReLU6*dwise*ReLU6,但結果適用於任何的按通道轉換。假設輸入域的大小是 |x| 並且輸出域的大小是 |y|,那麼計算 F(X) 所需要的記憶體可以低至 |s2k|+|s'2k'|+o(max(s2, s'2))。

  該演算法基於以下事實:內部張量 L 可以表示為 t 張量的連線,每個大小為 n/t,則我們的函式可以表示為:

深度學習論文翻譯解析(十八):MobileNetV2: Inverted Residuals and Linear Bottlenecks

  通過累加和,我們只需要將一個大小為 n/t 的中間塊始終保留在記憶體中。使用 n=t ,我們最終只需要保留中間表示的單個通道。這使得我們能夠使用這一技巧的兩個約束是(a)內部變換(包括非線性和深度)是每個通道的事實,以及(b)連續的非按通道運算子具有顯著的輸入輸出大小比,對於大多數傳統的神經網路,這種技巧不會產生顯著的改變。

   我們注意到,使用 t 路分割計算 F(X) 所需的乘加運算子的數目是獨立於 t 的,但是在現有實現中,我們發現由於增加的快取未命中,用幾個較小的矩陣乘法替換一個矩陣乘法會很損壞執行時的效能。我們發現這種方法最有用,t 是 2和5之間的一個小常數。它顯著的降低了記憶體需求,但仍然可以利用深度學習框架提供的高度優化的矩陣乘法和卷積運算元來獲得的大部分效率。如果特殊的框架優化可能導致進一步的執行時改進,這個方法還有待觀察。

深度學習論文翻譯解析(十八):MobileNetV2: Inverted Residuals and Linear Bottlenecks

深度學習論文翻譯解析(十八):MobileNetV2: Inverted Residuals and Linear Bottlenecks

6,實驗

6.1  ImageNet 分類

  訓練設定 我們利用 TensorFlow 訓練模型,實驗標準的 RMSProp 優化方法,並且衰減率和動量都設定為 0.9,我們在每一層之後都使用 batch normalization ,標準的權重衰減設定為 0.00004,接著 MobilenetV1 的設定,我們使用初始學習率為 0.045,學習率衰減為每個 epoch 衰減 0.98,我們使用 16 個 GPU 非同步工作器並且使用 96個作為 batch size。

   結果  我們與MobileNetV1,ShuffleNet,NASNet-A 模型進行比較,幾個模型的統計資料如表4.效能的比較在圖5中。

深度學習論文翻譯解析(十八):MobileNetV2: Inverted Residuals and Linear Bottlenecks

深度學習論文翻譯解析(十八):MobileNetV2: Inverted Residuals and Linear Bottlenecks

深度學習論文翻譯解析(十八):MobileNetV2: Inverted Residuals and Linear Bottlenecks

6.2 目標檢測

  我們評估和比較MobileNetV2和 MobileNetV1的效能,MobileNetV1 使用了 COCO資料集【2】上 Single Shot  Detector(SSD)【34】的修改版本作為目標檢測的特徵提取器【33】。我們還將 YOLOv2【35】和原始SSD(以VGG-16為基礎網路)作為基準進行比較。由於我們專注於移動/實時模型,因此我們不會比較 Faster RCNN 【36】和 RFCN【37】等其他架構的效能。

  SSDLite  在本文中,我們將介紹常規SSD的移動友好型變種,我們在SSD 預測層中用可分離卷積(深度方向後接 1*1 投影)替換所有常規卷積。這種設計符合 MobileNets 的整體設計,並且在計算上效率更高。我們稱之為修改版本的 SSDLite。與常規SSD相比,SSDLite顯著降低了引數計數和計算成本,如表5所示。

  對於 MobileNet V1,我們按照【33】中的設定進行,對於 MobileNet V2,SSDLite 的第一層被附加到層15的擴充套件(輸出步長為 16),SSDLite層的第二層和其餘層連線在最後一層的頂部(輸出步長為32)。此設定與MobileNetV1 一致,因為所有層都附加到相同輸出步長的特徵圖上。

深度學習論文翻譯解析(十八):MobileNetV2: Inverted Residuals and Linear Bottlenecks

  MobileNet  模型都經過了開源 TensorFlow 目標檢測 API 的訓練和評估【38】。兩個模型的輸入解析度為 320*320。我們進行了基準測試並比較了 mAP(COCO挑戰度量標準),引數數量和 Multiply-Adds 數量。結果如表6所示。MobilenetV2  SSDLite 不僅是最高效的模型,而且也是三者中最準確的模型。值得注意的是,MobilenetV2 SSDLite 效率高20倍,模型要小10倍,但仍然優於 COCO 資料集上的 YOLOv2 。深度學習論文翻譯解析(十八):MobileNetV2: Inverted Residuals and Linear Bottlenecks

深度學習論文翻譯解析(十八):MobileNetV2: Inverted Residuals and Linear Bottlenecks

深度學習論文翻譯解析(十八):MobileNetV2: Inverted Residuals and Linear Bottlenecks

深度學習論文翻譯解析(十八):MobileNetV2: Inverted Residuals and Linear Bottlenecks

6.3  語義分割

  在本節中,我們使用 MobileNetV1 和 MobileNetV2 模型作為特徵提取器與 DeepLabv3【39】在移動語義分割任務上進行比較。DeepLabV3 採用了空洞卷積【40, 41, 42】,這是一種顯式控制計算特徵對映解析度的強大工具,並構建了五個平行頭部,包括(a)包含三個具有不同空洞率的 3*3 卷積的 Atrous Spatial Pyramid Pooling 模組(ASPP),(b)1*1 卷積頭部,以及(c)影像級特徵【44】。我們用輸出步長來表示輸入影像空間解析度與最終輸出解析度的比值,該解析度通過適當地應用空洞卷積來控制。對於語義分割,我們通常使用輸出 stide=16或8來獲取更密集的特徵對映。我們在 PASCAL VOC 2012 資料集上進行了實驗,使用【45】中的額外標註影像和評估指標mIOU。

  為了構建移動模型,我們嘗試了三種設計變體:(1)不同的特徵提取器,(2)簡化 DeepLabv3 頭部以加快計算速度,以及(3)提高效能的不同推斷策略。我們的結果總結在表7中。我們已經觀察到:(a)包括多尺度輸入和新增左右翻轉影像的推斷策略顯著增加了 MAdds,因此不適合於在裝置上應用,(b)使用輸出步長16比使用輸出步長8更有效率,(c)MobileNetV1 已經是一個強大的特徵提取器,並且只需要比 ResNet-101 少約 4.9~5.7倍的 MAdds【8】(例如,mIOU: 78.56 與 82.70和 MAdds:941.9B vs 4870.6B ),(d)在MobileNet V2的倒數第二個特徵對映的頂部構建 DeepLabv3 頭部比在原始的最後一個特徵對映上更高效,因為倒數第二個特徵對映包含 320 個通道而不是 1280個通道,這樣我們就可以達到類似的效能,但是要比 MobileNet V1 的通道數少 2.5 倍,(e)DeepLabv3 頭部的計算成本很高,移除 ASPP模組會顯著減少 MAdds並且只會稍稍降低效能。在表7末尾,我們鑑定了一個裝置上的潛在候選應用(粗體),該應用可以達到 75.32% mIOU 並且只需要 2.75B MAdds。

深度學習論文翻譯解析(十八):MobileNetV2: Inverted Residuals and Linear Bottlenecks深度學習論文翻譯解析(十八):MobileNetV2: Inverted Residuals and Linear Bottlenecks

6.4  模組簡化測試

  倒置殘差連線。 殘差連線的重要性已經被廣泛研究【8, 30, 46】。本文報告的新結果是連線瓶頸的快捷連線效能優於連線擴充套件層的快捷連線(請參見圖6b以供比較)。

   線性瓶頸的重要性。線性瓶頸模型的嚴格來說比非線性模型要弱一些,因為啟用總是可以線上性狀態下進行,並對偏差和縮放進行適當的修改。然而,我們在圖 6a 中展示的實驗表明,線性瓶頸改善了效能,為非線性破壞低維空間中的資訊提供了支援。

深度學習論文翻譯解析(十八):MobileNetV2: Inverted Residuals and Linear Bottlenecks

7,結論和未來工作

  我們描述了一個非常簡單的網路結構,允許我們能夠構建一個高效的移動端模型。我們的基礎構建單元有一個特殊的屬性使得其更加適合移動應用。其能實現記憶體管理更加高效並且能夠在所有神經框架上的標準操作來實現。

  對於 ImageNet 資料集,我們的結構對於效能點的廣泛範圍提升到了最好的水平。

  對於目標檢測任務,就COCO資料集上的準確率和模型複雜度來說,我們的網路優於最好的實時檢測器模型。尤其,我們的模型與 SSDLite 檢測模組結合,相較於 YOLOV3而言,計算量少了 20多倍,引數量少了 10多倍。

  理論層面,提出的卷積塊有一個獨一無二的性質,即從網路的容量(由瓶頸輸入進行編碼)中分離出網路的表達能力(對擴充套件層進行編碼),探索這個是未來研究的一個重要方向。