論文位址:MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications
民間實作:caffe | Tensorflow
官方代碼:tensorflow/models
有tensorflow的實作: https://github.com/tensorflow/models/blob/master/slim/nets/mobilenet_v1.md
caffe也有人實作: https://github.com/shicai/MobileNet-Caffe,
前言
這篇論文是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上進行對比,應該更直覺吧?也不給一個幀率,不知道速度怎麼樣)