點擊上方“小白學視覺”,選擇加"星標"或“置頂”
重磅干貨,第一時間送達

自 AlexNet 贏得 2012 年 ImageNet 的競賽以來,CNN(卷積神經(jīng)網(wǎng)絡的縮寫)已成為深度學習中各種任務(尤其是計算機視覺)的實用算法。從2012年至今,研究人員一直在試驗并試圖提出更好的架構,以提高模型對不同任務的準確性。今天,我們將深入探討最新的研究論文"高效網(wǎng)絡(EfficientNet,https://arxiv.org/pdf/1905.11946.pdf)",它不僅注重提高模型的準確性,而且注重提高模型的效率。
在討論"尺度意味著什么" 之前,相關的問題是:為什么尺度至關重要?通常進行縮放是為了提高模型對特定任務(例如 ImageNet 分類)的準確性。盡管有時研究人員不太關心模型的高效性,因為打敗對手是從精度方面來說的,但如果操作得當,縮放也有助于提高模型的效率。 什么是卷積神經(jīng)網(wǎng)絡的尺度?
卷積神經(jīng)網(wǎng)絡里涉及到三種尺度:深度、寬度、分辨率。深度指的就是網(wǎng)絡有多深,或者說有多少層。寬度指的是網(wǎng)絡有多寬,比如卷積層的通道數(shù)。而分辨率就是輸入卷積層的圖像、特征圖的空間分辨率。下圖直觀地顯示出三種尺度的區(qū)別,我們后面也會詳細地討論。
模型尺度。(a) 是一個基本的網(wǎng)絡模型;(b)-(d) 分別單獨在寬度、深度、分辨率的維度上增加尺度;(e) 是論文提出的混合尺度變換,用統(tǒng)一固定的比例放縮三個不同維度的尺度。改變網(wǎng)絡深度是最常見的尺度變換方式,通過增加、減少層數(shù)可以使網(wǎng)絡深度增減。比如 ResNet 可以從 50 層增加到 200 層,也可以縮小到 18 層。那么為什么要調整網(wǎng)絡深度呢?從直覺上來看,越深的網(wǎng)絡越能夠捕捉豐富而復雜的特征,同時對于新任務的泛化性能更強。“聽上去好有道理,那我們搞一個 1000 層的網(wǎng)絡好了?只要效果好,計算資源都不是事兒。”話雖這么說,理論上講越深的網(wǎng)絡越厲害,但是實驗發(fā)現(xiàn)并非總是如此。梯度消失是網(wǎng)絡變深帶來的最常見的問題。即使我們避免了梯度消失,又通過一頓操作使訓練過程足夠平滑,添加網(wǎng)絡層也并不總是管用。比如 ResNet-1000 的準確率就和 ResNet-101 差不多。當我們想保持網(wǎng)絡模型不要太大的時候,通常要限制深度而在寬度上做文章。更寬的網(wǎng)絡可以捕捉到更多的細粒度特征,更小的網(wǎng)絡也更容易訓練。“這不是我們夢寐以求的嗎?模型小,精度高?那就繼續(xù)拓寬啊,又有什么問題嗎?”問題在于,如果深度上不夠而是一味增加寬度,網(wǎng)絡的精度仍然會很快到達天花板。“好吧,你說的都對。你說我們既不能把網(wǎng)絡設計得非常深,又不能設計得非常寬,那不能組合一下嗎?這都想不到你還能干啥?搞機器學習嗎?”這個問題提的非常好,我們的確可以這么做。不過在討論這個問題之前,我們聊一下第三種尺度,這三種尺度也是可以組合的對吧。直覺上來說,高分辨率的圖片包含更精細的特征,所以應該效果更好。這也是為什么對于例如目標檢測的復雜任務,輸入圖片會用到 300x300,512x512 或者 600x600 這樣的大分辨率。不過分辨率調大帶來的指標提升并不是線性的,精度提升很快就趨于飽和了。比如輸入圖片的分辨率從 500x500 提高到 560x560 并沒有帶來明顯提升。以上三點給我們的第一個現(xiàn)象:在任何一個維度上(寬度、深度、分辨率)提升網(wǎng)絡的尺度,能夠提高精度,但是當模型大到一定程度時,帶來的精度提升就不明顯了。左、中、右圖在同一個網(wǎng)絡的基礎上,分別增加寬度 (w)、深度 (d)、分辨率 (r) 的系數(shù)。尺度大的網(wǎng)絡可以達到更高的精度,但是到 80% 都基本達到了飽和,可見只改變單一維度的尺度帶來的提升是有限的。
的確,我們可以對不同的尺度進行組合變換,但是論文作者提到了這樣兩點:
- 雖然可以憑經(jīng)驗對每個維度設置一個固定的尺度值,但是尋找這個值的過程是很枯燥的。
- 大多數(shù)時候,手動確定這個尺度得到的精度和性能都不一定是全局最優(yōu)的。
直覺上,隨著輸入圖片分辨率的增加,網(wǎng)絡深度和寬度應該隨之增加。深度增加,特征圖的感受野會增加。寬度增加,可以捕捉更多的細粒度特征。為了驗證這個直覺,作者做了大量實驗,在每一個維度上使用不同尺度。比如下面這幅論文中的插圖所看到的,當使用較深的網(wǎng)絡和較大的分辨率時,對寬度進行調整,相同運算量下可以達到更高的精度。基于不同基準模型改變網(wǎng)絡寬度。每個點表示不同寬度的模型。所有的基線模型來自于表格 1。第一個基線模型 (d=1.0, r=1.0) 有 18 個卷積層,224x224 分辨率輸入,最后一個 (d=2.0, r=1.3) 有 36 個卷積層,299x299 分辨率輸入。這個結果給了我們第二個現(xiàn)象:平衡各個維度(寬度、深度、分辨率)的尺度,有助于提高精度與性能。作者提出了一種簡單但有效的尺度變換方法,借助混合系數(shù) ? 來對網(wǎng)絡的寬度、深度和分辨率進行如下縮放:? 是一個人為設定的系數(shù),用來依據(jù)計算資源控制模型的規(guī)模。α, β 和 γ 用來表示如何把這些資源分配給深度、寬度和分辨率。“好吧,研究員!那么回答我兩個問題:一,為什么 alpha 不用平方?二,為什么限制三個系數(shù)的乘積約等于 2 ?”這個問題問得非常好。在卷積神經(jīng)網(wǎng)絡中,卷積層是計算量最大的部分。而一個常規(guī)的卷積層的計算量,通常與 d, w2, r2 近似成正比。也就是說,深度加倍會使得計算量加倍,而寬度或分辨率加倍會使得計算量增加近似四倍。所以,為了保證總的計算量不超過 2 的 ? 次方,我們限制 (α * β2 * γ2) ≈ 2。尺度變換不會改變網(wǎng)絡層的運算,所以最好先得到一個不錯的基線網(wǎng)絡,然后在此基礎上對不同尺度進行混合放縮。作者先用神經(jīng)網(wǎng)絡架構搜索(NAS)同時優(yōu)化精度和運算量得到一個基本的網(wǎng)絡。這個網(wǎng)絡結構與 M-NasNet 類似,因為使用了相似的搜索空間。網(wǎng)絡模塊如下表所示:
EfficientNet-B0 基線網(wǎng)絡MBConv 模塊是指的 Inverted Residual Block 模塊(在 MobileNet V2 中用到的),部分還包含了Squeeze and Excite Block 模塊。現(xiàn)在有了基線網(wǎng)絡,我們可以搜索尺度變換的最優(yōu)值。如果我們再看剛才的方程,會發(fā)現(xiàn)總共有四個參數(shù)要搜索:α, β, γ 和 ?。為了能讓搜索空間更小,搜索計算量更低,都做可以通過兩步完成:- 固定 ?=1,假設還有兩倍的計算資源可用,對 α, β, γ 做一個小規(guī)模的網(wǎng)格搜索。基于 B0 網(wǎng)絡,發(fā)現(xiàn)最優(yōu)值是 α=1.2, β=1.1, γ=1.5,同時滿足 (α * β2 * γ2) ≈ 2
- 固定 α, β 和 γ 為上一步搜索的結果,用不同的 ? 做實驗,得到 EfficientNet B1- B7。
這可能是 2019 年以來我讀過的最好的一篇論文之一。這篇文章不僅為搜索更精確的網(wǎng)絡,打開了新世界的大門,而且同時強調了搜索高效的網(wǎng)絡。
雖然之前不乏這個方向的研究,例如 MobileNet,ShuffleNet,M-NasNet 等,通過降低參數(shù)量和計算量來壓縮模型,從而應用在移動設備和邊緣設備上,但這是我們第一次看到,在參數(shù)量和計算量顯著降低的同時,模型精度獲得了巨大提升。https://arxiv.org/abs/1905.11946
https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet好消息!
小白學視覺知識星球
開始面向外開放啦??????
下載1:OpenCV-Contrib擴展模塊中文版教程
在「小白學視覺」公眾號后臺回復:擴展模塊中文教程,即可下載全網(wǎng)第一份OpenCV擴展模塊教程中文版,涵蓋擴展模塊安裝、SFM算法、立體視覺、目標跟蹤、生物視覺、超分辨率處理等二十多章內(nèi)容。下載2:Python視覺實戰(zhàn)項目52講在「小白學視覺」公眾號后臺回復:Python視覺實戰(zhàn)項目,即可下載包括圖像分割、口罩檢測、車道線檢測、車輛計數(shù)、添加眼線、車牌識別、字符識別、情緒檢測、文本內(nèi)容提取、面部識別等31個視覺實戰(zhàn)項目,助力快速學校計算機視覺。在「小白學視覺」公眾號后臺回復:OpenCV實戰(zhàn)項目20講,即可下載含有20個基于OpenCV實現(xiàn)20個實戰(zhàn)項目,實現(xiàn)OpenCV學習進階。交流群
歡迎加入公眾號讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動駕駛、計算攝影、檢測、分割、識別、醫(yī)學影像、GAN、算法競賽等微信群(以后會逐漸細分),請掃描下面微信號加群,備注:”昵稱+學校/公司+研究方向“,例如:”張三 + 上海交大 + 視覺SLAM“。請按照格式備注,否則不予通過。添加成功后會根據(jù)研究方向邀請進入相關微信群。請勿在群內(nèi)發(fā)送廣告,否則會請出群,謝謝理解~