自從 AlexNet 在 ImageNet 大賽中贏得冠軍,CNN 就在電腦視覺領域中越趨流行,而為了提高準確率,深度學習的模型架構就越來越複雜,以至於計算量大之外,速度方面也有所限制,導致這樣的模型很難應用在計算能力低的設備上
針對這個問題目前由兩方面來進行:
- 將模型輕量化,例如: 模型剪枝 (Model pruning)、模型量化 (Quantization)、權重共享 (Weight sharing) 、知識蒸餾 (Knowledge Distillation) 等
- 使用輕量化的模型進行訓練
本篇要介紹的是MobileNetV1 ,是一種輕量級的模型,由 2017 年提出,論文連接: https://arxiv.org/pdf/1704.04861.pdf
MobileNet v1 使用 Depthwise Separable Convolution 建構神經網路以及引入兩個超參數 Width Mutiplier、Resolution Multiplier 讓開發人員可以依據自己的應用與資源選擇合適的模型
Depthwise Separable Convolution
Depthwise Separable Convolution 包含了深度卷積 (depthwise convolution) 和逐點卷積 (pointwise convolution),與一般的卷積操作不同,核心思想就是把卷積過程的計算量減少
🔹 Depthwise Convolution
一般卷積的 filter 是用在所有的輸入通道上 (input channels),而 depthwise convolution 則對每個輸入通道採用不同的 filter,也就是說一個 filter 對應一個輸入通道,因此 depthwise convolution 可以說是 depth 級的操作
🔹 Pointwise Convolution
每個輸入通道做完 depthwise convolution 後,再採用 pointwise convolution 將輸出融合,其實就是使用 1x1 的卷積核做計算
如此的操作,輸出和一般的卷積層差不多,但是大大的降低了計算量及模型參數量,下圖是一般的卷積核與 Depthwise Separable Convolutional filter的比較圖
接下來比較一下兩種卷積的計算量差異
假設輸入的 feature map 尺寸為 DF x DF x M,輸出的 feature map 尺寸為 DF x DF x N,而filter 大小為 DK x DK x M x N
那一般的卷基層計算量為 DK x DK x M x N x DF x DF
采用 Depthwise Separable Convolution 的方式計算量:
先使用 M 個 DK x DK x 1 的 Depthwise Convolutional Filter 分別對每個輸入通道進行卷積得到 DF x DF x M 尺寸的輸出,這步的計算量為 DK x DK x M x DF x DF;再使用 N 個 1 x 1 x M 的filter 進行卷積得到 DF x DF x N 尺寸的輸出,這步的計算量為 M x N x DF x DF;所以總共的計算量會是 DK x DK x M x DF x DF + M x N x DF x DF
由下圖可以看到跟一般的卷積計算量相比,采用 Depthwise Separable Convolution 的方式能夠有效地降低計算量
來看一下範例,會更清楚一般卷積與 Depthwise Separable Convolution 的差異
假設輸入的 feature map 尺寸為 7x7x16、filter 尺寸為 3x3x16x32 (filter size, in_channel, out_channel)、stride=2、padding=1,則一般卷積的輸出尺寸會是 4x4x32,計算量為 3x3x16x32x4x4
若是採用 Depthwise Separable Convolution 的方式,輸入的 feature map 尺寸一樣為 7x7x16,會先使用 3x3x16 filter (filter size, in_channel)、stride=2、padding=1 對各通道做卷積運算後,得到輸出 feature map 的尺寸為 4x4x16,接著在使用 1x1x16x32 filter (filter size, in_channel, out_channel) 將通道維度融合,最後輸出尺寸一樣會是 4x4x32,而計算量為 3x3x16x4x4 + 16x32x4x4
將兩者相比會得到 — > (3x3x16x4x4 + 16x32x4x4) / 3x3x16x32x4x4 = 1/32 + 1/(3x3)
因此採用 Depthwise Separable Convolution 的方式能夠降低 1/32 + 1/(3x3) 倍的計算量
Network Structure
MobileNet v1 的網路結構如下圖所示。除了第一層使用一般的卷積層,剩下的卷積層都是使用 Depthwise Separable Convolution
所有的卷積層後面都會加入一個 BN 和 ReLU
Width Mutiplier: Thinner Models
雖然 MobileNet 網路架構已經比較小了,但在某些應用下還是需要更小更快的模型,因此引入了寬度因子 alpha (Width Mutiplier),在每一層的輸入輸出通道進行縮減,原本的輸入通道從 M 變為 alpha x M,輸出通道從 N 變為 alpha x N,變換後的計算量為 DK x DK x alpha x M x DF x DF + alpha x M x alpha x N x DF x DF
alpha 介於 (0, 1] 區間,典型的設定值為 1, 0.75, 0.5, 0.25,可以使計算量和參數量降低 (alpha)**2 倍
Resolution Multiplier: Reduced Representation
另外一個引入的超參數為分辨率因子 (Resolution Multiplier),用來控制輸入圖像的分辨率,也就是說 Rho 越小、輸入圖像就越小
變換後的計算量為 DK x DK x alpha x M x ρ x DF x ρ x DF + alpha x M x alpha x N x ρ x DF x ρ x DF
Rho 介於 (0, 1] 區間,典型的設定值為 224、192、160、128,可以使計算量降低 (alpha)**2 x ρ x ρ 倍,但參數量沒有影響
下圖是輸入為 14x14x512 feature map的計算量與參數量的比較 (DK=3, M=512, N=512, DF=14)
Model Choices
由 Table4 可以看到採用 Depthwise Separable Convolution 比全卷積層的計算量及參數還要來得少;Table5 的結果顯示將 MobileNet v1 with width multiplier 的準確率會比 Shallow MobileNet 好大約 3%,Shallow MobileNet 是指把前五層 14x14x512 的 Depthwise Convolutional Filter 去掉
Table6, Table7 是不同的 Width Multiplier 與 Resolution Multiplier 超參數的比較
Model Shrinking Hyperparameters
接著作者將 Width Multiplier 分別取 {1, 0.75, 0.5, 0.25} 與 MobileNet Resolution 分別取 {224, 192, 160, 128} 組合為 16種模型,並將計算量和參數量對應 ImageNet 準確率做比較
Table8 顯示了 MobileNet 跟 GoogleNet、VGG16 的比較,可以看到 MobileNet 比 GoogleNet 準確率更高,並且計算量小了2.7倍,參數量也比較少;與 VGG16 相比準確率略差一點,但是計算量小了27倍,參數量也少了32倍
Table9 顯示 MobileNet (Width Multiplier=0.5、Resolution Multiplier=160) 跟 Squeezenet、AlexNet的比較,可以看到 MobileNet 比 Squeezenet 準確率高了大概4%,並且計算量小了22倍;與 AlexNet 相比準確率高了大概4%,計算量小了9.5倍,參數量也少了45倍
Fine Grained Recognition 細粒度分類
作者將 MobileNet 用於 Stanford Dogs 數據集上做細粒度的分類,並對模型進行超參數的微調,以及與 Inception V3 做比較。由 Table10 可以得知 MobileNet 可以得到與 Inception V3 差不多的準確率,但是能夠大大的減少計算量與參數量
Large Scale Geolocalizaton 大規模地理位置的定位
PlaNet 是用於分類大規模地理定位的任務,分類該照片是位於地球的哪個位置。該方法是將地球依據目標類別劃分地域單元網格 (a grid of geographic cells),並在數百萬張帶有地理標籤的照片上訓練卷積神經網絡。PlaNet 已被證明可以成功地定位各種照片,並且勝過了解決同一任務的Im2GPS
作者使用 MobileNet 重新設計 PlaNet,再次與 PlaNet、Im2GPS 做比較。雖然相比之下,PlaNet MobileNet 的準確率稍微下降一些,但是使用 PlaNet 的參數量有5200萬個、計算量為 574億;而使用 PlaNet MobileNet 的參數量只有1300萬個 (主體參數為300萬個,剩餘的參數是用於最後的分類層)、計算量為 58萬,計算量與參數量相差了非常多之外,PlaNet MobileNet 的準確率還是比 Im2GPS 高很多
Face Attributes
在人臉分類任務中,作者使用 MobileNet 架構結合蒸餾訓練,不僅不需要做正則化,準確率可以達到跟 baseline 差不多的程度,並且計算量與參數量大幅的降低
Object Detection
作者將 MobileNet、VGG、Inception V2 在 Faster-RCNN 與 SSD framework 下進行比較。模型通過 COCO train + val set (排除8k張 minival) ,再由 minival 進行驗證
- 原始的COCO的檢測任務共含有80個類,在2014年發布的數據規模分train/val/test分別為80k/40k/40k
- COCO train + val set的作法是為了增加訓練集,將 val set 的一些資料分給training set,而剩餘的 val set 作為驗證集 (minival)
由 Table13 可以看到 MobileNet 在 Faster-RCNN 與 SSD framework 下可以實現與其他模型差不多的mAP,但計算量與參數量卻少很多
Face Embeddings
作者將MobileNet 與 FaceNet 做結合並利用蒸餾方法去訓練模型,損失函數是最小化 MobileNet 與 FaceNet 在訓練集上的輸出平方差。由 Table14 可以得知輕量模型 MobileNet 準確率略差一點,但計算量卻降低了5~15倍、參數量降低 1~2 倍
作者在這些實驗中驗證了 MobileNet 應用於各種任務的有效性,可以大幅地減少計算量與參數量,非常有利於在邊緣端上做推理預測