重讀經典-EfficientNet

EfficientNet也是以前看過的一篇文章的,當時主要看了網絡結構,對於文章的思考並沒有很深入,這次重新看一下,加深一下對於文章的思考。


作者:Google

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

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


Model Scaling

本篇文章的重點是Model Scaling,至於Efficientnet只是作者在思考model scaling順帶的產物。

那麼什麼是Model Scaling,簡單來說就是模型擴容,比如;resnet18,resnet50,resnet101,resnet201適用於不同場景的任務,使用resnet18去分類imagenet,那麼肯定效果不會很好,使用resnet201放到手機上,那也很可能會卡死。

模型scaling的方法目前來看,三個方向比較主流,深度,寬度,和圖像分辨率。深度的代表就是resnet, 寬度的代表就是mobilenet,圖像分辨率我們知道增大分辨率一般都是有效的。在以前的方法中,往往是從這三個中的一個角度出發,來改變模型的scaling,但是這樣做其實是存在一定的瓶頸的,作者在實驗中也證實了這點。如下圖所示,在達到80%之後,提升就變得緩慢了。

在這裏插入圖片描述

下圖便是model scaling在三個角度的說明。

在這裏插入圖片描述

但是我們是否可以有個簡單方法,可以同時改變三個角度,進而達到更好的精度與速度嗎?

這個問題,作者也解釋說,完全的平衡深度寬度和分辨率是很難的,但令人興奮的是,我們可以採用一種簡單的方式,使用固定的比例來得到簡單的平衡,也就是本文的創新點了,作者管它叫做compound scaling method

那麼作者是怎麼做的呢?

首先,作者對這個任務進行了定義,如下:

其實這個問題就是個最優化問題,在有限的memory以及flops的條件下,最大化accuracy,公式如下:

在這裏插入圖片描述

但是因爲每層都可以進行三個維度不同的放大縮小,如果我們不加以控制scale的比例,那麼這個搜索空間就非常大了,不可能搜索出來的。

那麼作者的compound scaling method是怎麼做的呢?作者假設了深度、寬度、分辨率都是按照固定比例進行scale的,比如我們想提高 2 n 2^n 2n比例,那麼深度寬度分辨率可以按照 α N \alpha_N αN, β N \beta_N βN, γ N \gamma_N γN進行擴大, α \alpha α, β \beta β, γ \gamma γ是一個常量。定義到這,這個問題是不是變得簡單了很多,我們只要通過一些方法找到最合適的 α \alpha α, β \beta β, γ \gamma γ,就可以了。

爲什麼可以做這個假設呢?其實作者也是通過經驗主義得到的,在我們的經驗中,輸入一張大的圖像,一遍來說都需要更深的網絡來提升感受野以及更多的channel來提取更細節的特徵

作者對這個問題進行了數學抽象:

在這裏插入圖片描述

解釋一下這個公式,首先寬度和分辨率使用了平方,因爲寬度和分辨率變爲了2倍,flops會變爲4倍,你可能會疑惑寬度爲什麼是4倍,因爲輸入輸出都變寬了,所以就變爲了4倍。而 α ∗ β 2 ∗ γ 2 = 2 \alpha*\beta^{2}*\gamma^{2} = 2 αβ2γ2=2怎麼講,這裏主要是作者想模型按照2倍的尺度進行增長。所以我們只要計算出 α , β , γ \alpha ,\beta,\gamma α,β,γ這三個變量,那麼這個問題就解決了。

最後通過grid search(其實就是窮舉)得到這三個常量的。

到這裏model scale部分就介紹完了。

EfficientNet

爲了更好的展示效果,作者需要一個比較好的baseline網絡,這裏作者採用NAS方法,對網絡的accuracy以及FLOPS進行優化,作者以FLOPS進行搜索,而不是時延,主要因爲作者想忽略硬件的影響,得到一個純淨的網絡。得到了efficient。結構如下:

在這裏插入圖片描述

有了基礎網絡EfficientNet-B0,以及模型scale的方法,就可以duangduangduang生成一系列模型了EfficientNet-B0,B2…B7…B100

實驗

1、該方法作用在resnet以及mobilenet的效果

可以發現,組合比例確實還是有效果的。

在這裏插入圖片描述

2、efficientnet的效果

在這裏插入圖片描述

如下是efficient在flops以及params的結果。

可以看到Efficient-B3與resnet50的FLOPS幾乎相同的,但是精度卻高了一大截。

在這裏插入圖片描述

在這裏插入圖片描述

總結

本文的創新點主要有兩個,一個是設計了EfficientNet,另外更爲重要的是探索了model scaling的方法,如何在模型的深度、寬度以及分辨率上找到最好的scaling變量,雖然作者在探索這三個變量關係的時候,限制了很多因素,但是基於此也得到了很好的效果,說明這裏的探索空間其實還是很大的。

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