MobileNet
(1)文章介紹
- google 201704在archive上的論文。
- 採用depthwise separable卷積核,減少計算量和模型大小。
- 引入了兩個超參數,用於選擇合適大小的模型。
- 在imagenet, object dectection, face atrributes,分類等任務上驗證了效果。
(2)核心思想
將標準卷積層分解爲depthwise conv和 pointwise conv(1*1)兩個卷積層。即一個depthwise separable卷積核包括depth wise卷積操作和pointwise卷積操作。
對於標準卷積,輸入大小爲D_f*D_f*M,輸出大小爲D_f *D_f *N,卷積核的大小爲D_k*D_k*M*N。(這裏假設stride爲 1,padding=0, 因此長寬不變)
標準卷積計算: F和G分別表示輸入和輸出特徵圖,(s=0, p=1, h_o = h_in -k + 1)
計算量分析:(要計算出D_f * D_f個值, 計算每個值需要對應的所有對應滑動窗口的值相乘,然後所有通道的值相加merge, 這裏加法的計算量忽略不計)
第一步爲depth wise卷積
對於輸入的每一個通道分別用1個D_k * D_k*1的卷積核進行卷積,共使用了M個卷積核,操作M次,得到M個D_f * D_f * 1的特徵圖。這些特徵圖分別是從輸入的不同通道學習而來,彼此獨立。
depth wise計算(注意與標準卷積對比,求和的下標裏面沒有m, 說明其實各個通道是獨立的,這裏將m次操作表達爲一個公式,論文中也表述depth wise kernel大小爲D_k * D_k * M, 但這個跟標準卷積核不一樣,M不代表卷積核的通道數)
計算量分析: (需要計算出 D_f * D_ f個值,每次的計算量爲 D_k * D_k, 循環M次)
第二步爲point wise卷積
對於上一步得到的M個特徵圖作爲M個通道的輸入,用N個1*1*M的卷積核進行標準卷積,得到D_f * D_f * N的輸出。
計算量分析: 計算量按標準卷積的公式,其中D_k = 1, 計算量爲1*1*M*N*D_f*D_f
節約計算量分析:
一般卷積核爲3*3,計算量能節省9倍左右。
(3)網絡結構設計
- 局部結構
- 輸入第一層不用deptwise separable convolution
- 每一層後面接bn與relu.(除了最後一層全連接層不接非線性直接接入softmax)
總的網絡結構
- 下采樣部分通過第一層卷積以及某些 depth wise convolution的stride =2實現。
- 最後一層的average pooling是爲了把輸出分辨率壓縮到1*1
- Mobile Net共28層
(3)實驗經驗
- 基本上所有的計算量均集中在1*1的conv操作上, GEMM的方法中有im2col的步驟,1*1conv不需要這個recording步驟。
- 對於depth wise filters採用很小或沒有的weight decay(L2 regularization)
(4)新的超參數
width multiplier: thinner models
將某個層的將輸入和輸出的channel 均壓縮
α 倍, 參數取值爲1,0.75,0.5,0.25. 可以將計算量和參數量減少α2 倍resolution multiplier:Reduced Representation
因子
ρ 將網絡輸入的大小降至224,192,160,128,可以將計算量減少ρ2 倍將網絡變瘦比將網絡變淺的效果要好,說明網絡深度的重要性。