【論文閱讀筆記】Searching for MobileNet V3

在這裏插入圖片描述
在這裏插入圖片描述
琦玉老師 和 龍捲(阿姨)小姐姐 告訴我一個道理——畫風越簡單,實力越強悍;

這篇論文只有四個詞,我只能說:不!簡!單!

(一)論文地址:

《Searching for MobileNet V3》

(二)核心思想:

  1. 使用了兩個黑科技:NAS 和 NetAdapt 互補搜索技術,其中 NAS 負責搜索網絡的模塊化結構,NetAdapt 負責微調每一層的 channel 數,從而在延遲和準確性中達到一個平衡;
  2. 提出了一個對於移動設備更適用的非線性函數 hswish[x]=xReLU6(x+3)6h-swish[x]=x\frac{ReLU6(x+3)}{6}
  3. 提出了 MobileNetV3LargeMobileNetV3-LargeMobileNetV3SmallMobileNetV3-Small 兩個新的高效率網絡;
  4. 提出了一個新的高效分割(指像素級操作,如語義分割)的解碼器(decoderdecoder);

(三)Platform-Aware NAS for Block-wise Search:

3.1 MobileNetV3-Large:

對於有較大計算能力的平臺,作者提出了 MobileNetV3-Large,並使用了跟 MnanNet-A1 相似的基於 RNN 控制器和分解分層搜索空間的 NAS 搜索方法;

3.1 MobileNetV3-Small:

對於有計算能力受限制的平臺,作者提出了 MobileNetV3-Small;

這裏作者發現,原先的優化方法並不適用於小的網絡,因此作者提出了改進方法;

用於近似帕累托最優解的多目標獎勵函數定義如下:

ACC(m)×[LAT(m)/TAR]wACC(m)×[LAT(m)/TAR]^w

其中 mm 是第 mm 個模型的索引,ACCACC 是模型的準確率,LATLAT 是模型的延遲,TARTAR 是目標延遲;

作者在這裏將權重因數 w=0.07w=-0.07 改成了 w=0.15w=-0.15,最後得到了一個期望的種子模型(initial seed model);

(四)NetAdapt for Layer-wise Search:

第二個黑科技就是 NetAdapt 搜索方法,用於微調上一步生成的種子模型;

NetAdapt 的基本方法是循環迭代以下步驟:

  1. 生成一系列建議模型(proposals),每個建議模型代表了一種結構改進,滿足延遲至少比上一步的模型減小了 δ\delta,其中 δ=0.01L\delta=0.01|L|LL 是種子模型的延遲;
  2. 對於每一個建議模型,使用上一步的預訓練模型,刪除並隨機初始化改進後丟失的權重,繼續訓練 TT 步來粗略估計建議模型的準確率,其中 T=10000T=10000
  3. 根據某種度量,選取最合適的建議模型,直到達到了目標延遲 TARTAR

作者將度量方法改進爲最小化(原文是最大化,感覺是筆誤):ΔAccΔlatency\frac{\Delta Acc}{\Delta latency}

其中建議模型的提取方法爲:

  1. 減小 Expansion Layer 的大小;
  2. 同時減小 BottleNeck 模塊中的前後殘差項的 channel 數;

(五)Efficient Mobile Building Blocks:

在這裏插入圖片描述
作者在 BottleNet 的結構中加入了SE結構,並且放在了depthwise filter之後;

由於SE結構會消耗一定的計算時間,所以作者在含有SE的結構中,將 Expansion Layer 的 channel 數變爲原來的1/4;
在這裏插入圖片描述
其中 SE 模塊首先對卷積得到的特徵圖進行 Squeeze 操作,得到特徵圖每個 channel 上的全局特徵,然後對全局特徵進行 Excitation 操作,學習各個 channel 間的關係,從而得到不同channel的權重,最後乘以原來的特徵圖得到最終的帶有權重的特徵;

(六)Redesigning Expensive Layers:

作者在研究時發現,網絡開頭和結尾處的模塊比較耗費計算能力,因此作者提出了改進這些模塊的優化方法,從而在保證準確度不變的情況下減小延遲;

6.1 Last Stage:

在這裏插入圖片描述
在這裏作者刪掉了 Average pooling 前的一個逆瓶頸模塊(包含三個層,用於提取高維特徵),並在 Average pooling 之後加上了一個 1×1 卷積提取高維特徵;

這樣使用 Average pooling 將大小爲 7×7 的特徵圖降維到 1×1 大小,再用 1×1 卷積提取特徵,就減小了 7×7=49 倍的計算量,並且整體上減小了 11% 的運算時間;

6.2 Initial Set of Filters:

之前的 MobileNet 模型開頭使用的都是 32 組 3×3 大小的卷積核並使用 ReLU 或者 swish 函數作爲激活函數;

作者在這裏提出,可以使用 h-switch 函數作爲激勵函數,從而刪掉多餘的卷積核,使得初始的卷積核組數從 32 下降到了 16;

(7)hard switch 函數:

之前有論文提出,可以使用 swishswish 函數替代 ReLU 函數,並且能夠提升準確率;

在這裏插入圖片描述
其中 switch 函數定義爲:

swish[x]=x×σ(x)swish[x]=x×\sigma(x),其中 σ(x)=sigmoid(x)=1/1+ex\sigma(x)=sigmoid(x)=1/(1+e^{-x})

由於 sigmaoid 函數比較複雜,在嵌入式設備和移動設備計算消耗較大,作者提出了兩個解決辦法:

7.1 h-swish 函數:

將 swish 中的 sigmoid 函數替換爲一個線性函數,將其稱爲 h-swish:

hh-swish[x]=xReLU6(x+3)6swish[x]=x\frac{ReLU6(x+3)}{6}

在這裏插入圖片描述

7.2 going deeper:

作者發現 swish 函數的作用主要是在網絡的較深層實現的,因此只需要在網絡的第一層和後半段使用 h-swish 函數;

(八)網絡結構:

8.1 MobileNetV3-Large:

在這裏插入圖片描述

8.2 MobileNetV3-Small:

在這裏插入圖片描述

(九)訓練細節:

使用了 Tensorflow 的 RMSPropOptimizer 優化器,並附加 0.9 的動量項;

初始化學習率爲 0.1,batch 大小爲 4096(每個 GPU 128);

每 3 個 epoch 學習率衰減 0.01;

使用了 0.8 的 dropout 和 1e-5 的 weight decay;

(十)實驗結果:

在這裏插入圖片描述

在這裏插入圖片描述
在這裏插入圖片描述

(十一)語義分割——Lite R-ASSP:

在這裏插入圖片描述

發佈了76 篇原創文章 · 獲贊 134 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章