天天看點

mobilenet網絡的了解

論文位址: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在廣泛的應用場景中的有效性,包括物體檢測,細粒度分類,人臉屬性和大規模地理定位。

mobilenet網絡的了解

引言和背景介紹

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

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

MobileNets模型結構

深度可分解卷積

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

mobilenet網絡的了解

直覺上來看,這種分解在效果上确實是等價的。比如,把上圖的代号化為實際的數字,輸入圖檔次元是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圖來了解,先放這裡了。

mobilenet網絡的了解

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

mobilenet網絡的了解

首先是标準卷積,假定輸入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  。

将二者進行比較,可得:

mobilenet網絡的了解

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

模型結構和訓練

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

mobilenet網絡的了解
mobilenet網絡的了解

MobileNet将95%的計算時間用于有75%的參數的1×1卷積,作者采用tensorflow架構進行訓練,因為過拟合不太容易,是以資料增強和規則化用的不多。

mobilenet網絡的了解

寬度乘數

這裡介紹模型的第一個超參數,即寬度乘數  α  。為了建構更小和更少計算量的網絡,作者引入了寬度乘數  α  ,作用是改變輸入輸出通道數,減少特征圖數量,讓網絡變瘦。在  α  參數作用下,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可以看出兩個超參數在減少網絡參數的上的作用。

mobilenet網絡的了解

實驗分析

模型選擇

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

mobilenet網絡的了解

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

mobilenet網絡的了解

模型收縮超參數

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

mobilenet網絡的了解

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

mobilenet網絡的了解

表8中,在ImageNet資料集上,将MobileNets和VGG與GoogleNet做了對比。

mobilenet網絡的了解

目标檢測

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

mobilenet網絡的了解