[論文筆記] MobileNet演變史-從MobileNetV1到MobileNetV3

Jim Chen
11 min readApr 27, 2020

--

為什麼 MobileNet 可以比較快?

最近需要將 Deep Learning model 部署至移動式設備上,所以稍微研究了一下 MobileNet 的模型架構,這邊筆記一下研究心得,為何 MobileNet 的參數量可以遠小於其他神經網路架構,而在不降低太多 Performance 的情況下提高運算速度?

MobileNetV1 : Depth-wise Separable Convolution

MobileNetV1 的核心方法是透過兩個 Hyper parameters : Width multiplierResolution multiplier 控制模型的整體架構和參數量,並採用 Depth-wise Separable Convolution 做 Feature extraction。

雖然 Depth-wise Separable Convolution 並不是 MobileNet 原創,但卻是 MobileNet 即其後繼者能夠大幅降低運算資源的大功臣 。相較於傳統的 Convolutional layer, Depth-wise Separable Convolution 可以大幅的減少參數量而不會降低太多 Performance,詳細的運算原理可以參考 Tommy Huang這篇文章的說明,裡面圖文並茂寫得非常清楚。

這邊使用 tensorflow keras 比較 Depth-wise separable convolution 和一般 Convolution 所使用的參數量。

Convolution 的 Kernel size 為 5 × 5 , 總共給 10 個 Kernel (filter),輸入的圖片尺寸為 28 × 28 × 3

Code 1. Module used in the following example

一般的 Convolutional layer 總共會有 750 個參數。

# Convolution
5 × 5 × 10 × 3 = 750
Code 2. A keras example of convolution

而改用 Depth-wise separable convolutions,參數量可以大幅減少至 105 個。

# Depth-wise convolution
5 × 5 × 3 = 75
# Point-wise convolution
1 × 1 × 10 × 3 = 30
Code 3. A keras example of Depth-wise separable convolution

而參數減少的比例,論文中有給出公式可以計算 :

Formula 1. Reduction in computation of Depthwise separable convolution

其中,N = num_filters = 10, Dk = filter_size = 5 ,參數量降低至 14%,運算效能提升將近 7 倍。

1/10+1/(5×5) = 0.14 = 105/750

而兩個 Hyper-parameter 則是 trade-off,設定值可以根據使用者需求不同有所調整,論文中的實驗可以看到,在大幅降低計算量和參數量的狀況下, Performance還可以維持一定的水準(排頭參數為 Width Multiplier,224和128 則是 Resolution)。

Table 1. Performance comparison on different hyper-parameter set. (source)

MobileNetV2 : Inverted Residuals and Linear Bottlenecks

MobileNetV2 在 MobileNetV1 的 Depth-wise separable convolution 的基礎上,再增加了 Linear Bottlenecks 和 Inverted Residuals。

Inverted Residuals

一般 Residual block 是將 layers block 的 input 和 output 透過 Add 連結起來,而 block 內則通常是先降維再升維,如 Figure 1 (a), Inverted residuals 則是在 block (就是上面指的 linear bottleneck block) 內,將 input 升維再降維,如 Figure 1 (b)。

Figure 1. Residual block v.s Inverted residual block

Linear Bottlenecks

Inverted Residuals Block 內的「先升維再降維」的操作,就是 Bottleneck 的概念。

由於 Depth-wise convolution 輸出的 dimension 必會等於輸入的 dimension ,若要取出 High dimension 的 Feature map,只能透過增加後面 Point-wise convolution 的 feature map 數量來達成。

舉例來說,一張 28×28×3 的圖片,做 3×3的 Depth-wise convolution 後(假如 padding = 'same' ), output 的尺寸還是 28×28×3 ,後續才會做 Point-wise convolution 提高 output 的 dimension。

而 Low dimension 的 Input 去做 Depth-wise convolution 又會有什麼問題呢? 論文中裡面提到了一個假設 :

It has been long assumed that manifolds of interest in neural networks could be embedded in low-dimensional sub-spaces.

個人翻譯 : 假設神經網路中對於輸出有用的資訊,可以被嵌入在低維度的子空間中。

畢竟有用的資訊量也不可能比原始 input 圖片還要多,都會小於等於原始 input 的資訊量。

如果今天 Depth-wise convolution 輸出的維度不夠高,那麼真正有用的資訊應該會被鑲嵌在比輸出的 dimension 又更低的 dimension 之下。因此有用的特徵資訊僅能存於這 3 層的 Feature map 之中(以28×28×3 的圖片為例)。若沒有充足的 dimension 容納有用的特徵資訊,那麼經過 relu activation function 後,可能會導致輸出的值大多數皆為 0 而導致資訊量流失。

因此在經過 Depth-wise convolution 前,最好提高 input 的 dimension,這樣最後經過 Relu 後,可以避免大量 neuron 沒有被 activate 的情況。

Linear Bottlenecks 就是為了解決 Depth-wise convolution 的 low dimension 問題,因此在進行 Depth-wise convolution 之前,會先接一層 1x1 的 convolutional layer (其實就是 point-wise convolution),這層 layer 的目的就是用在增加輸入層的 dimension,增加的比例可以透過 expansion factor t 來控制。這種先升維再降維的操作,就是 Bottleneck 的核心思想。

Table 2. output shape of bottlenecks (source)

由於在 Point-wise convolution 後,dimension 的數量已經降回至原本 Input 的數量,所以在 Low dimension 的 layer , 論文中建議採用 Linear activation 而不是 Relu activation,以避免上面提到在低維度空間中,使用 Relu activation 可能會造成的資訊流失問題。而實驗結果也顯示,使用 Linear 的效果也比較好。

MobileNetV3 : Squeeze and Excitation with NAS

MobileNetV3 除了使用 AutoML 的技術做 Network Architecture Search (NAS),另外還加入了 SENet 的 Squeeze and Excitation 架構,透過 Global Average Pooling (GAP)計算每個 feature map 的權重,用來強化重要的 feature map 的影響力,並減弱不重要的 feature map 的影響力。

Figure 2. Squeeze and Excitation block (source)

Figure 2 為原文中 Squeeze and Excitation block (SE block) 的範例,左邊數來第二個 layer 為 SE block 的 input layer 。

Squeeze : Global Information Embedding

Fsq 為 Squeeze function,這邊使用 Global Average Pooling 針對每層 ( C層) Feature map 取全域平均 。 H × W × C 的 input shape 會得到 1 × 1 × C 的 output shape,C 即為每個 Feature map 的權重。

Excitation: Adaptive Recalibration

Fex 為 Excitation function,裡面分別為兩層 Fully Connected (FC) Layer,第一層 FC layer 搭配的是 Relu activate function,第二層 FC layer 搭配 Sigmoid activation function,output 的值即為每個 Feature map 的權重,最後再 Multiply 原本的 Input layer 。

Figure 3. Squeeze and Excitation block details (source)

在 SENet 的 paper 中,第二層的 FC Layer 是採用一般的 Sigmoid function當作 activation function,而在 MobileNetV3 中,則是改用 Hard sigmoid function,計算速度可以比 Sigmoid function 快,較適合部屬在移動設備,同時,原文中也提到,部分的 Relu activation function 改為使用 Hard-swish activation function,可在不增加太多運算量的情況下提升模型的 performance.

Code 4. A keras example of squeeze and excitation block (source)

結語

雖然許多經典架構不是 MobileNet 原創,但仍是在 MobileNet 上的應用最廣為人知,了解一下 MobileNet 的進化史還是可以豐富一下自己的 DL 知識庫。

EfficientNet 出來後,MobileNet 已經不再是輕量化模型的霸主。但 EfficientNet 還是繼承了許多 MobileNet 的精神,且 EfficientNet 的架構並沒有太大的創新,反而是透過 NAS with AutoML,將有限的架構發揮到極致的 Performance ,看來EfficientNet 還是得叫 MobileNet 一聲爹。

--

--

Jim Chen

A machine learning engineer. Sharing what I saw and what I learned.