【前言】:公衆號的AI初學者友好互助小組已經創建啦,公衆號後臺回覆【加羣】能夠直接加入。羣裏都是些一塊兒學習的朋友,你們學習路上,結個伴。node
【求大佬】:有沒有對推薦算法熟悉又願意寫文章的大佬?聯繫我~
web
【公衆號資源彙總】:煉丹圖書館 | AI初學者所須要的資料合集(視頻+PDF下載)
算法
文章共3200字,預計閱讀時間12min
微信
什麼是EfficientNet網絡
模型複合縮放方法app
把問題用數學來描述機器學習
實驗內容編輯器
模型複合縮放方法svg
EfficientNet的基線模型模塊化
英語過關的小夥伴也許能夠挑戰一下?哈哈
模型擴展Model scaling一直以來都是提升卷積神經網絡效果的重要方法。
好比說,ResNet能夠增長層數從ResNet18擴展到ResNet200。此次,咱們要介紹的是最新的網絡結構——EfficientNet,就是一種標準化的模型擴展結果,經過下面的圖,咱們能夠i只管的體會到EfficientNet b0-b7在ImageNet上的效果:對於ImageNet歷史上的各類網絡而言,能夠說EfficientNet在效果上實現了碾壓
什麼是EfficientNet
通常咱們在擴展網絡的時候,通常經過調成輸入圖像的大小、網絡的深度和寬度(卷積通道數,也就是channel數)。在EfficientNet以前,沒有研究工做只是針對這三個維度中的某一個維度進行調整,由於沒錢啊!!有限的計算能力,不多有研究對這三個維度進行綜合調整的。
EfficientNet的設想就是可否設計一個標準化的卷積網絡擴展方法,既能夠實現較高的準確率,又能夠充分的節省算力資源。於是問題能夠描述成,如何平衡分辨率、深度和寬度這三個維度,來實現拘拿及網絡在效率和準確率上的優化
模型複合縮放方法
-
compound scaling methd
EfficientNet給出的解決方案是提出了這個模型複合縮放方法
圖a是一個基線網絡,也就是咱們所說的baseline,圖b,c,d三個網絡分別對該基線網絡的寬度、深度、和輸入分辨率進行了擴展,而最右邊的e圖,就是EfficientNet的主要思想,綜合寬度、深度和分辨率對網絡進行符合擴展。
把問題用數學來描述
首先,咱們把整個卷積網絡稱爲N,他的第i個卷積層能夠看做下面的函數映射:
Yi是輸出張量,Xi是輸入張量,假設這個Xi的維度是<Hi,Wi,Ci>(這裏省略了Batch的維度),那麼這個整個卷積網絡N,是由k個卷積層組成的,所以能夠表示爲:
一般狀況,一個神經網絡會有多個相同的卷積層存在,所以,咱們稱多個結構相同的卷積層爲一個stage。舉個例子:ResNet能夠分爲5個stage,每個stage中的卷積層結構相同(除了第一層爲降採樣層),前四個stage都是baseblock,第五個stage是fc層。如今構建神經網絡也講究模塊化嘛。
總之,咱們以stage爲單位,將上面的卷積網絡N改爲爲:其中,下表1...s表示stage的訊號,Fi表示對第i層的卷積運算,Li的意思是Fi在第i個stage中有Li個同樣結構的卷積層。<Hi, Wi, Ci>表示第i層輸入的shape。爲了減少搜索空間,做者先固定了網絡的基本結構,而只改變上面公式中的三個縮放維度。還記得以前咱們提升的分辨率,寬度,深度嗎?
-
Li就是深度,Li越大重複的卷積層越多,網絡越深; -
Ci就是channel數目,也就是網絡的寬度 -
Hi和Wi就是圖片的分辨率
就算如此,這也有三個參數要調整,搜索空間也是很是的大,所以EfficientNet的設想是一個卷積網絡全部的卷積層必須經過相同的比例常數進行統一擴展 ,這句話的意思是,三個參數乘上常熟倍率。因此個一個模型的擴展問題,就用數學語言描述爲:
其中,d、w和r分別表示網絡深度、寬度和分辨率的倍率。這個算式表現爲在給定計算內存和效率的約束下,如何優化參數d、w和r來實現最好的模型準確率。
實驗內容
上面問題的難點在於,三個倍率之間是由內在聯繫的,好比更高分辨率的圖片就須要更深的網絡來增大感覺野的捕捉特徵。所以做者作了兩個實驗(實際應該是作了不少的實驗)來講明:(1) 第一個實驗,對三個維度固定了兩個,只方法其中一個,獲得的結果以下:
從左到右分別是隻放大了網絡寬度(width,w爲放大倍率)、網絡深度(depth,d爲放大倍率)和圖像分辨率(resolution, r爲放大倍率)。咱們能夠看到,單個維度的放大最高精度只有80左右,本次實驗,做者得出一個管帶你:三個維度中任一維度的放大均可以帶來精度的提高,可是隨着倍率的愈來愈大,提高愈來愈小。
(2)因而做者作了第二個實驗,嘗試在不一樣的d,r組合下變更w,獲得下圖:從實驗結果來看,最高精度相比以前已經有所提高,突破了80大關。並且組合不一樣,效果不一樣。做者又獲得了一個觀點:獲得了更高的精度以及效率的關鍵是平衡網絡的寬度,網絡深度,網絡分辨率三個維度的縮放倍率
模型複合縮放方法
這時候做者提出了這個方法 EfficientNet的規範化複合調參方法使用了一個複合係數 ,來對三個參數進行符合調整:其中的 都是常數,能夠經過網格搜索得到。複合係數經過人工調節。考慮到若是網絡深度翻番那麼對應的計算量翻番,網絡寬度和圖像分辨率翻番對應的計算量會翻4番,卷積操做的計算量與 成正比,。在這個約束下,網絡的計算量大約是以前的 倍
以上就是EfficientNet的複合擴展的方式,可是這僅僅是一種模型擴展方式,咱們尚未講到EfficientNet究竟是一個什麼樣的網絡。
EfficientNet的基線模型
EfficientNet使用了MobileNet V2中的MBCConv做爲模型的主幹網絡,同時也是用了SENet中的squeeze and excitation方法對網絡結構進行了優化。
總之呢,綜合了MBConv和squeeze and excitation方法的EfficientNet-B0的網絡結構以下表所示:
對於EfficientNet-B0這樣的一個基線網絡,如何使用複合擴展發對該網絡進行擴展呢?這裏主要是分兩步走:還記得這個規劃問題嗎?
(1)第一步,先將複合係數 固定爲1,先假設有兩倍以上的計算資源能夠用,而後對 進行網絡搜索。對於EfficientNet-B0網絡,在約束條件爲
時, 分別取1.2,1.1和1.15時效果最佳。第二步是固定 ,經過複合調整公式對基線網絡進行擴展,獲得B1到B7網絡。因而就有了開頭的這一張圖片,EfficientNet在ImageNet上的效果碾壓,並且模型規模比此前的GPipe小了8.4倍。
普通人來訓練和擴展EfficientNet實在過於昂貴,因此對於咱們來講,最好的方法就是遷移學習,稍後我會寫一個Pytorch如何使用EfficientNet進行遷移學習的教程:
- END -<<小白學圖像>>
小白學目標檢測 | RCNN, SPPNet, Fast, Faster
小白學圖像 | BatchNormalization詳解與比較
<<小白學算法>>
<<小白學機器學習>>
【小白學ML】隨機森林 全解 (從bagging到variance)
SVM三合一 | SVM優化推導 + 拉格朗日算子講解(KKT條件) + hingeLoss
評價指標 | 詳解F1-score與多分類MacroF1&MicroF1
<<小白學推薦>>
有沒有推薦大佬。求合做。推薦板塊我寫不下去了(哭)
<<小白麪經>>
<<小白學雜七雜八>>
公衆號回覆【入羣】,加入AI愛好者大學生交流羣。你缺乏的可能只是一塊兒前行的同伴~
本文分享自微信公衆號 - 機器學習煉丹術(liandanshu)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。