谷歌開源新模型 EfficientNet:圖像識(shí)別效率提升 10 倍,參數(shù)減少 88%
卷積神經(jīng)網(wǎng)絡(luò)通常是再有限的資源下進(jìn)行開發(fā),然后在條件允許的情況下將其擴(kuò)展到更大的計(jì)算資源上以獲得更好的準(zhǔn)確率。谷歌 AI 的科學(xué)家們在論文《EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks》中系統(tǒng)地研究了模型擴(kuò)展的問題,并提出了新的復(fù)合擴(kuò)展法以及一個(gè)更高性能的 EfficientNet,EfficientNet 模型的相關(guān)代碼和 TPU 訓(xùn)練數(shù)據(jù)也已經(jīng)在 GitHub 上開源。該論文已被 ICML2019 接收,AI 前線對其進(jìn)行了簡單地梳理總結(jié),本文是 AI 前線第 81 篇論文導(dǎo)讀。
介紹
模型擴(kuò)展被廣泛地用于提高卷積網(wǎng)絡(luò)的準(zhǔn)確性。例如,ResNet 系列可以通過增加層數(shù)從 ResNet-18 擴(kuò)展到 ResNet-200。谷歌的開源神經(jīng)網(wǎng)絡(luò)訓(xùn)練庫 GPipe 通過對基線網(wǎng)絡(luò)的四倍擴(kuò)展可以在 ImageNet 數(shù)據(jù)庫上達(dá)到 84.3% 的 top-1 精度。然而,雖然有很多途徑對卷積網(wǎng)絡(luò)進(jìn)行擴(kuò)展,卻鮮有工作對其進(jìn)行深入的理解。許多先前的工作都是針對神經(jīng)網(wǎng)絡(luò)三個(gè)維度——深度、寬度和圖像大小中的一個(gè)因素進(jìn)行調(diào)整。雖然對其中任意兩個(gè)或三個(gè)因素進(jìn)行調(diào)整看起來是可行的,但實(shí)際上這需要大量的人工調(diào)參來達(dá)到勉強(qiáng)說的過去的提升。對于 EfficientNet 的效果,我們先來看張圖:
圖中橫坐標(biāo)表示參數(shù)量,縱坐標(biāo)表示 ImageNet 數(shù)據(jù)庫上的 Top1 準(zhǔn)確率。可以看出 EfficientNet 系列完勝了其他所有的卷積網(wǎng)絡(luò)。其中,Efficient-B7 取得了新的***準(zhǔn)確率,達(dá)到了 84.4%。但是它的參數(shù)量相比 GPipe 減少了 8.4 倍,并且推理速度達(dá)到了 GPipe 的 6.1 倍。更加細(xì)節(jié)的數(shù)據(jù)可以參考后面的實(shí)驗(yàn)部分。
研究動(dòng)機(jī)
這篇文章的作者對神經(jīng)網(wǎng)路的擴(kuò)展過程進(jìn)行了研究與反思。特別的是,作者提出了一個(gè)思考:能否找到一個(gè)規(guī)范化的神經(jīng)網(wǎng)絡(luò)擴(kuò)展方法可以同時(shí)提高網(wǎng)絡(luò)的準(zhǔn)確率和效率。要實(shí)現(xiàn)這點(diǎn),一個(gè)很關(guān)鍵的步驟便是如何平衡寬度、深度和分辨率這三個(gè)維度。作者通過一些經(jīng)驗(yàn)性的研究發(fā)現(xiàn),可以使用一種固定比例的放縮操作簡單地實(shí)現(xiàn)對三者的平衡。最終,作者提出了一種簡單卻有效的復(fù)合擴(kuò)展方法(compound scaling method)。例如,對于一個(gè)標(biāo)準(zhǔn)的模型,如果想使用 2^N 倍的計(jì)算資源,作者認(rèn)為只需要對網(wǎng)絡(luò)寬度增加α^N,深度增加β^N,以及增加γ^N 倍的圖像大小。其中α、β、γ是一組恒定系數(shù),他們的值通過在原始的標(biāo)準(zhǔn)模型中使用小范圍的網(wǎng)格搜索(grid search)得到。為了直觀地說明本文提出的復(fù)合擴(kuò)展方法與傳統(tǒng)方法的區(qū)別,作者提供了下圖作為參考:
其中,(a)是一個(gè)基線網(wǎng)絡(luò),(b)到(d)是三種不同的傳統(tǒng)方法,分別對寬度、深度和圖像分辨率進(jìn)行了擴(kuò)展,(e)是本文提出的復(fù)合擴(kuò)展方法,使用固定比率同時(shí)對三個(gè)維度進(jìn)行了擴(kuò)展。直觀地講,復(fù)合擴(kuò)展法是說得通的。因?yàn)閷τ诟蟮妮斎雸D像,網(wǎng)絡(luò)需要更多的層來增加感受野,同時(shí)需要更多的通道來獲取細(xì)粒度的信息。總的來說這篇論文的核心工作主要分為兩個(gè)方面:
提出了一種復(fù)合擴(kuò)展方法,這是***嘗試同時(shí)對卷積網(wǎng)絡(luò)的三種維度進(jìn)行擴(kuò)展的方法。該方法可以有效地提升現(xiàn)有的網(wǎng)絡(luò)結(jié)構(gòu)在大規(guī)模計(jì)算資源上的訓(xùn)練效果。
設(shè)計(jì)了一種新的性能卓越的網(wǎng)絡(luò)結(jié)構(gòu)——EfficientNet。該網(wǎng)絡(luò)不僅性能遠(yuǎn)超其他網(wǎng)絡(luò)結(jié)構(gòu),網(wǎng)絡(luò)參數(shù)還更少,推理速度更快。
復(fù)合模型擴(kuò)展方法
這一部分將為大家詳細(xì)介紹什幺是網(wǎng)絡(luò)擴(kuò)展問題,并對不同的方法進(jìn)行了研究,從而引出我們的主角:復(fù)合擴(kuò)展法。
問題建模
卷積網(wǎng)絡(luò)的本質(zhì)是一個(gè)映射函數(shù),這個(gè)函數(shù)可以寫為下面這個(gè)形式:
其中 Fi 表示第 i 層進(jìn)行的運(yùn)算,Xi 是輸入的張量,我們假設(shè)這個(gè)張量的大小為:
<Hi,Wi,Ci>。為了方便推理,省去了張量的批大小信息。
通常,我們會(huì)使用多個(gè)疊加的子模塊來組成完整的卷積網(wǎng)絡(luò)。例如 ResNet 由 5 個(gè)子模塊構(gòu)成,也被稱為五個(gè)階段。除了***個(gè)階段進(jìn)行了降采樣外,每個(gè)階段中的所有層的卷積操作都是一樣的。因此,神經(jīng)網(wǎng)絡(luò)也可以被定義為下面這個(gè)形式(公式(1)):
其中, 表示的是層 Fi 在第 i 階段被重復(fù)了 Li 次。<Hi,Wi,Ci> 表示的是第 i 層的輸入張量 X 的形狀。當(dāng)一個(gè)輸入的張量流經(jīng)整個(gè)卷積網(wǎng)絡(luò),它的空間維度通常會(huì)縮減,并伴隨著通道位數(shù)的增加,例如一個(gè)輸入為 <224,224,3> 的張量經(jīng)過一個(gè)特定的卷積網(wǎng)絡(luò)后它的形狀最終會(huì)變?yōu)?<7,7,512>。
對于一個(gè)神經(jīng)網(wǎng)絡(luò),作者假定所有的層都必須通過相同的常數(shù)比例進(jìn)行統(tǒng)一的擴(kuò)展。因此,模型擴(kuò)展問題的可以表示為(公式(2)):
其中 w,d,r 分別是擴(kuò)展網(wǎng)絡(luò)的寬度、深度和分辨率。
是基線網(wǎng)絡(luò)中預(yù)定義的網(wǎng)絡(luò)參數(shù)。
單維度擴(kuò)展
解決公式(2)的一個(gè)難點(diǎn)就在于 d,w,r 彼此依賴,并且會(huì)由于不同的資源條件所改變。傳統(tǒng)方法主要集中于獨(dú)立地解決其中一個(gè)維度的擴(kuò)展問題。下圖是改變每個(gè)維度對模型性能影響的部分實(shí)驗(yàn)結(jié)果:
圖中從左至右分別表示的是不同寬度、深度、分別率系數(shù)對模型性能的影響。隨著寬度、深度、分辨率的提高,更大的網(wǎng)絡(luò)會(huì)獲得更好的準(zhǔn)確率。但是,在達(dá)到 80% 后,準(zhǔn)確率很快就趨于飽和,這說明了 單維度的擴(kuò)展是具有局限性的 。這里的實(shí)驗(yàn)結(jié)果均使用的是 EfficientNet-B0 作為基線網(wǎng)絡(luò),具體結(jié)構(gòu)如下表所示:
表 1:EfficientNet-B0 網(wǎng)絡(luò),每一行表示多層網(wǎng)絡(luò)的某個(gè)階段,resolution 輸入張量大小,Channels 表示輸出通道數(shù)。表中的符號(hào)與公式(1)中的符號(hào)意思
通過這一部分的比較作者得出:
觀察 1:對網(wǎng)絡(luò)的寬度、深度以及分辨率中的任意一項(xiàng)做擴(kuò)展都可以提高其準(zhǔn)確率,但是隨著模型越來越大,這種提升會(huì)逐漸縮小。
復(fù)合擴(kuò)展
實(shí)際上,不同的擴(kuò)展維度之間并不是各自獨(dú)立的。直觀地講,對于更高分辨率的圖像,應(yīng)當(dāng)使用更深的網(wǎng)絡(luò),這樣會(huì)有更大的感受野對圖像進(jìn)行采樣與特征提取。同樣的,網(wǎng)絡(luò)的寬度也應(yīng)該增加,這是為了通過分高分辨圖像中更多的像素點(diǎn)來捕獲更加細(xì)粒度的模式?;谏鲜鲋庇X,本文的作者做出了一個(gè)假——“我們應(yīng)當(dāng)平等地對不同的擴(kuò)展維度進(jìn)行平衡,而不是像傳統(tǒng)方法那樣僅進(jìn)行單維度擴(kuò)展。”
為了驗(yàn)證這個(gè)假設(shè),作者比較了不同深度和分辨率下對網(wǎng)絡(luò)進(jìn)行寬度擴(kuò)展時(shí)的實(shí)驗(yàn)結(jié)果:
上圖中每條線上的每個(gè)點(diǎn)表示模型在不同寬度系數(shù)配置下的效果。所有的基線網(wǎng)絡(luò)都使用表 1 中的結(jié)構(gòu)。***個(gè)基線網(wǎng)絡(luò)(d=1.0,r=1.0)有 18 個(gè)卷積層,其輸入的分辨率是 224 224。***一個(gè)基線網(wǎng)絡(luò)(d=2.0,r=1.3)有 36 個(gè)卷積層,輸入分辨率為 299 299。可以看出,在寬度不變得情況下,如果僅改變深度和分辨率,準(zhǔn)確率很快趨于飽和。在 FLOPS(每秒浮點(diǎn)運(yùn)算次數(shù))消耗相同的情況下,分辨率更高、網(wǎng)絡(luò)更深的模型可以獲得更好的準(zhǔn)確度。通過這部分分析,作者得出:
觀察 2:為了得到更好的準(zhǔn)確率和效率,在卷積網(wǎng)絡(luò)擴(kuò)展中,平衡網(wǎng)絡(luò)的寬度、深度和分辨率這三種維度是非常關(guān)鍵的一步。
事實(shí)上,一些類似的工作也嘗試過隨機(jī)的平衡網(wǎng)絡(luò)的寬度和深度,但是這些工作都需要冗長的手動(dòng)微調(diào)。與上述方法不同,本文的作者提出了一種新的復(fù)合擴(kuò)展方法。該方法使用一個(gè)復(fù)合系數(shù)Φ通過一種規(guī)范化的方式統(tǒng)一對網(wǎng)絡(luò)的深度、寬度和分辨率進(jìn)行擴(kuò)展:
其中α,β,γ是常數(shù),它們有小型網(wǎng)絡(luò)搜索確定。Φ則是一個(gè)由用戶指定的擴(kuò)展系數(shù),它用來控制到底有多少資源是模型擴(kuò)展可用的。對于一般的卷積操作,其 FLOPS 需求與 d,w^2,r^2 是成比例的。由于卷積網(wǎng)絡(luò)中最消耗計(jì)算資源的通常是卷積操作,因此使用公式(3)對網(wǎng)絡(luò)進(jìn)行擴(kuò)展會(huì)導(dǎo)致總 FLOPS 近似變?yōu)?。本文中作者使用公式
對這三個(gè)參數(shù)進(jìn)行了約束,因此,總 FLOPS 增加 2^Φ。
EfficientNet 結(jié)構(gòu)
上面提到的模型擴(kuò)展方法并不會(huì)改變基線網(wǎng)絡(luò)中每一層的運(yùn)算操作,因此要想提升模型的準(zhǔn)確率,有一個(gè)好的基線網(wǎng)絡(luò)也非常重要。在實(shí)驗(yàn)部分,作者使用現(xiàn)有的卷積網(wǎng)絡(luò)對復(fù)合擴(kuò)展法進(jìn)行了評估。但是為了更好地展示復(fù)合擴(kuò)展法的有效性,作者設(shè)計(jì)了一個(gè)新的輕量級基線網(wǎng)絡(luò) EfficientNet。(注:這里的輕量級網(wǎng)絡(luò)表示可用于移動(dòng)端的參數(shù)較少的卷積網(wǎng)絡(luò)。)
EfficientNet 的結(jié)構(gòu)已經(jīng)在表 1 中列出,它的主干網(wǎng)絡(luò)是由 MBConv 構(gòu)成,同時(shí)作者采取了 squeeze-and-excitation 操作對網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行優(yōu)化(見 SENet,ILSVRC 2017 冠軍)。對于 Efficient-B0,若要使用復(fù)合擴(kuò)展法對其進(jìn)行擴(kuò)大需要通過兩步來完成:
***步:首先將Φ固定為 1,假設(shè)至少有兩倍以上的資源可用,通過公式(2)和公式(3)對α,β,γ進(jìn)行網(wǎng)格搜索。特別的是,對于 EfficientNet-B0,在約束條件
下,α,β,γ分別為 1.2,1.1 和 1.15 時(shí)網(wǎng)絡(luò)效果***。
第二步:α,β,γ作為常數(shù)固定,然后通過公式(3)使用不同Φ對基線網(wǎng)絡(luò)進(jìn)行擴(kuò)展,得到 EfficientNet-B1 到 EfficientNet-B7
這里之所以僅在小的基線網(wǎng)絡(luò)上使用網(wǎng)格搜索(步驟 1)然后直接將參數(shù)擴(kuò)展到大的模型上(步驟 2)是因?yàn)槿绻苯釉诖竽P蜕线M(jìn)行參數(shù)搜索是非常昂貴且不可行的,因此作者采用了這種兩步走的方法確定模型的擴(kuò)展參數(shù)。
實(shí)驗(yàn)這一部分,作者首先對在廣泛使用的 MobileNets 以及 ResNets 上對他們提出的模型擴(kuò)展法進(jìn)行了驗(yàn)證。其實(shí)驗(yàn)結(jié)果如表三所示:
與單維度的擴(kuò)展方法相比,復(fù)合擴(kuò)展法在三種網(wǎng)絡(luò)模型上都有所提升,這說明復(fù)合擴(kuò)展法對于目前的現(xiàn)有網(wǎng)絡(luò)都是有效的。
隨后,作者在 ImageNet 數(shù)據(jù)庫上對 EfficientNet 進(jìn)行了訓(xùn)練。實(shí)驗(yàn)結(jié)果表明 EfficientNet 模型在參數(shù)量和 FLOPS 方面比其他卷積網(wǎng)絡(luò)少一個(gè)數(shù)量級卻能得到近似的準(zhǔn)確率。特別是 Efficient-B7 在 top1 達(dá)到了 84.4% 在 top5 達(dá)到了 97.1%,比 GPipe 更加準(zhǔn)確但模型小了 8.4 倍:
同時(shí),作者也在常用的遷移學(xué)習(xí)數(shù)據(jù)集上對 EfficientNet 進(jìn)行了評估。EfficientNet 的性能較其他類型的網(wǎng)絡(luò)均有一致的提升。實(shí)驗(yàn)結(jié)果如下圖所示:
為了更深入地理解復(fù)合擴(kuò)展法能取得更好效果的原因,作者對網(wǎng)絡(luò)的激活圖進(jìn)行了可視化。比較了相同配置的基線網(wǎng)絡(luò)經(jīng)過不同的擴(kuò)展方法后激活圖的變化:
可以看出復(fù)合擴(kuò)展法使得模型更加關(guān)注與目標(biāo)細(xì)節(jié)相關(guān)的區(qū)域,而其他配置下的模型則無法很好的通過圖像捕捉目標(biāo)的細(xì)節(jié)信息。
總結(jié)
本文作者通過對模型擴(kuò)展方法方面存在地問題進(jìn)行了討論,從如何權(quán)衡網(wǎng)絡(luò)的深度、寬度以及分辨率方面出發(fā)提出了復(fù)合擴(kuò)展方法。并在兩種網(wǎng)絡(luò)結(jié)構(gòu) MobileNets 和 ResNet 上對這種擴(kuò)展方法進(jìn)行了驗(yàn)證。此外,作者還通過神經(jīng)結(jié)構(gòu)搜索設(shè)計(jì)了一種新的基線網(wǎng)絡(luò) EfficientNet,并對其進(jìn)行擴(kuò)展得到了一系列的 EfficientNets。在圖像分類標(biāo)準(zhǔn)數(shù)據(jù)集上,EfficientNets 超越了之前的卷積網(wǎng)絡(luò),并且 EfficientNet 參數(shù)量更少、推理過程更快。
論文原文鏈接: https://arxiv.org/abs/1905.11946
開源代碼地址:
https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet