什么是EfficientNet
EfficientNet的設(shè)想就是能否設(shè)計一個標(biāo)準(zhǔn)化的卷積網(wǎng)絡(luò)擴(kuò)展方法,既可以實(shí)現(xiàn)較高的準(zhǔn)確率,又可以充分的節(jié)省算力資源。因而問題可以描述成,如何平衡分辨率、深度和寬度這三個維度,來實(shí)現(xiàn)網(wǎng)絡(luò)在效率和準(zhǔn)確率上的優(yōu)化
復(fù)合模型縮放法(compound scaling methd)
谷歌給出的調(diào)整方法,以此來實(shí)現(xiàn)三個維度上的平衡,讓網(wǎng)絡(luò)的準(zhǔn)確率最大化

在上圖中,(a)模型為baseline,(b)-(d)在(a)的基礎(chǔ)上分別進(jìn)行了單一維度的調(diào)整,而(e)則同時對三個維度同時進(jìn)行了一定的調(diào)整
把擴(kuò)展轉(zhuǎn)化為數(shù)學(xué)問題進(jìn)行描述
首先,我們把整個卷積網(wǎng)絡(luò)稱為N,他的第i個卷積層可以看作下面的函數(shù)映射:
Y_i是輸出張量,X_i是輸入張量,假設(shè)這個X_i的維度是<Hi,Wi,Ci>
最后,我們可以把講卷積網(wǎng)絡(luò)N定義為:

其中,下表1…s表示stage的訊號,F(xiàn)_i表示對第i層的卷積運(yùn)算,L_i的意思是F_i在第i個stage中有Li個一樣結(jié)構(gòu)的卷積層。<Hi, Wi, Ci>表示第i層輸入的shape。
為了減小搜索空間,作者先固定了網(wǎng)絡(luò)的基本結(jié)構(gòu),而只改變上面公式中的三個縮放維度
- L_i就是網(wǎng)絡(luò)的深度
- C_i就是通道數(shù),既網(wǎng)絡(luò)的寬度
- H_i,W_i是分辨率
就算如此,這也有三個參數(shù)要調(diào)整,搜索空間也是非常的大,因此EfficientNet的設(shè)想是一個卷積網(wǎng)絡(luò)所有的卷積層必須通過相同的比例常數(shù)進(jìn)行統(tǒng)一擴(kuò)展,這句話的意思是,三個參數(shù)乘上常數(shù)倍率。所以個一個模型的擴(kuò)展問題,可以轉(zhuǎn)化為一個規(guī)劃問題:

其中,優(yōu)化的目標(biāo)為模型的準(zhǔn)確率,而約束條件為計算資源。這個算式表現(xiàn)為在給定計算內(nèi)存和效率的約束下,如何優(yōu)化參數(shù)d、w和r來實(shí)現(xiàn)最好的模型準(zhǔn)確率。
實(shí)驗(yàn)內(nèi)容
對于需要調(diào)整的三個維度:
-
Depth: The intuition is that deeperConvNet can capture richer and more complex features, and
generalize well on new tasks.
Width: wider networks tend to be able to capture more fine-grained features and are easier to train.
Resolution: With higher resolution input images, ConvNets can potentially capture more fine-grained patterns.
- 第一個實(shí)驗(yàn),對三個維度固定了兩個,只縮放其中一個,得到結(jié)果如下:

結(jié)論:三個維度中任一維度的放大都可以帶來精度的提升,但是隨著倍率的越來越大,提升越來越小。
- 第二個實(shí)驗(yàn),嘗試在不同的d,r組合下變動w,得到下圖:

從實(shí)驗(yàn)結(jié)果來看,最高精度相比之前已經(jīng)有所提升,而且組合不同,效果不同。作者又得到了一個觀點(diǎn):得到了更高的精度以及效率的關(guān)鍵是平衡網(wǎng)絡(luò)的寬度,網(wǎng)絡(luò)深度,網(wǎng)絡(luò)分辨率三個維度的縮放倍率
之后,作者提出了模型復(fù)合縮放方法:

考慮到如果網(wǎng)絡(luò)深度翻番那么對應(yīng)的計算量翻倍,網(wǎng)絡(luò)寬度和圖像分辨率翻番對應(yīng)的計算量會翻4倍,卷積操作的計算量與d,w^2, r^2 成正比。在這個約束下,網(wǎng)絡(luò)的計算量大約是之前的2^? 倍.
EfficientNet的網(wǎng)絡(luò)結(jié)構(gòu)
EfficientNet使用了MobileNet V2中的MBCConv作為模型的主干網(wǎng)絡(luò),同時也是用了SENet中的squeeze and excitation方法對網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行了優(yōu)化。

對于EfficientNet-B0這樣的一個基線網(wǎng)絡(luò),如何使用復(fù)合擴(kuò)展發(fā)對該網(wǎng)絡(luò)進(jìn)行擴(kuò)展呢?主要就是分兩步走:

最后,作者便由此擴(kuò)展出了一系列的網(wǎng)絡(luò)結(jié)構(gòu),如下所示:

而對于普通人來說做擴(kuò)展的代價過于昂貴,所以最好的方法便是進(jìn)行遷移學(xué)習(xí)
遷移學(xué)習(xí)和finetune的區(qū)別
- finetune:我們假設(shè)在Resnet101后面加上一個全連接層,然后我們鎖住前面Resnet的參數(shù),不參加梯度更新,然后只更新最后一個全連接層的參數(shù)。當(dāng)全連接層的loss足夠小的時候,再釋放所有的參數(shù)一起訓(xùn)練。這樣Resnet的參數(shù)也會微微調(diào)整,這就是finetune;
- 遷移學(xué)習(xí):就不再訓(xùn)練之前的網(wǎng)絡(luò),而是把之前網(wǎng)絡(luò)的輸出的特征看作為我們自己網(wǎng)絡(luò)的輸入特征而已,而不再是一個要訓(xùn)練的網(wǎng)絡(luò)的概念