EfficientNet學習筆記


EfficientNet是谷歌大腦在2019年提出的,論文地址是:https://arxiv.org/pdf/1905.11946.pdf

這篇文章主要想解決的一個問題是,如何平衡網絡的深度、寬度和分辨率來提高模型的准確率

通常而言,提高網絡的深度、寬度和分辨率來擴大模型,從而提高模型的泛化能力。但如果單一提高某個參數的話,模型准確率很快會達到飽和,如下圖所示。

因此,需要同時對深度、寬度和分辨率來進行調整。作者提出了“復合相關系數(compound coefficient)”來動態提高這3個參數,如下圖所示,(a)是baseline model,(b)-(d)是單一提高某個參數,(e)是3個參數動態調整。

最終得到的結果,如下圖所示。就EfficientNet-b0而言,其准確率比ResNet50還高,參數量更少和FLOPS更低(不知道FLOPS能否代表速度的意思?)。從總體而言,在同等參數量下,EfficientNet系列都完勝其他網絡。

    

下面,我們具體來了解一下EfficientNet的細節。


 前文提及到,動態調整深度、寬度和分辨率能提高網絡的准確率,那么谷歌是如何做的?通過實驗,作者得到了兩個結論:

  1. 擴大網絡中深度、寬度或者分辨率的任一維度能提高模型的准確率,但隨着模型的擴大,這種准確率的增益效果會逐步消失;
  2. 為了更好的准確率和效率,很有必要去平衡提升網絡中深度、寬度和分辨率的所有維度。

因此,谷歌對此進行了數據建模,如下圖所示。使用了AutoML的方式,利用網格搜索的形式來搜索出這個相關系數。對,沒錯,有卡就是任性。其中,α,β,γ是使用網格搜索出來的常量,表明如何調整網絡的深度、寬度和分辨率;Φ是用戶自定義的相關系數,用來控制模型的擴增。

 EfficientNet有8個系列,分別從b0-b7,,其中b0是baseline,b1-b7都是在b0基礎上對深度、寬度和分辨率進行調整。從官方源碼上,可以得到以下參數。其中,參數分別是寬度的相關系數,深度的相關系數,輸入圖片的分辨率和dropout的比例。這些參數如何得到的呢,就是通過剛剛介紹的AutoML進行搜索出來的。

 

所以,接下來介紹一下EfficientNet-b0的結構。EfficientNet-b0的結構與mobilenet v2很類似,使用了的Inverted Residuals和Linear Bottlenecks,並結合了SE模塊。這么說,和mobilenet v3又很類似。如下圖所示,左圖是MobileNet V2的網絡圖,右圖是EfficientNet-b0的網絡圖。可以很明顯看出來,兩者還是十分相像的,最大的區別是在通道數上進行改變。


綜上所述,谷歌提出擴大模型來提高准確率的方法,即動態調整網絡的寬度、深度和分辨率。確實在保證運算速度的前提下,能將模型的准確率提高很多。最后也確實感覺到,AutoML的強大,有卡真好。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM