1. 程式人生 > >小白學mobilenet_v1:輕量級CNN

小白學mobilenet_v1:輕量級CNN

從2012年的Alexnet奪得 ILSVRC 2012冠軍開始,CNN在影象識別領域層出不窮,出現了各種各樣的網路架構,但是近年來都是依靠增加網路的深度和廣度來提高準確率的,需要大量的使用GPU。但是要注意的是,這些在學術上的成就並不能應用到現實中,因為計算資源需求太高,而現實中的裝置並沒有這麼強的算力。因此,作者提出了一種輕量級的CNN,大大減少了計算量,可以應用於手持裝置上。

下面我們直奔主題,看看mobilenet的體系結構,分析下為何它能夠實現輕量級,少計算吧!
其實,文章的核心思想挺簡單,就是分解卷及操作。


一、深度可分卷積

MobileNet模型基於深度可分卷積

(depthwise separable
convolution),這是一種分解卷積的形式,將標準卷積分解成深度卷積(depthwise convolution)和被稱為點卷積(pointwise convolution)的1x1卷積。
下圖顯示了深度可分卷積的主要原理:

  1. 首先,(a)表示了標準的卷積:對於HxWxM的feature map(通常H=W,M為通道數),有N個Dk xDk xM的過濾器來進行卷積操作

  2. (b)和(c)一起表示了深度可分卷積的處理步驟:
    明確一點:feature map是由M層HxW大小的特徵圖堆疊起來的。
    首先,filter的深度為1,也就是每個過濾器都作用在feature map的一層上,而不是和標準卷積那樣每個過濾器作用於所有通道,因此需要M個filter,這一步的處理影響了最後的feature map的size大小
    其次,用N個1x1xM的filter作用於b的輸出上,這是對所有通道上特徵的融合,這一步的處理影響了最後的feature map的深度
    好了,經過b和c的處理,最終的結果和標準卷積差不多了。
    在這裡插入圖片描述


    上述說明對照到原文這一段:
    在這裡插入圖片描述

二、mobilenet architecture

下圖是文中給出的mobilenet的結構。
其中,需要注意的是,第一層卷積是標準卷積,其餘的都是深度可分卷積構成的,最後連線了平均池化層和FC層以及softmax層
在這裡插入圖片描述
另外,為了加速收斂,作者也採取了batch normalization。值得注意的是,在每層的depthwise convolution和1x1convolution後,都需要進行BN和relu操作。
在這裡插入圖片描述

三、減少計算量的原理

這一段自然是一些數學表達:
標準卷積層的計算量如下圖所示。我們來簡單理解一下這個式子。
首先,input是DF

x DF x M , filter是DK x DK x M x N ,一個filter的計算量應該是 DK x DK x DF x DF x M(假設通過padding的方式使得輸出size和輸入size一樣,stride=1),那麼有N個filter,自然得到下列式子:
DK x DK x DF x DF x M x N
在這裡插入圖片描述

深度可分卷積的計算量如下:
這裡說的很清楚了,不多解釋
在這裡插入圖片描述

那麼有,兩個計算量之比為:
在這裡插入圖片描述
由於N通常比DK大很多,所以可以近似捨去,也就是說,如果我們採用3x3大小的卷積,能夠減少9倍的計算量。

四、超引數的選擇

上面給定的網路結構其實也不小,那麼如果想再精簡一些,該如何做呢?
一個想當然的想法是,我能不能再減少一些堆疊呢?很顯然,是可以的。
這裡作者給出了兩個超引數用於精簡模型和減少計算:
Width Multiplier: Thinner Models
Resolution Multiplier: Reduced Representation
下面我們一一介紹:

  1. Width Multiplier: Thinner Models
    設寬度乘數width multiplier為alpha,寬度乘數的作用是在每一層均勻地使網路變薄,因此對於一個給定的層和寬度乘數alpha,輸入通道數M就成了alpha x M , 輸出通道數N就成了alpha x N。
    計算量就降為:
    在這裡插入圖片描述
    其中,0 < alpha <=1,且alpha一般取值為1, 0.75, 0.5, 0.25
    不僅能減少計算量,引數量也可以減少,大概是原來的1 / (alpha)2

  2. Resolution Multiplier: Reduced Representation
    解析度乘數Resolution Multiplier,記為p(應該是希臘字母rou)。
    這個引數是用於縮減input的解析度的,因此,輸入DF x DF就變成了p x DF x p x DF,很顯然,這個超引數只能減少計算量,而不能減少引數數量。

結合以上兩個超引數,我們的計算量就有如下表達:
在這裡插入圖片描述

五、實驗結果

下面奉上實驗結果:
table4表明了標準卷機和深度可分卷積的差距:
準確率上深度可分卷積低1%,但是在運算量和引數數量上,根本不是一個數量級的。
在這裡插入圖片描述

table6-7表明了兩個超引數的選擇是精確度和檢測速度的一種trade-off
在這裡插入圖片描述