Abstract
人們通常是在固定的計算資源下設計CNN,更多的計算資源也就意味着更高的準確率。本文系統地研究了模型的縮放,提出仔細地平衡網絡的深度、寬度和圖像分辨率可以得到更優的性能。基於此發現,作者提出了一個新的縮放方法,通過一個簡單而有效的複合係數來統一地縮放深度/寬度/分辨率的所有維度。作者證明該方法對 MobileNets 和 ResNet 的縮放是有效的。
更進一步,作者使用神經結構搜索方法設計了一個新的 baseline 網絡,對其進行縮放得到多個模型,叫做 EfficientNets,相較於之前的卷積網絡,它取得了更高的準確率和效率。其中 EfficientNet-B7 在ImageNet 上取得了 SOTA 的的 top-1 準確率, top-5 準確率,而推理時,該模型的大小要比現有的最優模型足足縮小了倍,速度快了倍。在 CIFAR-100上,它也取得了 的準確率。代碼位於:https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet
1. Introduction
對卷積網絡進行縮放,目的是取得更高的準確率。ResNet 可以用更多的層,從 ResNet-18 放大到 ResNet-200。最近GPipe 將一個baseline模型放大了4倍,在 ImageNet 上取得了 的top-1準確率。但是,人們一直沒有很好地理解網絡縮放的過程。最常用的網絡縮放的方式就是通過深度或寬度。另一個不常見但越來越受歡迎的方式就是通過圖像的分辨率。在以前的工作中,一般都是縮放其中的某一個維度 — 深度、寬度、圖像大小。儘管也可以任意地縮放兩個或三個維度,但是任意縮放需要繁瑣的人工調參,通常準確率和效率不會最優。
作者想要研究並重新思考卷積網絡的縮放。特別地,作者研究了一個核心問題:縮放網絡時,是否存在一個原則方法來指導我們,以取得更高的準確率和效率?作者通過試驗證明,平衡網絡的深度、寬度、分辨率非常重要,而且我們只需一個常數比例來縮放它們,就可以實現這種平衡。基於此發現,作者提出了一個簡單但有效的複合縮放方法。與傳統的方式不同,它們任意地縮放這些 factors,而本文方法是統一地縮放網絡的深度、寬度和分辨率,通過一組固定的縮放係數。比如,我們想要使用倍的計算資源,那麼我們可以簡單地增加網絡深度 倍,寬度倍,圖像大小倍,其中是常數係數,在原來的小模型上通過網格搜索來找到。圖2 展示了本文縮放方法和傳統方法的差異。
複合縮放方法是講的通的,因爲如果輸入圖像更大,網絡就需要更多的層來增加感受野,需要更多的通道來獲取更多的細粒度信息。實際上之前的理論研究與試驗結果都證明了,網絡的深度和寬度之間存在着某種關係,但是本文是第一個量化了三個維度之間的關係的。
作者證明該縮放方法對於 MobileNets 和 ResNets 都是非常管用的。值得注意的是,模型縮放的效果高度依賴於 baseline 網絡。所以作者使用神經結構搜索方法,設計了一個全新的 baseline 模型,然後對其進行縮放,得到一組模型,叫做 EfficientNets。圖1 總結了其在 ImageNet 上的表現,EfficientNets 領先其他模型許多。EfficientNet-B7 超過了目前最優的模型 GPipe 的準確率,但是參數量減少了 8.4倍,速度快了6.1倍。與廣泛使用的 ResNet 相比,EfficientNet-B4 將 ResNet-50 的top-1準確率從提升到了,而其FLOPS是差不多的。除了 ImageNet,EfficientNet 在其它數據集上也取得了不錯的效果。
2. Related Work
卷積網絡準確率:自從 AlexNet 贏了2012年 ImageNet 的比賽,卷積網絡越來越大,準確率也越來越高:2014 年 ImageNet 的冠軍是 GoogleNet,它有680萬個參數,取得了的準確率,2017年的冠軍是 SENet,它有1.45億個參數,取得了的準確率。最近GPipe進一步將 ImageNet top-1 的準確率推高到了,使用了5.57億個參數:它特別大,以至於必須用一個特殊設計的並行計算庫纔可以訓練,要將網絡分割開,每一部分用不同的加速器來訓練。雖然這些方法都是針對 ImageNet 設計的,但是最近的研究表明它們對其他的數據集和任務也適用,比如目標檢測。儘管對很多應用來說,準確率非常關鍵,但是通常硬件的內存有限制,因此要想得到更高的準確率,我們也要有更高的計算效率。
卷積網絡計算效率:深度卷積網絡通常都過度地參數化。模型壓縮是常用的降低模型大小的方法,但是要犧牲一些準確率來換取效率。隨着智能手機逐漸普及,我們需要設計一些適合移動端計算效率的卷積網絡,如 SqueezeNets,MobileNets 和 ShuffleNets。最近,神經結構搜索方法逐漸流行起來,它通過對網絡的深度、寬度和卷積核類型與大小大量地調參,實現的準確率要高於人工設計的移動端網絡。但是,如何將這些技巧應用在更大的模型中仍然有待探索,它的搜索空間更廣闊,調參的計算成本更高。本文中主要研究了超大模型的計算效率,超越目前最高的準確率。爲了實現此目標,作者使用了模型縮放方法。
模型縮放:對於不同的資源約束,我們有許多的方法來縮放網絡:ResNet 可以通過調節網絡深度來縮小或放大,而WideResNet 和 MobileNet 可以通過網絡的寬度來縮放。此外,更大的輸入圖像也有助於實現更高的準確率,但會造成FLOPS增加。儘管以前的研究表明,網絡的深度和寬度對卷積網絡的特徵提取能力很重要,但是如何有效地縮放卷積網絡,實現更高的準確率和效率仍有待探索。本文系統地研究了卷積網絡在深度、寬度和分辨率三個維度的縮放。
3. Compound Model Scaling
本部分,作者闡述了縮放問題,探討了四個不同的方法,並提出了一個全新的縮放方法。
3.1 Problem Formulation
一個卷積層可以定義爲一個函數:,其中是算子,是輸出張量,是輸入張量,形狀是,其中是空間維度,是通道維度。卷積網絡可以表示爲一組層:。在實際應用中,卷積網絡的層通常被分爲多個階段,各個階段的網絡結構類似。例如,ResNet 有5個階段,每個階段的層有着一樣的卷積類型,除了第一層執行下采樣。因此,我們將一個卷積網絡定義爲:
其中,表示在第個階段中,層重複了次,表示第層輸入張量的形狀。圖2(a)展示了一個代表性的卷積網絡,它的空間維度逐漸收縮,但是通道維度逐漸擴大,比如輸入形狀最開始是,最後輸出的形狀是。
一般的卷積網絡設計聚焦在找到最佳的層結構,而模型縮放則是擴大網絡的長度,寬度和分辨率大小,而不會改變baseline網絡中預定義的。通過將固定住,模型縮放就簡化了網絡設計問題,但是探索不同的仍然有很大的空間。爲了進一步縮小設計空間,作者規定所有的層必須用一個常量比例統一縮放。其目的就是在給定資源限制的情況下,最大化模型的準確率,它可以表述爲一個優化問題:
其中,是縮放網絡寬度、深度和分辨率的係數。是baseline網絡中與定義的參數。
3.2 縮放維度
第二個問題就是互相依賴,它們的值在不同的資源限制下不一樣。因此,傳統方法最多用一個維度來縮放卷積網絡:
深度(d):增加網絡的深度是最常用的方法。網絡越深,它越能獲得更豐富更復雜的特徵,在新任務上泛化能力越強。但是更深的網絡訓練起來也更困難,會有梯度消失的情況出現。儘管有一些技巧可以用來緩解這個問題,如短路連接、批歸一化等,但是模型的準確率提升就減少了:例如,ResNet-1000 雖然層數更多,但是它的準確率卻和ResNet-101差不多。圖3(中間)是一個試驗,它用不同的深度係數來放大baseline模型,但是可以看到準確率提升逐漸降低。
寬度(w):對於小模型來說,增加網絡的寬度也是一個常用的技巧。較寬的網絡更容易獲得細粒度特徵,也更容易訓練。但是,特別寬而又特別淺的模型在獲取高層級特徵方面是有困難的。圖3(左)顯示,隨着網絡越來越寬,越來越大,準確率很快就飽和了。
分辨率(r):輸入圖像分辨率越高,卷積網絡就能得到更多的細粒度特徵。早期卷積網絡都是用大小作爲輸入,但後來都轉用或作爲輸入,爲了實現更高的準確率。最近 GPipe 在ImageNet上取得了SOTA的準確率,它的輸入分辨率是。更高的分辨率,如在目標檢測中被廣泛採用。圖3(右)是增加網絡分辨率的效果,更高的分辨率可以提升準確率,但是分辨率要是已經非常高了,準確率提升也會降低(表示分辨率,表示分辨率)。
經過上述分析,作者發現:
Observation 1:縮放任一個維度可以提升準確率,但是隨着模型增大,準確率提升逐漸降低。
3.3 Compound Scaling
作者通過實驗發現,各個縮放維度之間並不互相獨立。對於高分辨率的圖像,我們應該增加網絡的深度,這樣更大的感受野所獲取的特徵就能涵蓋圖像中更多的像素點。因此如果分辨率較高時,我們應當增加網絡的深度,目的是獲得更多的細粒度特徵。這就表明,我們需要協調、平衡各個縮放維度,而不是單一地縮放某一個維度。
爲了驗證該想法,作者在不同的網絡深度和分辨率情況下,對比了寬度增加的效果,如圖4所示。如果我們不改變深度()和分辨率(),只增加網絡的寬度,準確率很快就會飽和。而當深度變爲,分辨率變爲時,在同樣的FLOPS成本下,增加寬度就可以取得更高的準確率。這些結果促成以下發現:
Observation 2:爲了實現更高的準確率和計算效率,平衡所有的維度(寬度、深度、分辨率)是非常關鍵的。實際上, 之前已經有一些工作在嘗試任意地平衡網絡的寬度和深度了,但是他們的調參過程非常繁瑣。
本文中,作者提出了一個複合縮放方法,使用一個複合係數統一地放大網絡的深度、寬度和分辨率:
其中,是常量,可以通過網格搜索來找。是一個用戶定義的係數,控制着多少額外的資源可以用於模型縮放,而則代表着如何分配這些額外的資源給網絡寬度、深度和分辨率。注意,一個常規網絡的FLOPS與是呈比例的,也就是說深度增加一倍,FLOPS也會增加一倍,而寬度增加一倍,FLOPS會增加四倍。在卷積網絡中,計算量最多的就是卷積操作,用上面的等式來縮放一個卷積網絡,FLOPS就會增加約。本文中,作者約束,這樣對於任一個新的,總的FLOPS只增加約倍。
4. EfficientNet 結構
因爲模型縮放並不會改變baseline模型層的算子,baseline模型的好壞就尤爲重要。作者使用現有的卷積網絡來評價其縮放模型,但是爲了更好地證明該縮放模型的有效性,作者設計了一個新的 baseline,叫做 EfficientNet。
作者使用一個多目標神經結構搜索方法來設計該baseline模型,同時優化準確率和FLOPS。作者使用了(和Tan 等人2019年論文中)一樣的搜索空間,將作爲優化目標,其中和表示模型m的準確率和FLOPS,是目標FLOPS,是一個用於平衡準確率和FLOPS的超參數。作者在這裏只優化FLOPS,而沒有優化 latency,因爲本文不是針對某一個硬件設備。作者搜索到了一個非常高效的網絡,將其稱作EfficientNet-B0,與MnasNet類似,除了EfficientNet-B0要稍微大一些,因爲它的FLOPS目標更大一些(本文FLOPS目標爲4億次)。表1顯示了EfficientNet-B0的結構,它主要的構建模塊是 mobile inverted bottleneck MBConv,作者也加入了 Squeeze-and-excitation 優化。
從baseline模型 EfficientNet-B0開始,作者通過如下兩步來進行復合縮放操作:
- 步驟1: 固定住,假設我們有多一倍的計算資源,基於等式2和3,對進行網格搜索。作者找到了EfficientNet-B0 的最優值,,約束條件是。
- 步驟2: 然後固定住作爲常量,用等式3中不同的來增大baseline模型,這樣得到了EfficientNet-B1 到 B7 這些模型(細節參見表2)。
注意,在一個大模型上直接搜索可能會得到更好的性能,但是搜索成本也非常高。本文方法在小型baseline模型上只搜索一次(步驟1),然後對其它模型使用同樣的縮放係數(步驟2)。