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















































