CNN論文導讀:MixConv: Mixed Depthwise Convolutional Kernels

黃顯堯
Taiwan AI Academy
Published in
16 min readFeb 11, 2020

[論文連結]

MixConv: Mixed Depthwise Convolutional Kernels

作者:Mingxing Tan, Quoc V. Le

1.Introduction

在現今無論是影像分類(Image classification),物體辨識(object detection)或是影像分割(Image segmentation),CNN皆被廣泛的使用。而最近對於CNN的要求,從原本單一的精確度,漸漸的也開始要求了效能,因此 Depthwise Convolutions 也因此越來越受歡迎,例如:MobileNet, ShuffleNets, NASNet, AmoebaNet, MnasNet以及EfficientNet。

Depthwise Convolution 與傳統的 Convolution的差別主要在於其並非是將所有的 kernel 同時對所有的 channel 做convolution,而是每個 kernel 分別對不同的 channel 做 convolution,透過這個方式,可以使得運算花費減少 C 倍,而 C 所代表的則是 channels 的數量。

而利用 depthwise convolutional kernl 設計一個 ConvNets 的時,往往會忽略了 kernel size。例如 mobilenetv2 當中皆全部使用 3*3 kernel ,但在近期的研究則顯示出使用 5*5 或是 7*7 kernel 可以改進準確度以及效能。因此這篇論文主要想要探討一個基本的問題,便是 “越大的 kernel 真的總是可以改進準確度嗎?”

從 AlexNet 開始,我們便知道每個 convolution kernel 主要目的便是擷取 local image pattern(e.g., edges in early stages and objects in later stages),而較大的 convolution kernel 會傾向擷取 high-resolution patterns,但也因此會需要較多的參數量和運算量。

但是,真的是越大的 kernel 真的總是可以增進準確度嗎?

因此為了解答這個問題,作者們利用 MobileNets 針對 kernel size 做了一些實驗,首先如下圖作者將 MobileNetV1 替換了每層的 kernel size,而結果發現,在 kernel size 從 3*3 至 7*7的時候,準確率會提昇,然而在繼續將 kernel size 加大之後,準確率則會大幅度的掉落,因此我們可以得到一個結論,過大的 kernel size 會同時傷到準確率和效能。

Accuracy vs kernel sizes

而實際上,其實這個觀察也很直覺,在非常極端的例子中,假如我們使 kernel size 相同於 input resolution,如此 CNN 其實也相當於一個 fully-connected network。因此這項實驗其實也間接的說明了對於單一的 kernel size 的限制,也是說:2. MixConv

我們既需要 large kernels 擷取 high-resolution patterns 同時也需要 small kernels 擷取 low-resolution patterns 以達到高準確率以及高效能。

基於上述的觀察,這篇論文提出了 mixed depthwise convolution(MixConv) ,其主要的概念為,在一次的 convolution operation 當中,我們同時利用了不同的 kernel sizes,使得我們可以輕易的同時擷取不同大小的特徵。下圖為 MixConv 的架構圖,也就是透過切分 channels 並分成多個 groups 的方式,可以使得不同的 groups 應用到不同的 kernel sizes。

Mixed depthwise convolution (MixConv)

而在這篇論文中也展示出了,透過這樣改動無論是在圖片分類或是物件偵測中皆可以比 MobileNet 有顯著的進步。

2. MixConv

MixConv 的概念為,在一次的 depthwise convolution operation 中,同時使用多個 kernel sizes,如此便可以使得 CNN 更輕易的從不同 input images 中擷取不同類型的 patterns。

2.1 MixConv Feature Map

而在正式開始講解 MixConv 之前,我們首先從最基本的 depthwise convolution 開始講起。假設 X 為一個 shape 為 (h, w, c) 的 input tensor,而其中 h, w, c 所代表的分別為 height, width, channel size。W 則為一個 shape 為 (k, k, c, m)的 depthwise convolutional kernel,其中 k*k, c, m ,分別代表的是 kernel size, input channel size 以及 channel multiplier。而 Y 則為一個 shape 為(h, w, c*m) 的 output tensor,而 h, w, c*m 分別為 height, wedith 以及 multipled output channel size,因此每個 feature map value 可以透過以下公式計算得到:

而不同於最基本的 depthwise convolution,MixConv 將 channels 切分成多個 groups 並對於每個 group 使用不同的 kernel sizes。更具體來說,input tensor 會被切割成 g 個 groups,因此原先 input tensor X,會被切成 <X1, …, Xg>,而所有切分成的 tensor 會含有相同的 width 以及 height,因此每個切分後的 tensor channel size 總和會相同於原先的 input tensor channel : C1 + C2 + … + Cg = C。而同樣的為了對每個 group 的 input tensor 進行 convolution,我們也需要將 convolutional kernel 分成 g groups <W1, …, Wg>,也因此對於第 t-th group 的 kernel 以及 input tensor,其 output 可以被透過以下公式進行計算:

而對於每個 group 進行 convolution 之後,我們可以得到 group 個 output tensor <Y1, …, Yg>,並將其 concate 之後,我們可以得到最後的 output tesnro 也就是以下公式:

而 Zo = Z1 + … + Zg = m*c

2.2 MixConv Design Choices

而 MixConv 是個極具有彈性的 convolution operation,以下將介紹其可以作為調整的部份

Group Size (g):

此參數決定了使用多少種不同的 kernel 來對於單個 input tensor 進行 convolution。在最極端的情況下,也就是 g = 1 ,MixConv 便會等同於最基本的 depthwise convolution。而在這篇論文的實驗當中,作者們發現在 g = 4 的時候,對於 MobileNet 來說是最為安全的,但在 Neural Architecture Search 的幫助之下,我們可以使得 group sizes 從1至5,使得model的準確率和效能更加的有彈性。

Kernel Size Per Group :

在理論上,每個 group 可以使用任意的 kernel size。但是假如兩個 group 使用了相同的 kernel size,其實便相當於將兩個不同的 group 合成為一個單一的 group。因此在這篇論文當中,作者便限制了每個 group 一定要使用不同的 kernel size。此外,因為較小的 kernel sizes 可以使得參數量和 FLOPS 較少,因此在這篇論文中強硬的規定了所有的 kernel sizes 一定要從 3*3 開始,並且依序往上加(5*5, 7*7, …)。舉例來說,group i 其 kernel size 一定會是 2i+1,例如一個在第 4 group 的 MixConv,其kernel sizes 便一定會是 {3*3, 5*5, 7*7, 9*9}。也因為這個限制,使得每個 group 的 kernel size 會先定義好,使得設計的過程可以更加簡化。

Channel Size Per Group :

在這篇論文當中,作者提出了兩個 channel partition method,分別是 Equal partition 以及 Exponential partition
(1) Equal partition:
每個 group 接會有相同數量的 filter
(2) Exponential partition:
第 i-th group 會有總 channel number 中的2的-i次方個。
舉例來說,一個有 4 group 的 MixConv 總共有 32 個 filter,假如使用 equal partition 的方式切分,則每個 group 的 channels 會是 (8, 8, 8, 8),而使用 exponential partition 的方式進行切割,則每個 group 的 channels 會是 (16, 8, 4, 4)。

2.3 MixConv Performance on MobileNets

由於 MixConv 可以很簡易的替換掉基本的 depthwise convolution,因此在這個章節,作者利用了 MixConv 替換了 MobileNets 其中的 depthwise convolution,並在 classification 以及 detection 中進行了實驗。

ImageNet Classification Performance :

MixConv performance on ImageNet

上圖為將 MoblieNetV1 以及 MobileNetV2 中原先的 3*3 depthwise convolution kernels 替換成更大的 kernel size 或是 MixConv ,且在 ImageNet 上所得到的結果。

值得注意的是,由於 MixConv 的 kernel size 總是從 3*3 開始,而最右邊的點切分成了 6 個 groups,因此其 kernel size 便為 {3*3, 5*5, 7*7, 9*9, 11*11, 13*13}。

而在此圖中我們可以發現以下:
(1) MixConv 比起最基本的 depthwise convolution來說,使用了較少的參數和運算量,並且也得到了較好的結果,因此我們可以說明使用了多個不同的 kernels 確實可以同時增進效能和準確率
(2) MixConv 相比與最基本的 depthwise convolution 來說,其準確率較不容易被較大的 kernel size 影響,也就是說 MixConv 這種同時使用了多個 kernel的方式可以對較大的 kernel sizes 擁有較穩定的準確率。

COCO Detection Performance :

同時作者也將 MixConv 基於 MobileNet 的架構,應用在 COCO object detection 上做實驗,實驗結果為下圖,可以發現除了 Image classification task 之外,MixConv 在物件辨識上一樣可以達到較高的準確率和效能。

Performance comparison on COCO object detection.

2.4 Ablation Study

MixConv for Single Layer :

為了展示每層每層對於準確度的影響,因此作者分別針對每一層一一替換成 (1) kernel size 為 9*9 的基本 depthwise convolution 或者 (2) kernel size 為 4個 groups {3*3, 5*5, 7*7, 9*9},的 MixConv ,來驗證較大的 kernel size 在不同層對於準確度的影響,結果如下圖:

Per-layer impact of kernel size

透過上圖,我們可以發現對於大部分的 layer 來說,大的 kernel size 並沒有對於準確度有很大的影響,但是在某些特定的層中(e.g., s2, stride 2),大的 kernel size 對於準確度確有較大的影響。
而除了上述的發現之外,我們也發現使用 MixConv 除了可以比一般的 depthwise convolution 使用更少的參數量和運算量,甚至可以有差不多或是更好的準確度。

Channel Partition Methods:

在這個實驗當中,主要想要比較的是對於 MixConv 的 channel 切割方式,上面有提到,在這篇論文中,作者提出了 equal partition 以及 exponential partition 兩種方式,而在理論上, exponential partition 的方式可以使用更少的參數量和更少的運算量,因為其分配了更多的 channel 給較小的 kernel,而實驗結果如下圖:

Performance of exponential partition (+exp) and dilated kernels (+dilated).

在上面的結果當中,對於 MobileNetV1 來說, exponential partition 的方式可以比 equal partition 還要表現的更好,但是假如要同時對於 MobileNetV1 和 MobileNetV2 來看,便無法的分辨哪種方法表現的更好,而對於 expontial partition 有可是因為較大的 kernel 無法分配到足夠的 channel 來擷取較 high-resolution 的特徵這個限制。

3. MixNet

為了更加驗證 MixConv 的可行性,作者們結合了現今當紅的 Neural Architecture Search(有關於 NAS 的介紹可以看前陣子寫的這篇 提煉再提煉濃縮再濃縮:Neural Architecture Search 介紹) 的方式,提出了一個基於 MixConv 所建構的 model,稱為 MixNet。

3.1 Architecture Search

MixNet 的基本設定和 MnasNet 和 FBNet,也就是使用 MobileNetV2 作為基本架構,並藉此搜索 best kernel size, expansion ratio, channel size, and other design choices。而 MixNet 的搜索架構,同時也包含了現今較為新穎的搜索空間 swish activation , squeeze-and-excitation module, and grouped convolutions with group size 1 or 2 for 1x1 convolutions。

然而不同於過往的 NAS 方式是利用基本的 depthwise convolution block 來進行搜索,MixNet 是利用 MixConv block 來進行搜索,而 MixConv 有5個搜索空間,分別為 g=1, …, 5。而為了減少搜索過程的複雜度,其將 MixConv 的 channel partition 固定為 equal partition 。

3.2 MixNet Performance on ImageNet

MixNet performance results on ImageNet 2012

上述這個表為 MixNet 在 ImageNet 上的表現,以及和現今較為主流的網路架構比較,而經過整個搜索的過程,作者們得到了 MixNet-S 和 MixNet-M,並將 MixNet-M 以 multiplier 1.3 的方式放大,並得到了 MixNet-L。

ImageNet performance comparison.

上圖視覺化了 ImageNet 的表現度比較,首先可以發現經由 NAS 所發現的網路,比起過去傳統手刻的網路擁有更好的準確度。

3.3 MixNet Architectures

MixNet architectures

上圖為 MixNet-S 以及 MixNet-M 的架構,而其皆使用了 MixConv 作為基本架構,而我們發現,在較前面的層數時,為了減低運算資源的使用量,網路會傾向於使用較小的 kernel,而在越後面的層數時,為了達到更好的準確率,會傾向於使用較大的 kernel。而不同於傳統的 depthwise convolution 的準確度會隨著 kernel size 的加大而減少的問題,MixNets 反而可以使用非常大的 kernel (e.g., 9*9, 11*11),而不會因此減少效能和準確度。

3.4 Transfer Learning Performance

而除了在 ImageNet 上面驗證 MixNet 的可行性,作者們也透過 transfer learning 的方式,實驗在 CIFAR-10/100, Oxford-IIIT Pets 以及 Food-101,下圖為這個各個 dataset 的詳細數量和類別。

Transfer learning datasets.
Transfer learning performance

而上圖的比較方法,皆是訓練於 ImageNet,並且透過 fine-tune 的方式,轉移到目標的 dataset,而結果也顯示出 MixNets 的表現比起過去的網路,可以達到更好的準確率以及更好的效能。

4. Conclusions

在這篇論文當中,作者們重新探討了 kernel size 對於 depthwise convolution 的影像,且改進過去 depthwise convolution 只能使用一種 kernel size 的限制,提出了改良的 MixConv,可以有效的增進準確度和效能,最後透過了 MixConv 結合了現今火熱的 NAS,所提出的 MixNets 架構,可以比起現今最好的 mobile ConvNets 都達到更好的準確率和效能。

--

--