谷歌開源新模型EfficientNet:圖像識別效率提升10倍,參數減少88%

卷積神經網絡通常是再有限的資源下進行開發,然後在條件允許的情況下將其擴展到更大的計算資源上以獲得更好的準確率。谷歌AI的科學家們在論文《EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks》中系統地研究了模型擴展的問題,並提出了新的複合擴展法以及一個更高性能的EfficientNet,EfficientNet 模型的相關代碼和 TPU 訓練數據也已經在 GitHub 上開源。該論文已被ICML2019接收,AI前線對其進行了簡單地梳理總結,本文是AI前線第81篇論文導讀。

介紹

模型擴展被廣泛地用於提高卷積網絡的準確性。例如,ResNet系列可以通過增加層數從ResNet-18擴展到ResNet-200。谷歌的開源神經網絡訓練庫GPipe通過對基線網絡的四倍擴展可以在ImageNet數據庫上達到84.3%的top-1精度。然而,雖然有很多途徑對卷積網絡進行擴展,卻鮮有工作對其進行深入的理解。許多先前的工作都是針對神經網絡三個維度——深度、寬度和圖像大小中的一個因素進行調整。雖然對其中任意兩個或三個因素進行調整看起來是可行的,但實際上這需要大量的人工調參來達到勉強說的過去的提升。對於EfficientNet的效果,我們先來看張圖:

圖中橫座標表示參數量,縱座標表示ImageNet數據庫上的Top1準確率。可以看出EfficientNet系列完勝了其他所有的卷積網絡。其中,Efficient-B7取得了新的最高準確率,達到了84.4%。但是它的參數量相比GPipe減少了8.4倍,並且推理速度達到了GPipe的6.1倍。更加細節的數據可以參考後面的實驗部分。

研究動機

這篇文章的作者對神經網路的擴展過程進行了研究與反思。特別的是,作者提出了一個思考:能否找到一個規範化的神經網絡擴展方法可以同時提高網絡的準確率和效率。要實現這點,一個很關鍵的步驟便是如何平衡寬度、深度和分辨率這三個維度。作者通過一些經驗性的研究發現,可以使用一種固定比例的放縮操作簡單地實現對三者的平衡。最終,作者提出了一種簡單卻有效的複合擴展方法(compound scaling method)。例如,對於一個標準的模型,如果想使用2^N倍的計算資源,作者認爲只需要對網絡寬度增加α^N,深度增加β^N,以及增加γ^N倍的圖像大小。其中α、β、γ是一組恆定係數,他們的值通過在原始的標準模型中使用小範圍的網格搜索(grid search)得到。爲了直觀地說明本文提出的複合擴展方法與傳統方法的區別,作者提供了下圖作爲參考:

其中,(a)是一個基線網絡,(b)到(d)是三種不同的傳統方法,分別對寬度、深度和圖像分辨率進行了擴展,(e)是本文提出的複合擴展方法,使用固定比率同時對三個維度進行了擴展。直觀地講,複合擴展法是說得通的。因爲對於更大的輸入圖像,網絡需要更多的層來增加感受野,同時需要更多的通道來獲取細粒度的信息。總的來說這篇論文的核心工作主要分爲兩個方面:

  1. 提出了一種複合擴展方法,這是首次嘗試同時對卷積網絡的三種維度進行擴展的方法。該方法可以有效地提升現有的網絡結構在大規模計算資源上的訓練效果。

  2. 設計了一種新的性能卓越的網絡結構——EfficientNet。該網絡不僅性能遠超其他網絡結構,網絡參數還更少,推理速度更快。

複合模型擴展方法

這一部分將爲大家詳細介紹什麼是網絡擴展問題,並對不同的方法進行了研究,從而引出我們的主角:複合擴展法。

問題建模

卷積網絡的本質是一個映射函數,這個函數可以寫爲下面這個形式:

其中Fi表示第i層進行的運算,Xi是輸入的張量,我們假設這個張量的大小爲:
<Hi,Wi,Ci>。爲了方便推理,省去了張量的批大小信息。

通常,我們會使用多個疊加的子模塊來組成完整的卷積網絡。例如ResNet由5個子模塊構成,也被稱爲五個階段。除了第一個階段進行了降採樣外,每個階段中的所有層的卷積操作都是一樣的。因此,神經網絡也可以被定義爲下面這個形式(公式(1)):

其中,表示的是層Fi在第i階段被重複了Li次。<Hi,Wi,Ci>表示的是第i層的輸入張量X的形狀。當一個輸入的張量流經整個卷積網絡,它的空間維度通常會縮減,並伴隨着通道位數的增加,例如一個輸入爲<224,224,3>的張量經過一個特定的卷積網絡後它的形狀最終會變爲<7,7,512>。

對於一個神經網絡,作者假定所有的層都必須通過相同的常數比例進行統一的擴展。因此,模型擴展問題的可以表示爲(公式(2)):

其中w,d,r分別是擴展網絡的寬度、深度和分辨率。是基線網絡中預定義的網絡參數。

單維度擴展

解決公式(2)的一個難點就在於d,w,r彼此依賴,並且會由於不同的資源條件所改變。傳統方法主要集中於獨立地解決其中一個維度的擴展問題。下圖是改變每個維度對模型性能影響的部分實驗結果:

圖中從左至右分別表示的是不同寬度、深度、分別率係數對模型性能的影響。隨着寬度、深度、分辨率的提高,更大的網絡會獲得更好的準確率。但是,在達到80%後,準確率很快就趨於飽和,這說明了單維度的擴展是具有侷限性的。這裏的實驗結果均使用的是EfficientNet-B0作爲基線網絡,具體結構如下表所示:

表1:EfficientNet-B0網絡,每一行表示多層網絡的某個階段,resolution輸入張量大小,Channels表示輸出通道數。表中的符號與公式(1)中的符號意思

通過這一部分的比較作者得出:

觀察 1:對網絡的寬度、深度以及分辨率中的任意一項做擴展都可以提高其準確率,但是隨着模型越來越大,這種提升會逐漸縮小。

複合擴展

實際上,不同的擴展維度之間並不是各自獨立的。直觀地講,對於更高分辨率的圖像,應當使用更深的網絡,這樣會有更大的感受野對圖像進行採樣與特徵提取。同樣的,網絡的寬度也應該增加,這是爲了通過分高分辨圖像中更多的像素點來捕獲更加細粒度的模式。基於上述直覺,本文的作者做出了一個假——“我們應當平等地對不同的擴展維度進行平衡,而不是像傳統方法那樣僅進行單維度擴展。”

爲了驗證這個假設,作者比較了不同深度和分辨率下對網絡進行寬度擴展時的實驗結果:

上圖中每條線上的每個點表示模型在不同寬度係數配置下的效果。所有的基線網絡都使用表1中的結構。第一個基線網絡(d=1.0,r=1.0)有18個卷積層,其輸入的分辨率是224224。最後一個基線網絡(d=2.0,r=1.3)有36個卷積層,輸入分辨率爲299299。可以看出,在寬度不變得情況下,如果僅改變深度和分辨率,準確率很快趨於飽和。在FLOPS(每秒浮點運算次數)消耗相同的情況下,分辨率更高、網絡更深的模型可以獲得更好的準確度。通過這部分分析,作者得出:

觀察 2:爲了得到更好的準確率和效率,在卷積網絡擴展中,平衡網絡的寬度、深度和分辨率這三種維度是非常關鍵的一步。

事實上,一些類似的工作也嘗試過隨機的平衡網絡的寬度和深度,但是這些工作都需要冗長的手動微調。與上述方法不同,本文的作者提出了一種新的複合擴展方法。該方法使用一個複合係數Φ通過一種規範化的方式統一對網絡的深度、寬度和分辨率進行擴展:

其中α,β,γ是常數,它們有小型網絡搜索確定。Φ則是一個由用戶指定的擴展係數,它用來控制到底有多少資源是模型擴展可用的。對於一般的卷積操作,其FLOPS需求與d,w^2,r^2是成比例的。由於卷積網絡中最消耗計算資源的通常是卷積操作,因此使用公式(3)對網絡進行擴展會導致總FLOPS近似變爲。本文中作者使用公式對這三個參數進行了約束,因此,總FLOPS增加2^Φ。

EfficientNet結構

上面提到的模型擴展方法並不會改變基線網絡中每一層的運算操作,因此要想提升模型的準確率,有一個好的基線網絡也非常重要。在實驗部分,作者使用現有的卷積網絡對複合擴展法進行了評估。但是爲了更好地展示覆合擴展法的有效性,作者設計了一個新的輕量級基線網絡EfficientNet。(注:這裏的輕量級網絡表示可用於移動端的參數較少的卷積網絡。)

EfficientNet的結構已經在表1中列出,它的主幹網絡是由MBConv構成,同時作者採取了squeeze-and-excitation操作對網絡結構進行優化(見SENet,ILSVRC 2017冠軍)。對於Efficient-B0,若要使用複合擴展法對其進行擴大需要通過兩步來完成:

  • 第一步:首先將Φ固定爲1,假設至少有兩倍以上的資源可用,通過公式(2)和公式(3)對α,β,γ進行網格搜索。特別的是,對於EfficientNet-B0,在約束條件下,α,β,γ分別爲1.2,1.1和1.15時網絡效果最好。

  • 第二步:α,β,γ作爲常數固定,然後通過公式(3)使用不同Φ對基線網絡進行擴展,得到EfficientNet-B1到EfficientNet-B7

這裏之所以僅在小的基線網絡上使用網格搜索(步驟1)然後直接將參數擴展到大的模型上(步驟2)是因爲如果直接在大模型上進行參數搜索是非常昂貴且不可行的,因此作者採用了這種兩步走的方法確定模型的擴展參數。

實驗這一部分,作者首先對在廣泛使用的MobileNets以及ResNets上對他們提出的模型擴展法進行了驗證。其實驗結果如表三所示:

與單維度的擴展方法相比,複合擴展法在三種網絡模型上都有所提升,這說明覆合擴展法對於目前的現有網絡都是有效的。

隨後,作者在ImageNet數據庫上對EfficientNet進行了訓練。實驗結果表明EfficientNet模型在參數量和FLOPS方面比其他卷積網絡少一個數量級卻能得到近似的準確率。特別是Efficient-B7在top1達到了84.4%在top5達到了97.1%,比GPipe更加準確但模型小了8.4倍:

同時,作者也在常用的遷移學習數據集上對EfficientNet進行了評估。EfficientNet的性能較其他類型的網絡均有一致的提升。實驗結果如下圖所示:

爲了更深入地理解複合擴展法能取得更好效果的原因,作者對網絡的激活圖進行了可視化。比較了相同配置的基線網絡經過不同的擴展方法後激活圖的變化:

可以看出複合擴展法使得模型更加關注與目標細節相關的區域,而其他配置下的模型則無法很好的通過圖像捕捉目標的細節信息。

總結

本文作者通過對模型擴展方法方面存在地問題進行了討論,從如何權衡網絡的深度、寬度以及分辨率方面出發提出了複合擴展方法。並在兩種網絡結構MobileNets和ResNet上對這種擴展方法進行了驗證。此外,作者還通過神經結構搜索設計了一種新的基線網絡EfficientNet,並對其進行擴展得到了一系列的EfficientNets。在圖像分類標準數據集上,EfficientNets超越了之前的卷積網絡,並且EfficientNet參數量更少、推理過程更快。

論文原文鏈接:https://arxiv.org/abs/1905.11946

開源代碼地址:
https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章