摘要
我們提出了一類高效的模型,稱為MobileNets,專門用于移動和嵌入式視覺應用。MobileNets基于一種簡化的架構,利用深度可分離卷積構建輕量級的深度神經網絡。我們引入了兩個簡單的全局超參數,能夠有效地在延遲和準確性之間進行權衡。這些超參數使得模型開發者能夠根據問題的約束選擇適合的模型。我們在資源和準確性之間的權衡上進行了廣泛的實驗,并展示了與其他流行模型相比,MobileNets在ImageNet分類任務上的強勁表現。隨后,我們展示了MobileNets在廣泛的應用和用例中的有效性,包括物體檢測、細粒度分類、面部屬性和大規模地理定位。
1. 引言
自從AlexNet[19]通過在2012年ImageNet挑戰賽(ILSVRC 2012)中獲勝而讓深度卷積神經網絡(CNN)廣為人知以來,卷積神經網絡已經在計算機視覺中變得無處不在。一般的趨勢是通過加深網絡的層數和增加網絡的復雜性來提高準確性[27, 31, 29, 8]。然而,這些提高準確性的進展并不一定使得網絡在大小和速度上變得更加高效。在許多現實應用中,如機器人、自駕車和增強現實,識別任務需要在計算資源有限的平臺上及時完成。
本文描述了一種高效的網絡架構和一組兩個超參數,用于構建非常小的、低延遲的模型,能夠輕松匹配移動和嵌入式視覺應用的設計需求。第二節回顧了構建小型模型的相關工作。第三節描述了MobileNet架構和兩個超參數:寬度乘數和分辨率乘數,用于定義更小、更高效的MobileNets。第四節介紹了在ImageNet上的實驗以及各種不同應用和用例。第五節總結并得出結論。
2. 相關工作
最近文獻中對構建小型高效神經網絡的興趣不斷上升,例如[16, 34, 12, 36, 22]。許多不同的方法可以大致分為兩類:壓縮預訓練網絡或直接訓練小型網絡。本文提出了一類網絡架構,使得模型開發者能夠根據應用的資源限制(延遲、大小)選擇合適的小型網絡。MobileNets主要集中在優化延遲,但也能生成小型網絡。許多關于小型網絡的論文只關注大小,而沒有考慮速度。
MobileNets主要由深度可分離卷積構建,深度可分離卷積最早在[26]中提出,并隨后在Inception模型[13]中使用,以減少前幾層的計算量。扁平化網絡[16]通過完全分解的卷積構建網絡,并展示了極度分解網絡的潛力。與本文無關的另一篇論文,Factorized Networks[34]引入了類似的分解卷積以及拓撲連接的使用。隨后,Xception網絡[3]展示了如何擴展深度可分離濾波器,從而超越Inception V3網絡。另一個小型網絡是Squeezenet[12],它通過瓶頸方法設計了一個非常小的網絡。其他減少計算量的網絡包括結構變換網絡[28]和深度卷積神經網絡[37]。
獲得小型網絡的另一種方法是壓縮、因式分解或壓縮預訓練網絡。基于乘積量化[36]、哈希[2]、剪枝、向量量化和霍夫曼編碼[5]等方法在文獻中有所提出。此外,已經提出了各種因式分解方法以加速預訓練網絡[14, 20]。另一種訓練小型網絡的方法是蒸餾[9],它使用較大的網絡來訓練較小的網絡。它與我們的方法是互補的,并在第四節的一些用例中有所涉及。另一個新興的方向是低位網絡[4, 22, 11]。
3. MobileNet架構
在本節中,我們首先描述MobileNet所基于的核心層——深度可分離卷積。接著,我們描述MobileNet的網絡結構,并最終介紹兩個用于縮小模型的超參數:寬度乘數(width multiplier)和分辨率乘數(resolution multiplier)。
3.1. 深度可分離卷積
MobileNet模型基于深度可分離卷積,這是一種因式分解卷積的形式,它將標準卷積分解為深度卷積和一個1×1卷積(稱為逐點卷積)。在MobileNet中,深度卷積對每個輸入通道應用一個單獨的濾波器。隨后,逐點卷積應用1×1卷積,將深度卷積的輸出進行合并。標準卷積同時進行濾波和合并操作,生成一個新的輸出集合;而深度可分離卷積將這個過程分解為兩層:一個單獨的濾波層和一個單獨的合并層。這種因式分解大大減少了計算量和模型大小。圖2展示了標準卷積(圖2a)是如何分解為深度卷積(圖2b)和1×1的逐點卷積(圖2c)。
標準卷積層的輸入是一個尺寸為 DF×DF×MD_F \times D_F \times MDF?×DF?×M 的特征圖 FFF,輸出是一個尺寸為 DF×DF×ND_F \times D_F \times NDF?×DF?×N 的特征圖 GSG_SGS?,其中 DFD_FDF? 是輸入特征圖的空間寬度和高度,MMM 是輸入通道數(輸入深度),DSD_SDS? 是輸出特征圖的空間寬度和高度,NNN 是輸出通道數(輸出深度)。
標準卷積層由一個大小為 DK×DK×M×ND_K \times D_K \times M \times NDK?×DK?×M×N 的卷積核 KKK 參數化,其中 DKD_KDK? 是卷積核的空間維度,假設其為正方形,MMM 是輸入通道數,NNN 是輸出通道數。
對于標準卷積,假設步幅為1且有填充,輸出特征圖的計算公式為:
Gk,l,n=∑i,j,mKi,j,m,n?Fk+i?1,l+j?1,m(1)\mathbf { G } _ { k , l , n } = \sum _ { i , j , m } \mathbf { K } _ { i , j , m , n } \cdot \mathbf { F } _ { k + i - 1 , l + j - 1 , m } \quad(1) Gk,l,n?=i,j,m∑?Ki,j,m,n??Fk+i?1,l+j?1,m?(1)
標準卷積的計算復雜度為:
DK?DK?M?N?DF?DF(2)D _ { K } \cdot D _ { K } \cdot M \cdot N \cdot D _ { F } \cdot D _ { F }\quad(2) DK??DK??M?N?DF??DF?(2)
其中,計算復雜度依賴于輸入通道數 MMM、輸出通道數 NNN、卷積核的大小 DK×DKD_K \times D_KDK?×DK? 和特征圖的大小 DF×DFD_F \times D_FDF?×DF?。MobileNet通過使用深度可分離卷積來解決這些因素及其相互作用,首先通過深度可分離卷積將輸出通道數與卷積核大小之間的相互作用解耦。
標準卷積操作通過卷積核對特征進行過濾,并將特征結合以生成新的表示。過濾和結合步驟可以通過使用因式分解卷積(稱為深度可分卷積)來分開,從而顯著減少計算成本。深度可分卷積由兩層組成:深度卷積和逐點卷積。我們使用深度卷積為每個輸入通道(輸入深度)應用一個濾波器。然后,使用逐點卷積,一個簡單的 1×1 卷積,來對深度層的輸出進行線性組合。MobileNet 在兩層中都使用批歸一化(batchnorm)和 ReLU 非線性函數。深度卷積使用每個輸入通道(輸入深度)一個濾波器可以寫成如下形式:
G^k,l,m=∑i,jK^i,j,m?Fk+i?1,l+j?1,m(3)\hat { \mathbf { G } } _ { k , l , m } = \sum _ { i , j } \hat { \mathbf { K } } _ { i , j , m } \cdot \mathbf { F } _ { k + i - 1 , l + j - 1 , m }\quad(3) G^k,l,m?=i,j∑?K^i,j,m??Fk+i?1,l+j?1,m?(3)
其中,K^\hat { \mathbf { K } }K^ 是大小為 DK×DK×MD _ { K } \times D _ { K } \times MDK?×DK?×M 的深度卷積核,其中 mthm _ { t h }mth? 個濾波器應用于 FFF 中的第 mthm _ { t h }mth? 通道,從而生成過濾后的輸出特征圖 G^\hat { \mathbf { G } }G^ 的第 mthm _ { t h }mth? 通道。
深度卷積的計算成本為:
DK?DK?M?DF?DF(4)D _ { K } \cdot D _ { K } \cdot M \cdot D _ { F } \cdot D _ { F }\quad(4) DK??DK??M?DF??DF?(4)
與標準卷積相比,深度卷積的計算效率極高。然而,它只過濾輸入通道,而不結合它們以生成新的特征。因此,需要一個額外的層來通過 1×11 \times 11×1 卷積對深度卷積的輸出進行線性組合,以生成這些新的特征。
深度卷積和 1×11 \times 11×1(逐點)卷積的組合稱為深度可分卷積,最早由 [26] 中提出。
深度可分卷積的計算成本為:
DK?DK?M?DF?DF+M?N?DF?DF(5)D _ { K } \cdot D _ { K } \cdot M \cdot D _ { F } \cdot D _ { F } + M \cdot N \cdot D _ { F } \cdot D _ { F }\quad(5) DK??DK??M?DF??DF?+M?N?DF??DF?(5)
這是深度卷積和 1×11 \times 11×1 逐點卷積的總和。
通過將卷積表示為過濾和結合的兩步過程,我們得到了計算上的降低:
DK?DK?M?DF?DF+M?N?DF?DFDK?DK?M?N?DF?DF=N ̄1+1DK2\frac { D _ { K } \cdot D _ { K } \cdot M \cdot D _ { F } \cdot D _ { F } + M \cdot N \cdot D _ { F } \cdot D _ { F } } { D _ { K } \cdot D _ { K } \cdot M \cdot N \cdot D _ { F } \cdot D _ { F } } = _ { \overline { { N } } } ^ { 1 } + \frac { 1 } { D _ { K } ^ { 2 } } DK??DK??M?N?DF??DF?DK??DK??M?DF??DF?+M?N?DF??DF??=N1?+DK2?1?
MobileNet 使用 3 × 3 的深度可分卷積,與標準卷積相比,計算量減少了 8 到 9 倍,同時準確度僅有小幅下降,如第 4 節所示。
在空間維度上進行額外的因式分解,例如在 [16, 31] 中所做的,實際上并不會節省太多計算,因為在深度卷積中消耗的計算量非常少。
3.2. 網絡結構和訓練
MobileNet 的結構基于前一節提到的深度可分卷積,唯一的例外是第一層,它是一個標準的卷積層。通過以如此簡單的方式定義網絡,我們能夠輕松探索網絡拓撲,從而找到一個合適的網絡。MobileNet 的架構定義如表 1 所示。除最后一個全連接層外,所有層后都跟有批歸一化(batchnorm)[13] 和 ReLU 非線性激活,最后的全連接層沒有非線性激活,輸出進入 softmax 層進行分類。圖 3 對比了常規卷積層(包括批歸一化和 ReLU 非線性激活)與因式分解層(包括深度卷積、1 × 1 逐點卷積,以及每個卷積層后的批歸一化和 ReLU)。下采樣通過在深度卷積以及第一層中使用步幅卷積(strided convolution)來處理。最終的平均池化層將空間分辨率減少到 1,之后是全連接層。將深度卷積和逐點卷積視為獨立的層時,MobileNet 一共有 28 層。
僅僅根據少量的 Mult-Adds 來定義網絡是不夠的,確保這些操作可以高效實現也同樣重要。例如,非結構化的稀疏矩陣運算通常并不比密集矩陣運算更快,除非稀疏度非常高。我們的模型結構將幾乎所有的計算都放在密集的 1 × 1 卷積中。這可以通過高度優化的通用矩陣乘法(GEMM)函數來實現。通常,卷積是通過 GEMM 來實現的,但需要在內存中進行初步重排,稱為 im2col,以便將其映射到 GEMM。例如,流行的 Caffe 包 [15] 就使用了這種方法。1 × 1 卷積不需要這種內存重排,可以直接通過 GEMM 實現,而 GEMM 是最優化的數值線性代數算法之一。MobileNet 將 95% 的計算時間花費在 1 × 1 卷積上,這也占據了 75% 的參數,如表 2 所示。幾乎所有的額外參數都在全連接層中。
MobileNet 模型在 TensorFlow [1] 中使用 RMSprop [33] 和類似于 Inception V3 [31] 的異步梯度下降進行訓練。然而,與訓練大型模型不同,我們使用較少的正則化和數據增強技術,因為小型模型在過擬合方面問題較少。在訓練 MobileNets 時,我們不使用側頭或標簽平滑(label smoothing),并且通過限制在大規模 Inception 訓練中使用的小裁剪的大小,減少圖像失真的數量。此外,我們發現,對于深度卷積濾波器,由于其中的參數非常少,因此非常重要的一點是幾乎不使用或完全不使用權重衰減(L2 正則化)。在接下來的 ImageNet 基準測試中,所有模型都使用相同的訓練參數,無論模型的大小如何。
3.3. 寬度乘數:更精簡的模型
盡管基礎的 MobileNet 架構已經很小且延遲低,但許多特定的使用場景或應用可能需要模型更小、更快。為了構建這些更小且計算開銷更低的模型,我們引入了一個非常簡單的參數 α,稱為寬度乘數。寬度乘數 α 的作用是均勻地在每一層對網絡進行縮減。對于給定的層和寬度乘數 α,輸入通道數 M 變為 αMαMαM,輸出通道數 N 變為 αNαNαN。
深度可分卷積的計算成本在寬度乘數 Q 下為:
DK?DK?αM?DF?DF+αM?αN?DF?DF(6)D _ { K } \cdot D _ { K } \cdot \alpha M \cdot D _ { F } \cdot D _ { F } + \alpha M \cdot \alpha N \cdot D _ { F } \cdot D _ { F }\quad(6) DK??DK??αM?DF??DF?+αM?αN?DF??DF?(6)
溫馨提示:
閱讀全文請訪問"AI深語解構" MobileNets: 高效的卷積神經網絡用于移動視覺應用