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

論文標題: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,該架構提高了移動模型在多個任務和多個基準數據集上以及在不同模型尺寸範圍內的最佳性能。我們還描述了在我們稱之爲SSDLite的新框架中將這些移動模型應用於目標檢測的有效方法。此外,我們還演示瞭如何通過 DeepLabv3的簡化形式,我們稱之爲 Mobile DeepLabv3來構建移動語義分割模型。

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

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

1,引言

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

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

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

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

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】。它保留了其簡單性,並且不需要任何特殊的運算符,同時顯著提高了它的準確性,爲移動應用實現了在多種圖像分類和檢測任務上的最新技術。

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由下式計算:

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

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

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

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

  其中 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

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

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

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 節的分段線性曲線。

  很容易看到通常如果 ReLU 層變換的輸出由一個非零值 S,那麼被映射到 S 的點都是對輸入經過一個線性變換 B 之後獲得,從而表明對應整個維數的輸出部分輸入空間被限制在爲一個線性變換。換句話說,深度網絡只對輸出域部分的非零值上應用一個線性分類器。我們應用一個補充材料來更加詳細的正式描述。

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

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

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

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

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

  圖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 的通道數

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

3.3  反向殘差(Inverted residuals)

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

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

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

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

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

3.4  信息流解釋

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

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

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

4,模型結構

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

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

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

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

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

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

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

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

  而 Expansion layer 的功能正好相反,使用1*1 的網絡結構,目的是將低維空間映射到高維空間。這裏 Expansion 有一個超參數是維度擴展幾倍。可以根據實際情況來做調整的,默認是6,也就是擴展6倍

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

5,執行記錄

 5.1  內存有效管理

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

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

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

  所有操作中,內存量只是結合輸入和輸出的最大總的大小,在下文中,我們展示瞭如果我們將一個瓶頸殘差塊看做一個單一操作(並且將內部卷積看做一個一次性的張量),總的內存量將會由瓶頸張量的大小決定,而不是瓶頸內部的張量大小決定(這可能會更大)。

  瓶頸殘差塊  圖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,則我們的函數可以表示爲:

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

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

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中。

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 一致,因爲所有層都附加到相同輸出步長的特徵圖上。

  MobileNet  模型都經過了開源 TensorFlow 目標檢測 API 的訓練和評估【38】。兩個模型的輸入分辨率爲 320*320。我們進行了基準測試並比較了 mAP(COCO挑戰度量標準),參數數量和 Multiply-Adds 數量。結果如表6所示。MobilenetV2  SSDLite 不僅是最高效的模型,而且也是三者中最準確的模型。值得注意的是,MobilenetV2 SSDLite 效率高20倍,模型要小10倍,但仍然優於 COCO 數據集上的 YOLOv2 。

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。

6.4  模塊簡化測試

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

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

7,結論和未來工作

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

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

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章