ImageNet訓練再創紀錄!谷歌提出1個小時訓練EfficientNet,準確率高達83%!

2021-02-23 計算機視覺Daily

點擊上方「計算機視覺Daily」,選擇加"星標"

重磅乾貨,第一時間送達

本文轉載自:AI科技評論  |  註:文末附論文PDF下載


作者 | 青暮

近年來,隨著深度學習走向應用落地,快速訓練ImageNet成為許多機構競相追逐的目標。2017年6月,FaceBook使用256塊GPU以1小時在ImageNet上成功訓練了ResNet-50。在這之後,ResNet-50基本成為了快速訓練ImageNet的標配架構。2018年7月,騰訊實現用2048塊Tesla P40以6.6分鐘在ImageNet上訓練ResNet-50。同年8月,Fast.ai實現了18分鐘的快速訓練,他們使用的硬體是128塊Tesla V100。到11月,索尼更是將訓練時間壓縮為224秒,不過其當時使用了2176塊Tesla V100。Fast.ai和索尼使用的網絡架構也都是ResNet。那麼如今,在快速訓練ImageNet的競逐上,形成了什麼局面呢?

ResNet霸榜,偶有對手

在DAWNBench的ImageNet訓練排行榜上,我們可以看到,前五名都是使用了ResNet-50,並且最快訓練時間達到了2分38秒,同時還能實現93.04%的top-5準確率,以及14.42美元的低訓練成本。DAWNBench 是斯坦福發布的一套基準測試,主要關注端到端的深度學習訓練和推斷過程,用於量化不同優化策略、模型架構、軟體框架、雲和硬體的訓練時間、訓練成本、推理延遲和推理成本。排行榜地址:https://dawn.cs.stanford.edu/benchmark/ImageNet/train.html但除了ResNet-50,就沒有其它適合快速訓練ImageNet的架構了嗎?在這個排行榜的第10位,我們看到了一個孤獨的名字——AmoebaNet-D N6F256,根據排行榜的數據,它用1/4個TPUv2 Pod和1小時的時間在ImageNet上達到了93.03%的top-5準確率。實際上,該架構在2018年4月就由谷歌提出,在相同的硬體條件下,AmoebaNet-D N6F256的訓練時間比ResNet-50要短很多。並且,AmoebaNet-D N6F256的訓練成本也只有ResNet-50的一半。AmoebaNet-D是基於進化策略進行架構搜索的NAS架構,谷歌通過提供複雜的構建模塊和較好的初始條件來參與進化過程,實現了手動設計和進化的有機組合。論文:Regularized Evolution for Image Classifier Architecture Search除此之外,在DAWNBench的排行榜上,就看不到其它類型的架構了。但是在Papers With Code的ImageNet排行榜上,就沒有出現ResNet和AmoebaNet-D霸榜的現象。在top-5準確率前五名中,可以注意到,除了ResNet以外,剩下的架構都和EfficientNet有關。其中排名第一的架構,其top-5準確率已經達到了98.7%。不過這個排行榜並沒有列出訓練時間、硬體和成本,所以和DAWNBench不能一概而論。排行榜地址:https://www.paperswithcode.com/sota/image-classification-on-imagenetEfficientNet近日在這項競逐中也出現了新突破,新加坡國立大學的尤洋和谷歌研究院的Quoc Le等人發表了一項新研究,表示其用1小時實現了ImageNet的訓練,並且top-1準確率達到了83%(Papers With Code的排行榜前十名的top-1準確率在86.1%到88.5%之間)。論文地址:https://arxiv.org/pdf/2011.00071.pdf尤洋在推特上表示,這項研究在準確率足夠高的前提下,在速度上創造了一個世界記錄。EfficientNets是基於有效縮放的新型圖像分類卷積神經網絡系列。目前,EfficientNets的訓練可能需要幾天的時間;例如,在Cloud TPU v2-8節點上訓練EfficientNet-B0模型需要23個小時。在這項研究中,作者探索了在2048個內核的TPU-v3 Pod上訓練EfficientNets的技術,目的是在以這種規模進行訓練時可以實現加速。作者討論了將訓練擴展到1024個TPU-v3內核、批量大小為65536時所需的優化,例如大批量優化器的選擇和學習率的規劃,以及分布式評估和批量歸一化技術的利用。此外,作者還提供了在ImageNet數據集上訓練EfficientNet模型的時序和性能基準,以便大規模分析EfficientNets的行為。通過優化後,作者能夠在1小時4分鐘內將ImageNet上的EfficientNet訓練到83%的top-1準確率。圖1展示了對不同TPU內核數,EfficientNet-B2和B5訓練時間達到的峰值準確率。訓練時間在分布式訓練和評估循環初始化之後立即開始計算,並在模型達到峰值準確率時結束。可以觀察到EfficientNet-B2在1024個TPU-v3內核上的訓練時間為18分鐘,top-1準確率為79.7%,全局批處理大小為32768,這表明訓練速度明顯提高。通過在1024個TPU-v3內核上將全局批處理規模擴展到65536,可以在EfficientNet-B5上在1小時4分鐘內達到83.0%的準確率。表2展示了EfficientNet-B2和B5峰值準確率的基準,這裡可以找到準確率的完整基準以及相應的批次大小,作者表示,即使使用全局批次大小,使用他們的方法,也可以在EfficientNet-B5上保持83%的準確率。這項研究至少表明了,在EfficientNet上探索大規模圖像分類的快速訓練也是一個有希望的方向。

方法

將EfficientNet培訓擴展到1024個TPU-v3內核會帶來很多挑戰,必須通過算法或系統優化來解決。第一個挑戰是隨著全局批量規模的增加保持模型質量。由於全局批處理規模隨用於訓練的內核數量而定,因此,必須利用大批量訓練技術來保持準確率。而在大量TPU晶片上進行訓練時也會面臨計算瓶頸,不過可以使用Kumar等人提出的分布式評估和批量歸一化技術來解決這些瓶頸。以下是為擴展TPU-v3 Pod上的EfficientNet訓練而探索的優化技術:最初的EfficientNet論文使用RMSProp優化器,但眾所周知,批量較大時,RMSProp會導致模型質量下降。通過數據並行性將訓練規模擴展到1024個TPU-v3內核,意味著如果保持每個內核的批量大小不變,則全局批量大小必須與內核的數量成比例增加。例如,如果我們將每核的批處理大小固定為32,則1024個核上的全局批處理大小將為32768。另一方面,如果在擴展到多個核時全局批處理大小是固定的,則每核的批處理大小會降低,導致效率低下和吞吐量降低。因此,為了更好地利用每個TPU內核的內存並提高吞吐量,必須使用較大的全局批處理大小。使用You等人提出的分層自適應速率縮放(LARS)優化器,能夠擴展到65536的批量,同時達到與Tan和Le中報告的EfficientNet基準準確率相似的準確率。為了在使用大批量時保持模型質量,作者還採用了學習率預熱和線性縮放技術。在保持epoch數固定的同時增加全局批量大小將導致更新權重的迭代數較少。為了解決這個問題,作者將線性縮放規則應用於批次中每256個樣本的學習率。但是,較高的學習率會導致發散。因此,作者還應用了學習率預熱,其中訓練以較小的初始學習率開始,並在可調整的時期內逐漸提高學習率。此外,作者比較了各種學習速率規劃,例如指數衰減和多項式衰減,發現對於LARS優化器,多項式衰減計劃可實現最高的準確率。評估循環的執行是EfficientNet的標準雲TPU實現的另一個計算瓶頸,因為評估和訓練循環是在單獨的TPU上執行的。在傳統的TPUEstimator中,評估是在單獨的TPU上進行的,訓練的執行速度要比評估快,導致端到端時間很大程度上取決於評估時間。為了克服這個問題,作者利用Kumar等人所述的分布式訓練和評估循環。它在所有TPU上分配了訓練和評估步驟,並允許擴展到更大數量的副本。作者使用Ying等人提出的方案,通過將副本的子集分組在一起,在副本之間分布批處理歸一化。這種優化可通過權衡TPU之間的通信成本來提高最終精度。分組在一起的副本數是可調超參數。最終的批次歸一化批次大小(每個副本子集中的樣本總數)也會影響模型質量以及收斂速度。對於大於16的副本子集,作者還探索了將副本分組在一起的二維切片方法。目前已經觀察到,使用bfloat16浮點格式來訓練卷積神經網絡可以達到甚至超過使用傳統單精度格式(例如fp32)訓練的網絡的性能,這可能是較低精度的正則化效果所致。作者實現了混合精度訓練,以利用bfloat16的性能優勢,同時仍保持模型質量。在實驗中,bfloat16用於卷積運算,而所有其他運算都使用fp32。使用bfloat16格式進行卷積可提高硬體效率,而不會降低模型質量。

論文PDF下載

計算機視覺Daily公眾號後臺回覆:1105,即可下載上述論文

PyTorch 學習資料下載

計算機視覺Daily公眾號後臺回覆:PyTorch資料,即可下載訪問最全最好的PyTorch入門和實戰資料!

推薦下載

82頁《現代C++教程》:高速上手C++ 11/14/17/20(附中文PDF下載)

豆瓣評分9.4!《統計學習導論》現在有了Python版(附PDF和代碼下載)

764頁PDF和Python版代碼下載

計算機視覺Daily公眾號後臺回覆:統計學習導論,也可下載訪問764頁的PDF和Python代碼!

歡迎關注計算機視覺Daily

▲長按關注我們

整理不易,請給點讚和在看

相關焦點

  • 【AI論技】EfficientNet的原理和應用
    EfficientNet是谷歌於2019年提出的新一代高性能卷積神經網絡。
  • EfficientNet v2筆記
    1:改進了efficientnet模型亮點2:提出了漸進式學習方法(個人覺得思路很棒,因為類似於人類的學習方式,隨著年齡增加,我們學習內容的難度也是由簡單到困難)2021 CVPR介紹    首先指出了EfficientNet v1存在的問題:    (1)訓練圖像的尺寸很大時,訓練速度非常慢    (2)在網絡淺層中使用DW卷積速度會非常慢    (3)同等放大每個
  • 谷歌大腦提出ViT-G:縮放視覺Transformer,高達90.45%準確率!
    論文:https://arxiv.org/abs/2106.04560本文改進了ViT的架構和訓練,減少了內存消耗並提高了模型的準確性!最終成功訓練了一個具有20億參數的ViT模型:ViT-G,在ImageNet上達到了90.45%的Top-1準確率。
  • 技術解讀EfficientNet系列模型——圖片分類的領域的扛把子
    谷歌使用這種技術開發了一系列版本。目前已經從EfficientNet-B0到EfficientNet-B8再加上EfficientNet-L2和Noisy Student共11個系列的版本。其中性能最好的是Noisy Student版本。以下是圖片分類模型在ImageNet數據集上的精度對比結果。
  • 萬萬沒想到,EfficientNet居然這麼火!
    點擊我愛計算機視覺標星,更快獲取CVML新技術上周52CV曾經第一時間報導了谷歌新出的算法EfficientNet
  • EfficientNetV2:更小,更快!
    EfficientNetV2谷歌在2021年4月份提出了EfficientNet的改進版EfficientNetV2: Smaller Models and Faster Training。從題目上就可以看出V2版本相比V1,模型參數量更小,訓練速度更快。
  • 【1小時訓練ImageNet】Facebook賈揚清+何愷明論文
    報導作者:Blair Hanley Frank譯者:文強、張易【新智元導讀】Facebook 人工智慧實驗室與應用機器學習團隊合作,提出了一種新的方法,能夠大幅加速機器視覺任務的模型訓練過程,僅需 1 小時就訓練完ImageNet 這樣超大規模的數據集。
  • EfficientNet代碼和論文解析
    EfficientNet出自論文《EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks[1]》,主要貢獻並不是EfficientNet的提出,而是一種模型縮放的策略提出。
  • 資源 | 從VGG到ResNet,你想要的MXNet預訓練模型輕鬆學
    每個模型在特定圖像上的表現略有不同,訓練多個模型旨在找出更適合特定任務的模型。在這篇博文中,你將會了解如何使用 Apache MXNet 預訓練出的多個模型。為什麼要嘗試多個模型呢?為什麼不直接選擇準確率最高的呢?稍後我們會在文章中看到,儘管這些模型是在相同的數據集上訓練的,並且都針對最大準確率進行了優化,但它們在特定圖像上的表現略有不同。
  • 谷歌NLP預訓練利器:小模型也有高精度,單個GPU就能訓練 | 代碼開源
    它叫ELECTRA,來自谷歌AI,不僅擁有BERT的優勢,效率還比它高。ELECTRA是一種新預訓練方法,它能夠高效地學習如何將收集來的句子進行準確分詞,也就是我們通常說的token-replacement。有多高效?
  • 預訓練小模型也能拿下13項NLP任務,谷歌ALBERT三大改造登頂GLUE基準
    通常而言,在預訓練自然語言表徵時增加模型大小可以提升模型在下遊任務中的性能。但在某些情況下,由於 GPU/TPU 內存限制、訓練時間延長以及意外的模型退化等原因,進一步增加模型大小的難度也隨之增加。所以,為了解決這些問題,來自谷歌的研究者提出通過兩種參數精簡技術來降低內存消耗,加快 BERT 的訓練速度。
  • 使用Pytorch訓練分類器詳解(附python演練)
    訓練一個圖像分類器1. 使用torchvision加載並且歸一化CIFAR10的訓練和測試數據集2. 定義一個卷積神經網絡3. 定義一個損失函數4. 在訓練樣本數據上訓練網絡5. 在測試樣本數據上測試網絡三.
  • AdvProp:兩組Batch Normalization助你在CNN對抗訓練中高效漲點
    本文介紹的AdvProp(Adversarial Propagation)不是用來利用防禦手段應對對抗攻擊的,而是提高模型在真實原始的數據集上的準確率。是增強的對抗性訓練方法,將對抗樣本視為附加樣本,用來防止網絡過擬合。本文的核心點就是利用附加的BN去處理對抗樣本,因為論文認為對抗樣本和真實樣本有著不同的分布。
  • 【新紀錄】90秒訓練AlexNet!
    2018 年 7 月,騰訊機智機器學習平臺團隊在 ImageNet 數據集上僅用 4 分鐘訓練好 AlexNet、6.6 分鐘訓練好 ResNet-50;11 月,索尼刷新在 ImageNet 數據集上訓練 ResNet-50 的時間:224 秒;之後不久,谷歌再次刷新 ImageNet/ResNet-50 訓練時間的記錄:2.2 分鐘。
  • 時隔兩年,EfficientNet v2來了!更快,更小,更強!
    paper: https://arxiv.org/abs/2104.00298code: https://github.com/google/automl/efficientnetv2本文是谷歌的MingxingTan與Quov V.Le對EfficientNet的一次升級
  • XLNet訓練成本6萬美元,頂5個BERT,大模型「身價」驚人
    目前訓練神經網絡主要還是使用 GPU 或 TPU,先不說英偉達的各種高端 GPU 有多貴,雲計算上的高性能計算也不便宜。我們以谷歌云為例,Tesla V100 每小時 2.48 美元、Tesla P100 每小時 1.46 美元,谷歌 Colab 免費提供的 Tesla T4 GPU 每小時也要 0.95 美元。
  • EfficientNet詳解:當前最強網絡
    論文提出了compound scaling,混合縮放,把網絡縮放的三種方式:深度、寬度、解析度,組合起來按照一定規則縮放,從而提高網絡的效果。EfficientNet在網絡變大時效果提升明顯,把精度上限進一步提升,成為了當前最強網絡。
  • Pytorch訓練方法
    當然,還存在一些非並行的技術或者技巧,用於解決訓練效率或者訓練顯存不足等問題。本文的「重點」是介紹PyTorch原生的**分布式數據並行(DDP)**及其用法,其他的內容,我們後面再聊(如果有機會的話qwq)。
  • 收藏 | 最強分類模型EfficientNet詳解
    谷歌AI在這篇文章中:https://arxiv.org/abs/1905.11946介紹了它,他們試圖提出一種更高效的方法,就像它的名字所建議的那樣,同時改善了最新的結果。一般來說,模型設計得太寬,太深,或者解析度太高。剛開始的時候,增加這些特性是有用的,但很快就會飽和,然後模型的參數會很多,因而效率不高。
  • 獨家 | 使EfficientNet更有效率的三種方法(附連結)
    為了解決這三個問題,我們對MBConv塊做了一個簡單但重要的修改。我們將卷積的組大小從1增加到16;這將帶來更好的IPU硬體利用率。然後,為了補償FLOPs和參數的增加,並解決內存問題,我們將擴展因子降低到4。這將帶來一個更高效的內存和計算緊湊的EfficientNet版本,我們稱之為G16-EfficientNet。