MobileNets 論文筆記

論文地址:MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications
民間實現:caffe | Tensorflow
官方代碼:tensorflow/models

前言

這篇論文是Google針對手機等嵌入式設備提出的一種輕量級的深層神經網絡,取名爲MobileNets。個人感覺論文所做工作偏向於模型壓縮方面,核心思想就是卷積核的巧妙分解,可以有效減少網絡參數。可能由於剛發佈,谷歌還沒有放出官方代碼(Tensorflow),谷歌官方已經開源了這部分代碼(2017.6.15),具體參見文中地址。另外,在Github上搜索“MolileNets”,可發現一些個人實現的代碼,部分會提供訓練好的模型。博主跑過其中的caffe模型,發現inference速度並沒有怎麼提升,看網上討論,應該是caffe框架的問題,要想大幅提升速度,應該只能依賴Tensorflow框架了。

摘要

我們提供一類稱爲MobileNets的高效模型,用於移動和嵌入式視覺應用。 MobileNets是基於一個流線型的架構,它使用深度可分離的卷積來構建輕量級的深層神經網絡。我們引入兩個簡單的全局超參數,在延遲度和準確度之間有效地進行平衡。這兩個超參數允許模型構建者根據問題的約束條件,爲其應用選擇合適大小的模型。我們進行了資源和精度權衡的廣泛實驗,與ImageNet分類上的其他流行的網絡模型相比,MobileNets表現出很強的性能。最後,我們展示了MobileNets在廣泛的應用場景中的有效性,包括物體檢測,細粒度分類,人臉屬性和大規模地理定位。

這裏寫圖片描述

引言和背景介紹

這部分是說,隨着深度學習的發展,卷積神經網絡變得越來越普遍。當前發展的總體趨勢是,通過更深和更復雜的網絡來得到更高的精度,但是這種網絡往往在模型大小和運行速度上沒多大優勢。一些嵌入式平臺上的應用比如機器人和自動駕駛,它們的硬件資源有限,就十分需要一種輕量級、低延遲(同時精度尚可接受)的網絡模型,這就是本文的主要工作。

在建立小型和有效的神經網絡上,已經有了一些工作,比如SqueezeNet,Google Inception,Flattened network等等。大概分爲壓縮預訓練模型和直接訓練小型網絡兩種。MobileNets主要關注優化延遲,同時兼顧模型大小,不像有些模型雖然參數少,但是也慢的可以。

MobileNets模型結構

深度可分解卷積

MobileNets模型基於深度可分解的卷積,它可以將標準卷積分解成一個深度卷積和一個點卷積(1 × 1卷積核)。深度卷積將每個卷積核應用到每一個通道,而1 × 1卷積用來組合通道卷積的輸出。後文證明,這種分解可以有效減少計算量,降低模型大小。圖2說明了標準卷積是如何進行分解的。

這裏寫圖片描述

直觀上來看,這種分解在效果上確實是等價的。比如,把上圖的代號化爲實際的數字,輸入圖片維度是11 × 11 × 3,標準卷積爲3 × 3 × 3 ×16(假設stride爲2,padding爲1),那麼可以得到輸出爲6 × 6 × 16的輸出結果。現在輸入圖片不變,先通過一個維度是3 × 3 × 1 × 3的深度卷積(輸入是3通道,這裏有3個卷積核,對應着進行計算,理解成for循環),得到6 × 6 × 3的中間輸出,然後再通過一個維度是1 × 1 × 3 ×16的1 ×1卷積,同樣得到輸出爲6 × 6 × 16。以上解析還可以藉助一幅經典的GIF圖來理解,先放這裏了。

這裏寫圖片描述

接下來作者計算了這種分解可以多大程度上減少參數量。這裏首先指出論文中存在的一處筆誤,下圖標註部分寫錯了,正確應爲 DG×DG×N

這裏寫圖片描述

首先是標準卷積,假定輸入F的維度是 DF×DF×M ,經過標準卷積核K得到輸出G的維度 DG×DG×N ,卷積核參數量表示爲 DK×DK×M×N 。如果計算代價也用數量表示,應該爲 DK×DK×M×N×DF×DF

現在將卷積核進行分解,那麼按照上述計算公式,可得深度卷積的計算代價爲 DK×DK×M×DF×DF ,點卷積的計算代價爲 M×N×DF×DF

將二者進行比較,可得:

這裏寫圖片描述

MobileNets使用了大量的3 × 3的卷積核,極大地減少了計算量(1/8到1/9之間),同時準確率下降的很少,相比其他的方法確有優勢。

模型結構和訓練

MobileNets結構建立在上述深度可分解卷積中(只有第一層是標準卷積)。該網絡允許我們探索網絡拓撲,找到一個適合的良好網絡。其具體架構在表1說明。除了最後的全連接層,所有層後面跟了batchnorm和ReLU,最終輸入到softmax進行分類。圖3對比了標準卷積和分解卷積的結構,二者都附帶了BN和ReLU層。按照作者的計算方法,MobileNets總共28層(1 + 2 × 13 + 1 = 28)。

這裏寫圖片描述

這裏寫圖片描述

MobileNet將95%的計算時間用於有75%的參數的1×1卷積,作者採用tensorflow框架進行訓練,因爲過擬合不太容易,所以數據增強和規則化用的不多。

這裏寫圖片描述

寬度乘數

這裏介紹模型的第一個超參數,即寬度乘數 α 。爲了構建更小和更少計算量的網絡,作者引入了寬度乘數 α ,作用是改變輸入輸出通道數,減少特徵圖數量,讓網絡變瘦。在 α 參數作用下,MobileNets某一層的計算量爲:

DK×DK×αM×DF×DF+αM×αN×DF×DF

其中, α 取值是0~1,應用寬度乘數可以進一步減少計算量,大約有 α2 的優化空間。

分辨率乘數

第二個超參數是分辨率乘數 ρ ,分辨率乘數用來改變輸入數據層的分辨率,同樣也能減少參數。在 αρ 共同作用下,MobileNets某一層的計算量爲:

DK×DK×αM×ρDF×ρDF+αM×αN×ρDF×ρDF

其中,ρ 是隱式參數,ρ 如果爲{1,6/7,5/7,4/7},則對應輸入分辨率爲{224,192,160,128},ρ 參數的優化空間同樣是 ρ2 左右。 表3可以看出兩個超參數在減少網絡參數的上的作用。

這裏寫圖片描述

實驗分析

模型選擇

表4中,同樣是MobileNets的架構,使用可分離卷積,精度值下降1%,而參數僅爲1/7。

這裏寫圖片描述

表5中,深且瘦的網絡比淺且胖的網絡準確率高3%。

這裏寫圖片描述

模型收縮超參數

表6中,α 超參數減小的時候,模型準確率隨着模型的變瘦而下降。

這裏寫圖片描述

表7中,ρ 超參數減小的時候,模型準確率隨着模型的分辨率下降而下降。

這裏寫圖片描述

表8中,在ImageNet數據集上,將MobileNets和VGG與GoogleNet做了對比。

這裏寫圖片描述

目標檢測

這裏的實驗主要是將MobileNets作爲目標檢測網絡Faster R-CNN和SSD的基底(base network),和其他模型在COCO數據集上進行了對比。(爲什麼不在VOC PASCAL上進行對比,應該更直觀吧?也不給一個幀率,不知道速度怎麼樣)

這裏寫圖片描述

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