從MobileNet看輕量級神經網路的發展
前 言
隨著深度學習的火熱,計算機視覺領域內的卷積神經網路模型也層出不窮。從1998年的LeNet,到2012年引爆深度學習熱潮的AlexNet,再到後來2014年的VGG,2015年的ResNet,深度學習網路模型在影像處理中應用的效果越來越好。神經網路體積越來越大,結構越來越複雜,預測和訓練需要的硬體資源也逐步增多,往往只能在高算力的伺服器中執行深度學習神經網路模型。移動裝置因硬體資源和算力的限制,很難執行復雜的深度學習網路模型。
深度學習領域內也在努力促使神經網路向小型化發展。在保證模型準確率的同時體積更小,速度更快。到了2016年直至現在,業內提出了SqueezeNet、ShuffleNet、NasNet、MnasNet以及MobileNet等輕量級網路模型。這些模型使移動終端、嵌入式裝置執行神經網路模型成為可能。而MobileNet在輕量級神經網路中較具代表性。
谷歌在2019年5月份推出了最新的MobileNetV3。新版MobileNet使用了更多新特性,使得MobileNet非常具有研究和分析意義,本文將對MobileNet進行詳細解析。
MobileNet的優勢
MobileNet網路擁有更小的體積,更少的計算量,更高的精度。在輕量級神經網路中擁有極大的優勢。
1、 更小的體積
MobileNet相比經典的大型網路,引數量明顯更少,引數量越少模型體積越小。
2、 更少的計算量
MobileNet最佳化網路結構使模型計算量成倍下降。
3、 更高的準確率
MobileNet憑藉網路結構最佳化,在更少的引數及更少的計算量情況下,網路精度反而超過了部分大型神經網路。在最新的MobileNetV3-Large中,實現ImageNet資料集Top1準確率達到75.2%。
4、 更快的速度
使用Google Pixel-1手機測試,MobileNet各版本都能保持執行時間在120ms以下,最新版MobileNetV3-Large執行時間達到66ms,引數量和計算量更低的MobileNetV3-Small更是能達到22ms;GoogleNet執行速度約為250ms,而VGG-16由於一次性需要載入至記憶體的空間已超過500MB,手機系統會報記憶體溢位錯誤導致無法執行。
5、 多種應用場景
MobileNet可以在移動終端實現眾多的應用,包括目標檢測,目標分類,人臉屬性識別和人臉識別等。
MobileNet各版本介紹
1、 MobileNetV1網路結構
- 整個網路不算平均池化層與softmax層,共28層;
- 在整個網路結構中步長為2的卷積較有特點,卷積的同時充當下采樣的功能;
- 第一層之後的26層都為深度可分離卷積的重複卷積操作;
- 每一個卷積層(含常規卷積、深度卷積、逐點卷積)之後都緊跟著批規範化和ReLU啟用函式;
- 最後一層全連線層不使用啟用函式。
2、 MobileNetV2網路結構
MobileNetV2中主要引入線性瓶頸結構和反向殘差結構。
MobileNetV2網路模型中有共有17個Bottleneck層(每個Bottleneck包含兩個逐點卷積層和一個深度卷積層),一個標準卷積層(conv),兩個逐點卷積層(pw conv),共計有54層可訓練引數層。MobileNetV2中使用線性瓶頸(Linear Bottleneck)和反向殘差(Inverted Residuals)結構最佳化了網路,使得網路層次更深了,但是模型體積更小,速度更快了。
3、 MobileNetV3網路結構
MobileNetV3分為Large和Small兩個版本,Large版本適用於計算和儲存效能較高的平臺,Small版本適用於硬體效能較低的平臺。
- Large版本共有15個bottleneck層,一個標準卷積層,三個逐點卷積層。
- Small版本共有12個bottleneck層,一個標準卷積層,兩個逐點卷積層。
MobileNetV3中引入了5×5大小的深度卷積代替部分3×3的深度卷積。引入Squeeze-and-excitation(SE)模組和h-swish(HS)啟用函式以提高模型精度。結尾兩層逐點卷積不使用批規範化(Batch Norm),MobileNetV3結構圖中使用NBN標識。
(圖片來源)
網路結構上相對於MobileNetV2的結尾部分做了最佳化,去除三個高階層,如上圖所示。去除後減少了計算量和引數量,但是模型的精度並沒有損失。
值得一提的是,不論是Large還是Small版本,都是使用神經架構搜尋(NAS)技術生成的網路結構。
4、MobileNet各版本特性
MobileNet實現計算量減小、引數量減少的同時保證了較高的準確率,這和其擁有的特性 息息相關:
MobileNetV1提出的特性
MobileNetV2提出的特性
MobileNetV3提出的特性
MobileNet各個版本擁有的特性彙總
下文將對上表中的各個特性詳細闡述。
MobileNet的特性詳解
1、 深度可分離卷積
從MobileNetV1開始,到V2、V3的線性瓶頸結構都大量使用了深度可分離卷積。
深度可分離卷積(Depthwise Separable Convolution)是一種卷積結構。它是由一層深度卷積(Depthwise convolution)與一層逐點卷積(Pointwise Convolution)組合而成的,每一層卷積之後都緊跟著批規範化和ReLU啟用函式。跟標準卷積的區別就是精度基本不變的情況下,引數與計算量都明顯減少。
深度卷積
深度卷積(Depthwise convolution, DW)不同於常規卷積操作,深度卷積中一個卷積核只有一維,負責一個通道,一個通道只被一個卷積核卷積;常規卷積每個卷積核的維度與輸入維度相同,每個通道單獨做卷積運算後相加。
以一張5x5x3(長和寬為5,RGB3通道)的彩色圖片舉例。每層深度卷積卷積核的數量與上一層的通道數相同(通道和卷積核一一對應)。設padding=1,stride=1,一個三通道的影像經過運算後生成了3個特徵圖,如下圖所示:
深度卷積完成後的輸出特徵圖通道數與輸入層的通道數相同,無法擴充套件通道數。而且這種運算對輸入層的每個通道獨立進行卷積運算,沒有有效的利用不同通道在相同空間位置上的特徵資訊。因此需要逐點卷積來將生成的特徵圖進行組合生成新的特徵圖。
逐點卷積
逐點卷積(Pointwise Convolution, PW)的運算與標準卷積運算非常相似。
逐點卷積卷積核大小為1×1xM(M為輸入資料的維度),每次卷積一個畫素的區域。逐點卷積運算會將上一層的特徵圖在深度方向上進行加權組合,生成新的特徵圖,新的特徵圖的大小與輸入資料大小一致;然後組合各通道的特徵圖,以較少的計算量進行降維或升維操作(改變輸出資料的維度)。
以一張5x5x3(長和寬為5,RGB3通道)的彩色圖片舉例,使用4個1x1x3的逐點卷積核進行卷積,逐點卷積運算後生成了4個特徵圖。這個例子是使用逐點卷積進行升維的操作,特徵圖從5x5x3 升維到5x5x4。如下圖所示:
深度可分離卷積結構解析
將深度卷積和逐點卷積組成深度可分離卷積後的示意圖,如下圖所示:
首先進行深度卷積操作,得出的特徵圖各通道之間是不關聯的。接著進行逐點卷積把深度卷積輸出的特徵圖各通道關聯起來。
深度可分離卷積使用了更小的空間代價(引數減少)和更少的時間代價(計算量更少)實現了標準卷積層一樣的效果(提取特徵)。
一般的設Df為輸入特徵圖邊長,Dk為卷積核邊長,特徵圖和卷積核均為長寬一致,輸入通道數為M,輸出通道數為N,則:
標準卷積計算量為:Df×Df×Dk×Dk×M×N
深度卷積的計算量為:Df×Df×Dk×Dk×M
逐點卷積的計算量為:Df×Df×M×N
上圖所示實現輸入特徵圖大小為5×5×3,輸出特成圖大小為5×5×4,設padding=1,stride=1,深度卷積卷積核大小為3×3,標準卷積也使用3×3尺寸卷積核。實現相同的卷積效果,引數量(不包含偏置)與計算量對比如下表所示:
深度可分離卷積的演變
事實上深度可分離卷積不是在MobileNetV1中第一次提出的,而是在2016年由谷歌的Xception網路結構中提出的。MobileNetV1在Xception的基礎上,對深度可分離卷積進行了改進,做到了計算量與引數量的下降:
假定M為輸入層的通道數,N為輸出層的通道數。
Xcenption的深度可分離卷積是由輸入引數開始,使用1x1xMxN卷積將輸入層的通道數轉換為目標通道數,再透過3x3x1卷積核對每個通道進行卷積,每次卷積過後使用ReLU進行啟用。
MobileNetV1的深度可分離卷積則是先使用3x3x1xM對輸入層的每個通道分別卷積,之後透過1x1xMxN將輸入層通道數轉換為輸出層通道數,每次卷積過後做一次批規範化操作,再使用ReLU進行啟用。
這裡我們使用MobileNetV1網路結構的第一個深度可分離卷積層來舉例,輸入層維度為112x112x32,輸出層維度為112x112x64,Xception與MobileNet的深度可分離卷積的計算量與引數個數對比如下表:
由此可知將PW卷積與DW卷積的順序調整後,最佳化了網路的空間複雜度和時間複雜度。
2、 寬度因子
MobileNet本身的網路結構已經比較小並且執行延遲較低,但為了適配更定製化的場景,MobileNet提供了稱為寬度因子(Width Multiplier)的超引數給我們調整。寬度因子在MobileNetV1、V2、V3都可以運用。
透過寬度因子,可以調整神經網路中間產生的特徵的大小,調整的是特徵資料通道數大小,從而調整了運算量的大小。
寬度因子簡單來說就是新網路中每一個模組要使用的卷積核數量相較於標準的MobileNet比例。對於深度卷積結合1x1方式的卷積核,計算量為:
算式中α即為寬度因子,α常用的配置為1,0.75,0.5,0.25;當α等於1時就是標準的MobileNet。透過引數α可以非常有效的將計算量和引數數量約減到α的平方倍。
下圖為MobileNetV1使用不同α係數進行網路引數的調整時,在ImageNet上的準確率、計算量、引數數量之間的關係(每一個項中最前面的數字表示α的取值)。
(資料來源)
可以看到當輸入解析度固定為224x224時,隨著寬度因子的減少,模型的計算量和引數越來越小。從上表可以看到, 0.25 MobileNet的正確率比標準版1.0MobileNet低20%,但計算量和引數量幾乎只有標準版1.0MobileNet計算量、引數量的10%!對於計算資源和儲存資源都十分緊張的移動端平臺,可以透過α寬度因子調節網路的餐數量是非常實用的,在真正使用時我們可以按需調整α寬度因子達到準確率與效能的平衡。
3、 解析度因子
MobileNet還提供了另一個超引數解析度因子(Resolution Multiplier)供我們自定義網路結構,解析度因子同樣在MobileNetV1、V2、V3都可以運用。
解析度因子一般用β來指代,β的取值範圍在(0,1]之間,是作用於每一個模組輸入尺寸的約減因子,簡單來說就是將輸入資料以及由此在每一個模組產生的特徵圖都變小了,結合寬度因子α,深度卷積結合1x1方式的卷積核計算量為:
下圖為MobileNetV1使用不同的β係數作用於標準MobileNet時,在ImageNet上對精度和計算量的影響(α固定1.0)
(資料來源)
上圖中的 224、192、160、128 對應的解析度因子分別為 1、 6/7、5/7、4/7。
β=1時,輸入圖片的解析度為224x224,卷積後的影像大小變化為: 224x224 、112x112、56x56、28x28、14x14、7x7。
β= 6/7時,輸入圖片的解析度為192x192,卷積後各層特徵影像大小變化為:192x192、96x96、48x48、24x24、12x12、6x6。
卷積特徵影像的大小變化不會引起引數量的變化,只改變模型M-Adds計算量。上圖中 224解析度模型測試ImageNet資料集準確率為70.6%,192解析度的模型準確率為69.1%,但是M-Adds計算量減少了151M,對移動平臺計算資源緊張的情況下,同樣可以透過β解析度因子調節網路輸入特徵圖的解析度,做模型精度與計算量的取捨。
4、 規範化
深度學習中的規範化操作(Normalization),有助於加快基於梯度下降法或隨機梯度下降法模型的收斂速度,提升模型的精度,規範化的引數能夠提升模型泛化能力,提高模型的可壓縮性。
按照規範化操作涉及物件的不同可以分為兩大類,一類是對輸入值進行規範化操作,比如批規範化(Batch Normalization)、層規範化(Layer Normalization)、例項規範化(Instance Normalization)、組規範化(Group Normalization)方法都屬於這一類。另外一類是對神經網路中引數進行規範化操作,比如使用L0,L1範數。
批規範化
批規範化(Batch Normalization)幾乎存在於MobileNetV1、V2、V3的每個卷積層的後面,目的是加快訓練收斂速度,提升準確率。
批規範化是一種對數值的特殊函式變換方法,也就是說假設原始的某個數值是 x,套上一個起到規範化作用的函式,對規範化之前的數值 x 進行轉換,形成一個規範化後的數值,即:
所謂規範化,是希望轉換後的數值滿足一定的特性,至於對數值具體如何變換,跟規範化目標有關,不同的規範化目標導致具體方法中函式所採用的形式不同。透過自適應的重新引數化的方法,克服神經網路層數加深導致模型難以訓練的問題。
引數規範化
引數規範化(Weight Normalization, WN)是規範化的一種, 透過人為的設定稀疏演算法,去除模型中多餘的引數(置為0)使得模型引數稀疏化,可以透過L1正規化實現。
引數規範化是防止模型過分擬合訓練資料。當訓練一批樣本的時候,隨著訓練的推移模型會越來越趨向於擬合樣本資料。因為引數太多,會導致模型複雜度上升,容易過擬合。
需要保證模型"簡單"的基礎上最小化訓練誤差,這樣得到的引數才具有好的泛化效能(也就是測試誤差也小),而模型"簡單"就是透過規則函式來實現的。
如上圖所示,左側分類明顯的是欠擬合,模型並沒有能夠擬合資料。中間圖示為合適的擬合,右邊圖示是過擬合,模型在訓練樣本中擬合度是很好的,但是卻違背了特徵分類規律,在新的測試樣本中表現糟糕,影響模型的泛化能力。顯然右側模型在訓練是受到額外引數干擾。引數規則化能夠使引數稀疏,減少額外引數的干擾,提高泛化能力。
模型擁有稀疏的引數(模型中有大量引數為0),也有利於透過壓縮演算法壓縮模型的大小。
5、 線性瓶頸
線性瓶頸英文為Linear Bottleneck,是從Bottleneck結構演變而來的,被用於MobileNetV2與V3。
Bottleneck結構首次被提出是在ResNet網路中。該結構第一層使用逐點卷積,第二層使用3×3大小卷積核進行深度卷積,第三層再使用逐點卷積。MobileNet中的瓶頸結構最後一層逐點卷積使用的啟用函式是Linear,所以稱其為線性瓶頸結構(Linear Bottleneck)。線性瓶頸結構有兩種,第一種是步長為1時使用殘差結構,第二種是步長為2時不使用殘差結構。
其中輸入通道數為M,擴大倍數係數為T。T的值為大於0 的正數,當 0<T<1時,第一層逐點卷積起到的作用是降維。當 1<T時,第一層逐點卷積起到的作用是升維。
第二層為深度卷積,輸入通道數 = 輸出通道數 = M×T。
第三層為逐點卷積,作用是關聯深度卷積後的特徵圖並輸出指定通道數N。
線性瓶頸結構相對標準卷積能夠減少引數數量,減少卷積計算量。從空間和時間上最佳化了網路。
6、 反向殘差
MobileNetV2中以ResNet的殘差(Residuals)結構為基礎進行最佳化,提出了反向殘差(Inverted Residuals)的概念,之後也同樣運用與MobileNetV3中。
ResNet中提出的殘差結構解決訓練中隨著網路深度增加而出現的梯度消失問題,使反向傳播過程中深度網路的淺層網路也能得到梯度,使淺層網路的引數也可訓練,從而增加特徵表達能力。
ResNet的殘差結構實際是線上性瓶頸結構的基礎上增加殘差傳播。如下圖所示:
ResNet中的殘差結構使用第一層逐點卷積降維,後使用深度卷積,再使用逐點卷積升維。
MobileNetV2版本中的殘差結構使用第一層逐點卷積升維並使用Relu6啟用函式代替Relu,之後使用深度卷積,同樣使用Relu6啟用函式,再使用逐點卷積降維,降維後使用Linear啟用函式。這樣的卷積操作方式更有利於移動端使用(有利於減少引數與M-Adds計算量),因維度升降方式與ResNet中的殘差結構剛好相反,MobileNetV2將其稱之為反向殘差(Inverted Residuals)。
7、 5x5 的深度卷積
MobileNetV3中,深度卷積大量使用5x5大小的卷積核。這是因為使用神經結構搜尋(NAS)技術計算出的MobileNetV3網路結構的過程中,發現了在深度卷積中使用5x5大小的卷積核比使用3x3大小的卷積核效果更好,準確率更高。關於NAS技術將會在下文的單獨章節中做介紹。
8、 Squeeze-and-excitation 模組
Squeeze-and-Excitation模組(簡稱SE模組)的首次提出是在2017年的Squeeze-and-Excitation Networks(SENet)網路結構中,在MNasNet中進行了改進,之後在MobileNetV3中大量使用。研究人員期望透過精確的建模卷積特徵各個通道之間的作用關係來改善網路模型的表達能力。為了達到這個期望,提出了一種能夠讓網路模型對特徵進行校準的機制,使得有效的權重大,無效或效果小的權重小的效果,這就是SE模組。
(圖片來源)
如上圖,MobileNetV3的SE模組被運用線上性瓶頸結構最後一層上,代替V2中最後的逐點卷積,改為先進行SE操作再逐點卷積。這樣保持了網路結構每層的輸入和輸出,僅在中間做處理,類似於軟體開發中的鉤子。
SE模組結構詳解
下圖表示一個SE 模組。主要包含Squeeze和Excitation兩部分。W,H表示特徵圖寬,高。C表示通道數,輸入特徵圖大小為W×H×C。
壓縮(Squeeze)
第一步是壓縮(Squeeze)操作,如下圖所示
這個操作就是一個全域性平均池化(global average pooling)。經過壓縮操作後特徵圖被壓縮為1×1×C向量。
激勵(Excitation)
接下來就是激勵(Excitation)操作,如下圖所示
由兩個全連線層組成,其中SERatio是一個縮放引數,這個引數的目的是為了減少通道個數從而降低計算量。
第一個全連線層有C*SERatio個神經元,輸入為1×1×C,輸出1×1×C×SERadio。
第二個全連線層有C個神經元,輸入為1×1×C×SERadio,輸出為1×1×C。
scale操作
最後是scale操作,在得到1×1×C向量之後,就可以對原來的特徵圖進行scale操作了。很簡單,就是通道權重相乘,原有特徵向量為W×H×C,將SE模組計算出來的各通道權重值分別和原特徵圖對應通道的二維矩陣相乘,得出的結果輸出。
這裡我們可以得出SE模組的屬性:
引數量 = 2×C×C×SERatio
計算量 = 2×C×C×SERatio
總體來講SE模組會增加網路的總引數量,總計算量,因為使用的是全連線層計算量相比卷積層並不大,但是引數量會有明顯上升,所以MobileNetV3-Large中的總引數量比MobileNetV2多了2M。
MobileNetV3中的SE模組
SE模組的使用是很靈活的,可以在已有網路上新增而不打亂網路原有的主體結構。
ResNet中新增SE模組形成SE-ResNet網路,SE模組是在bottleneck結構之後加入的,如下圖左邊所示。
MobileNetV3版本中SE模組加在了bottleneck結構的內部,在深度卷積後增加SE塊,scale操作後再做逐點卷積,如上圖右邊所示。MobileNetV3版本的SERadio係數為0.25。使用SE模組後的MobileNetV3的引數量相比MobileNetV2多了約2M,達到5.4M,但是MobileNetV3的精度得到了很大的提升,在影像分類和目標檢測中準確率都有明顯提升。
9
h-swish啟用函式
MobileNetV3中發現swish啟用函式能夠有效提高網路的精度,但是swish的計算量太大了,並不適合輕量級神經網路。MobileNetV3找到了類似swish啟用函式但是計算量卻少很多的替代啟用函式h-swish(hard version of swish)如下所示:
sigmoid、h-sigmoid、swish、h-swish啟用函式的比較:
(圖片來源)
這種非線性在保持精度的情況下帶來了很多優勢,首先ReLU6在眾多軟硬體框架中都可以實現,其次量化時避免了數值精度的損失,執行快。這一非線性改變將模型的延時增加了15%。但它帶來的網路效應對於精度和延時具有正向促進,剩下的開銷可以透過融合非線性與先前層來消除。
MobileNet與其他模型對比
1、 模型引數量對比
MobileNet模型擁有更小的空間複雜度。空間複雜度主要是指模型的大小,包括可訓練引數和每一層生成的特徵圖大小。引數數量(params)關係到模型大小,單位通常為百萬(Million),通常引數用32位浮點型表示,所以模型大小是引數數量的 4 倍左右。這裡我們將對MobileNetV3-Large網路引數做一個全面的分析。
MobileNet與當前流行的模型引數大小對比,如下表所示:
(資料來源)
這裡拿VGG-16與MobileNetV3-Large進行對比,下圖為VGG-16的結構。
VGG-16可訓練引數分別位於 13 個卷積層 和 3個全連線層,共計16個,所以稱為 VGG-16。
VGG網路特徵:
- 小卷積核。將卷積核全部替換為3x3(極少用了1x1);
- 小池化核。相比AlexNet的3x3的池化核,VGG全部為2x2的池化核;
- 層數更深特徵圖更寬。基於前兩點外,由於卷積核專注於擴大通道數、池化專注於縮小寬和高,使得模型架構上更深更寬的同時,計算量的增加放緩;
- 我們先來分析VGG-16 網路各層可訓練引數,如下圖所示:
VGG-16的引數主要分佈在全連線層。
對比MobileNetV3-Large版本的各層可訓練引數,如下圖所示:
MobileNetV3-Large中去除了全連線層,並使用最佳化後的卷積結構,總可訓練引數數約5.4M個。而VGG-16 的可訓練引數約138.36M個,引數量是MobileNetV3-Large的約25.6倍。
MobileNetV3-Large引數更少的原因:
去除全連線層
對比分析表1中,VGG-16網路後面三層全連線層的引數數量佔整個網路是最多的, MobileNetV3-Large中使用了平均池化與逐點卷積代替了常規的全連線層,減少了引數量。
使用線性瓶頸結構
大量使用逐點卷積與深度卷積,透過線性瓶頸結構有效的減少了引數數量。
過多的訓練引數會造成訓練好的模型過大,MobileNetV3-Large訓練得出的模型只有約22MB,VGG-16模型則高達 500多MB。模型體積的縮小同時帶來的是計算量的縮小,在同等配置的硬體條件下,模型體積越小時訓練或預測的過程會更快。所以對於移動場景來說,在空間尺寸上MobileNetV3-Large是更適合移動裝置。
2
模型計算量對比
網路的時間複雜度主要是網路的訓練時間和網路的預測時間。網路的訓練時間和預測時間都跟網路的計算量有關。
時間複雜度統計,通常只考慮乘加操作(Multi-Adds)的數量,而且只考慮卷積層和全連線層等引數層的計算量,忽略批規範化操作和啟用層等等。一般情況,卷積層和全連線層也會忽略僅純加操作的計算量,如偏置加(bias)和殘差加(shotcut)等。
MobileNet與其他流行深度模型計算量及使用google Pixel-1手機執行速度的對比(單次從輸入到輸出的耗時)。
(資料來源綜合;)
下圖所示為VGG-16各層計算量統計,VGG-16使用標準卷積結構,計算量主要集中在卷積層,可看出標準卷積是十分耗費計算量的。VGG-16總計算量為:約15300M次。
下圖所示為MobileNetV3-Large各層計算量統計,MobileNetV3-Large最佳化後的卷積結構計算量得以降低很多,計算量總計 約219M次。
MobileNetV3-Large計算量更少的原因:
- 深度卷積和逐點卷積的大量使用
- 使用深度卷積和逐點卷積替換標準卷積,計算量成倍減少。
- 使用反向殘差結構
- 大量反向殘差結構,使得MobileNetV3-Large網路層數增加為49層,比VGG-16的層數更多(VGG-16為16層)。層數增加後引數反而比VGG-16更少,並保證了模型的準確率。
MobileNetV3-Large輸入圖片經過一次模型需要的浮點計算量為219M次,而VGG-16模型則需要使用的浮點計算量為15300M次,是MobileNetV3-Large的約70.8倍。計算量的減少使MobileNetV3-Large在時間尺寸上更適合移動裝置。
3、 具有競爭力的準確率
影像分類
MobileNet具有行業競爭力的準確率,在影像分類領域中分別和主流網路進行對比。
MobileNet在減少模型引數,減少計算量的同時也保證了模型具有優良的準確率。使用ImageNet 資料集分類,寬度因子和解析度因子都為1,對比Top1準確率(識別出機率最高的類別準確率),如下表所示
(資料來源)
在ImageNet資料集分類中,MobileNetV1、MobileNetV2網路在分類準確率上達到了VGG-16和GoogleNet的水平。最新推出的MobileNetV3效能更強悍。
MobileNetV3-Large版在ImageNet資料集上Top1準確率達到75.2%,計算量和引數量分別約為VGG-16的1.43%和3.9%。MobileNet使用極少的引數與計算量就能夠使效能達到甚至超過大型神經網路。
目標檢測
SSDLite是以標準SSD模型為基礎,使用深度可分離卷積替換SSD模型中的標準卷積而形成的全新網路結構。
將SSD模型中原本作為特徵提取網路的VGG-16替換為MobileNet。在MS COCO資料集中跑目標檢測任務,其效能和當前流行的目標檢測網路對比如下表所示:
(資料來源)
MobileNetV1+SSDLite 的mAP(平均精度)能達到22.2%,比SSD300少1%,計算量為SSD300的3.7%,引數量為SSD300的14.1%。
最新的MobileNetV3-Large+SSDLite 的mAP為22.0%,近似MobileNetV1+SSDLite,但是計算量為MobileNetV1+SSDLite的47.7%, 引數量為MobileNetV1+SSDLite的97.4%。對比SSD和YOLO目標檢測網路,MobileNet實現的目標檢測網路,在保證檢測正確率的同時成倍的降低了計算量和引數數量。
MobileNet各版本的指標對比
上文中將MobileNetV3-Large與VGG-16等的引數量、計算量、準確率(ImageNet資料集Top1)、在google Pixel-1手機上的實際執行速度等指標進行了對比。本章節將針對MobileNet自身各版本的指標進行對比。可以看到的的趨勢是引數量、計算量越來越小,準確率越來越高,執行速度越來越快。
1、 引數量對比
MobileNetV3版本使用SE結構,造成引數量比MobileNetV2增加。這樣犧牲了部分模型空間,換取模型精度的提高。
2、 計算量對比
MobileNet計算量逐步減少,在Pixel-1手機上的執行速度越來越快。
3、 準確率對比
最新的MobileNetV3實現了模型精度的大幅提升,同時Pixel-1手機實際執行速度還更快了。
MobileNetV3與NAS
單從MobileNetV3的網路結構和特性去看,相對於V1和V2版本也許不夠特別,但V3的特別之處在於網路結構是使用基於神經架構搜尋技術(NAS)學習出來的,使得V3得以將其他很多網路中的優秀特性都集於一身,而在V3之前的V1、V2版本中,網路結構則是由研究人員經過人工設計和計算得到的。本章節僅介紹MobileNetV3與NAS的一些相關內容,不對NAS的技術細節展開。
1、 NAS簡介
神經架構搜尋(Network Architecture Search, NAS),是一種試圖使用機器自動的在指定資料集的基礎上透過某種演算法,找到一個在此資料集上效果最好的神經網路結構和超引數的方法,可以一定程度上解決研究人員設計一個網路的耗時的問題。NAS甚至可以發現某些人類之前未曾提出的網路結構,這可以有效的降低神經網路的使用和實現成本。
目前市面上也已經出現了許多運用NAS技術的產品,如AutoML、OneClick.AI、Custom Vision Service、EasyDL等。
NAS技術不是在MobileNetV3中第一次使用的,在此之前也已經運用到了一些網路模型中,如NasNet、MNasNet、AmoebaNet、MobileNet。
2、 NAS原理
NAS的原理是給定一個稱為搜尋空間的候選神經網路結構集合(即搜尋空間包含了如:深度卷積、逐點卷積、常規卷積、卷積核、規範化、線性瓶頸、反向殘差結構、SE模組、啟用函式等等可作為原子的結構),用某種策略從中搜尋出最優網路結構。神經網路結構的優劣即效能用某些指標如精度、速度來度量,稱為效能評估。這一過程如下圖所示:
搜尋空間,搜尋策略,效能評估策略是NAS演算法的核心要素。搜尋空間定義了可以搜尋的神經網路結構的集合,即解的空間。搜尋策略定義瞭如何在搜尋空間中尋找最優網路結構。效能評估策略定義瞭如何評估搜尋出的網路結構的效能。對這些要素的不同實現得到了各種不同的NAS演算法。常見的演算法有:全域性搜尋空間、cell-based 搜尋空間、factorized hierarchical search space分層搜尋空間、one-shot 架構搜尋等,其中的最佳化演算法又有:基於強化學習的演算法、基於進化演算法的演算法、基於代理模型的演算法等。
3、 MobileNetV3中的NAS
MobileNetV3使用platform-aware NAS搜尋全域性網路結構的最佳化block,也就是從搜尋空間的集合中根據預定義的網路模板搜尋出網路結構;之後使用NetAdapt演算法針對block中的每一層搜尋需要使用的卷積核個數。搜尋出一種網路後需要進行效能評估。這時候需使用真實手機的cpu(MobileNetV3中使用pixel-1手機)執行TFLite Benchmark Tool進行效能評估。
搜尋網路流程如下圖:
MobileNet與其他網路結合
1、 目標檢測
SSDLite是使用深度可分離卷積替換SSD模型中的標準卷積而形成的。如下圖所示,SSDLite對比SSD模型引數量降低了7倍,乘法計算量降低了3.5倍。
(資料來源)
2、 語義分割
將DeepLabv3的特徵提取網路ResNet-101更換為MobileNetV1或V2。使用MobileNetV1時乘法計算量減少了4.9-5.7倍,用了MobileNetV2後加法數量比MobileNetV1還降低了2.5倍。
(資料來源)
上圖為相對ResNet-101的引數量和正確率的對比,可見使用MobileNet作為基礎網路,在準確率下降幅度不大的情況下,可以做到引數量和計算量大幅度下降。
3、 人臉識別
MobilefaceNets是一個從MobileNetV2衍生而來的擁有工業級精度和速度的輕量級人臉識別網路,模型大小隻有4MB,專為人臉識別任務設計,精度比肩大模型(FaceNet,Deep Face,Center Face等)。
MobilefaceNets從三個方面改進了MobileNetV2。即針對平均池化層,採用了可分離卷積代替平均池化層。針對人臉識別任務,採用ArcFace的損失函式進行訓練。針對網路結構,通道擴張倍數變小,使用Prelu啟用函式代替relu啟用函式。
在LFW人臉識別訓練集中與當前流行人臉識別模型對比。MobilefaceNets明顯準確率更高,速度更快,體積更小。
(資料來源)
未來
MobileNet從V1到V3的進化,就是在保證模型準確率的基礎上,儘可能的減少神經網路引數、減少計算量,並在此之上儘可能提升準確率。但我們更應該關注的並不是MobileNet網路結構本身,而是它的每個特性。
MobileNet使用了批規範化,參考並最佳化了Xception結構中的深度可分離卷積、ResNet中的瓶頸結構和殘差結構、MNasNet中的Squeeze-and-excitation結構,使用了全新的h-swish啟用函式等,從而進化出了現在良好的效果。可見MobileNet的演進之路是輕量級神經網路演進之路的縮影,業內各個模型的結構和優勢都是相互借鑑參考、改進。
新推出的MobileNetV3的特別之處在於網路結構是使用基於神經架構搜尋NAS技術學習出來的,將很多網路中的優點都集於一身,也許會由此帶起NAS研究的熱潮,讓機器自動為我們找尋更合適的神經網路結構,為生活中的各種場景的AI應用帶來無限可能!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29829936/viewspace-2649145/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 輕量級卷積神經網路的設計卷積神經網路
- 輕量級卷積神經網路的設計技巧卷積神經網路
- 輕量級神經網路:ShuffleNetV2解讀神經網路
- 神經網路的發展史神經網路
- 縱覽輕量化卷積神經網路:SqueezeNet、MobileNet、ShuffleNet、Xception卷積神經網路
- 神經網路篇——從程式碼出發理解BP神經網路神經網路
- 阿里巴巴開源輕量級深度神經網路推理引擎MNN阿里神經網路
- 淺聊卷積神經網路的發展卷積神經網路
- MnasNet:經典輕量級神經網路搜尋方法 | CVPR 2019神經網路
- 文字生成神經網路架構發展神經網路架構
- 聊聊從腦神經到神經網路神經網路
- 卷積神經網路學習筆記——輕量化網路MobileNet系列(V1,V2,V3)卷積神經網路筆記
- 從網路發展看無線網路故障排查需求
- 人工智慧中神經網路發展緩慢的原因人工智慧神經網路
- AI發展三境:神,神經,神經病AI
- 適合移動端的輕量級網路
- 卷積神經網路的引數量和計算量卷積神經網路
- 神經網路:numpy實現神經網路框架神經網路框架
- 用神經網路測量訓練集的半衰期神經網路
- 神經網路神經網路
- 如何輕鬆解鎖神經網路的數學姿勢神經網路
- Facebook在NAS領域的輕量級網路探索
- 【深度學習篇】--神經網路中的卷積神經網路深度學習神經網路卷積
- LSTM神經網路神經網路
- 8、神經網路神經網路
- BP神經網路神經網路
- 模糊神經網路神經網路
- 《Java EE網際網路輕量級框架整合開發》讀書筆記Java框架筆記
- 一文帶你瞭解卷積神經網路CNN的發展史卷積神經網路CNN
- 深度學習、神經網路最好的入門級教程深度學習神經網路
- core_framework —— 基於libev的輕量級lua網路開發框架Framework框架
- 圖神經網路GNN 庫,液體神經網路LNN/LFM神經網路GNN
- 從傳統的神經元網路轉變到深度學習網路深度學習
- 從網路架構方面簡析迴圈神經網路RNN架構神經網路RNN
- 為什麼說BP神經網路就是人工神經網路的一種?神經網路
- CICC科普欄目|神經網路淺講:從神經元到深度學習神經網路深度學習
- 【神經網路篇】--RNN遞迴神經網路初始與詳解神經網路RNN遞迴
- SqueezeNet/SqueezeNext簡述 | 輕量級網路