EfficientNetV2:更小,更快,更好的EfficientNet

語言: CN / TW / HK

點選上方“AI公園”,關注公眾號,選擇加“星標“或“置頂”

因公眾號更改了推送規則,記得讀完點“在看”~下次AI公園的新文章就能及時出現在您的訂閱列表中


作者:Mostafa Ibrahim

編譯:ronghuaiyang

導讀

相比於之前的SOTA,訓練速度快了5~10x,而且效能更高。

論文:https://arxiv.org/pdf/2104.00298.pdf

程式碼:https://github.com/google/automl/efficientnetv2

通過漸進學習,我們的EfficientNetV2在ImageNet和CIFAR/Cars/Flowers資料集上顯著優於之前的模型。通過在相同的ImageNet21k上進行預訓練,我們的EfficientNetV2在ImageNet ILSVRC2012上實現了87.3%的top1精度,在使用相同的計算資源進行5到11倍的訓練時,比最近的ViT的準確率高出2.0%。程式碼可以在https://github.com/google/automl/efficientnetv2上找到。

EfficientNets已經成為高質量和快速影象分類的重要手段。它們是兩年前釋出的,非常受歡迎,因為它們的規模讓它們的訓練速度比其他網路快得多。幾天前谷歌釋出了EfficientNetV2,在訓練速度和準確性方面都有了很大的提高。在本文中,我們將探索這個新的EfficientNet是如何對之前的一個進行改進的。

效能更好的網路(如DenseNets和EfficientNets)的主要基礎是用更少的引數實現更好的效能。當你減少引數的數量時,你通常會得到很多好處,例如更小的模型尺寸使它們更容易放到記憶體中。然而,這通常會降低效能。因此,主要的挑戰是在不降低效能的情況下減少引數的數量。

這一挑戰目前主要集中在神經網路體系結構搜尋(NAS)這一日益成為熱點的領域。在最優情況下,我們給某個神經網路一個問題描述,然後它就會給出這個問題的最優網路結構。

我不想在這篇文章中討論EfficientNets 。但是,我想提醒你EfficientNets的概念,這樣我們就可以精確地指出在架構上的主要差異,從而使效能更好。EfficientNets使用NAS來構建一個基線網路(B0),然後他們使用“複合擴充套件”來增加網路的容量,而不需要大幅增加引數的數量。在這種情況下,最重要的度量指標是FLOPS(每秒浮點運算次數),當然還有引數的數量。

1. 漸進式訓練

EfficientNetV2使用了漸進式學習的概念,這意味著儘管在訓練開始時影象大小最初很小,但它們逐漸增大。這個解決方案源於這樣一個事實,即EfficientNets的訓練速度在大影象尺寸時開始受到影響。

漸進式學習並不是一個新概念,它在以前已經被使用過。問題是,以前使用的時候,相同的正則化效果被用於不同大小的影象。EfficientNetV2的作者認為這降低了網路容量和效能。這就是為什麼他們會隨著影象大小的增加而動態增加正規化來解決這個問題。

如果你仔細想想,這很有道理。在小影象上過度正則化會導致擬合不足,而在大影象上過度正則化會導致過擬合。

通過改進的漸進學習,我們的EfficientNetV2在ImageNet、CIFAR-10、CIFAR- 100、Cars和Flowers資料集上取得了強大的結果。在ImageNet上,我們實現了85.7%的top-1精度,同時訓練速度提高了3 - 9倍,比以前的模型小6.8倍

2. 在MB Conv層上構建Fused-MB Conv層

EfficientNets使用了一個稱為“depth convolution layer”的卷積層,這些層有較少的引數和FLOPS,但它們不能充分利用GPU/CPU。為了解決這一問題,最近發表了一篇題為“MobileDets: Searching for Object Detection Architectures for Mobile accelerator”的論文,該論文通過一個名為“Fuse-MB Conv layer”的新層解決了這一問題。這個新層被使用在這裡的EfficientNetV2上。然而,由於其引數較多,不能簡單地將所有舊的MB Conv層都替換成Fused-MB Conv層。

這就是為什麼他們使用訓練感知NAS來動態搜尋fused和常規MB Conv層的最佳組合。NAS實驗結果表明,在較小的模型中,早期將部分MB Conv層替換為fused層可以獲得更好的效能。研究還表明,MB Conv層(沿網路)的擴充套件比越小越好。最後,它表明更小的核心大小和更多的層是更好的。

3. 一個更加動態的方法去擴充套件

我認為這裡值得學習的一個主要有價值的想法是他們改進網路的方法。我認為總結這一方法的最好方法是首先用EfficientNet來檢視問題,這是顯而易見的,但接下來的步驟是開始制定一些更動態的規則和概念,以便更好地適應目標和目的。我們首先在漸進式學習中看到了這一點,當他們使正則化更加動態,以便更好地適應影象大小,提高了表現。

我們現在看到這種方法再次被用於擴充套件網路。EfficientNet使用一個簡單的複合縮放規則,均勻地擴大所有stages。EfficientNetV2的作者指出這是不必要的,因為並不是所有的階段都需要通過擴充套件來提高效能。這就是為什麼他們使用非統一的擴充套件策略在後期逐步新增更多層的原因。他們還添加了一個縮放規則來限制最大的影象大小,因為EfficientNets傾向於積極地將影象大小放大。

我認為這背後的主要原因是,早期的層並不需要擴充套件,因為在這個早期階段,網路只關注高階特徵。然而,當我們深入到網路的更深層,並開始研究低階特徵時,我們將需要更大的層來完全消化這些細節。


END

英文原文:https://towardsdatascience.com/google-releases-efficientnetv2-a-smaller-faster-and-better-efficientnet-673a77bdd43c

請長按或掃描二維碼關注本公眾號


喜歡的話,請給我個在看吧


本文分享自微信公眾號 - AI公園(AI_Paradise)。
如有侵權,請聯絡 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。