當前位置:
首頁 > 知識 > 推薦 淺析兩代MobileNet

推薦 淺析兩代MobileNet

導讀:MobileNet是谷歌出品的一個輕量級的神經網路結構,目標是用於移動和嵌入式,在保證了性能的情況下能夠較大程度的降低參數量,本文主要介紹一下兩代MobileNet的設計方式。

MobileNet[1]是谷歌出品的一個輕量級的神經網路結構,經過一年的發展逐漸成為類似GoogleNet、ResNet一樣的基礎性網路結構,它的出發點是想構造精簡、輕量級的神經網路,可以在性能有限的移動端上運行。可以認為它是一種網路壓縮的方法,但是不同於其他壓縮模型的方法的是,它不是在一個大的網路上進行剪枝、量化、分解等操作,而是給出了一個新的網路構造。今年一月又推出了第二個更為優化的版本[2],具體的caffe實現可以參考[3]。


MobileNet v1

V1版本的核心是將正常的卷積分解為深度可分離卷積和1x1逐點卷積,正常的卷積假設輸入M個feature map,輸出N個feature map,卷積核的數量為MN,假設每個卷積核大小為33,M個卷積核與M個輸入map對應卷積並累加得到一個輸出map,再用新的一組M個卷積核與輸入map卷積得到下一個輸出map。卷積過程可以看成兩個步驟,一是卷積核在輸入圖片上提取特徵,二是將提取的特徵通過相加的方式融合成新的特徵。

圖1 傳統卷積(圖片來源[1])

而mobilenet將傳統卷積分解成了兩個步驟,第一個步驟是深度可分離卷積DepthwiseConvolution,它只有M個33的卷積核,M個卷積核與M個輸入map一一卷積得到M個map,它起到了提取特徵的作用,第二個步驟是逐點卷積PointwiseConvolution,實際上就是傳統的卷積,只是所有的卷積核都是11,一共有MN個11,起到了融合已提取特徵的作用。

圖2 深度可分離卷積和逐點卷積(圖片來源[1])

這個過程中減少的計算量是什麼?實際上就是提取特徵的filter個數變少了,1*1的卷積過程實際上也就是矩陣乘法,不需要im2col函數來整合成特徵圖矩陣和卷積核矩陣。所以在論文中,傳統卷積和兩步卷積對應的計算量對比如下,分母是傳統卷積的計算量,分子是兩步卷積的計算量。

而在實現上,傳統卷積是一層就實現,分解後的卷積需要兩次來實現,在DW卷積和PW卷積之後都接上了bn層和relu層。

圖3 深度可分離卷積和逐點卷積Caffe實現

MobileNet一共有28層,整體的結構如下表所示。

圖4 MobileNet整體網路結構

此外,文章還定義了兩個,第一個超參數是寬度乘子

α

α,通過它可以進一步減少計算量,它是一個縮放係數,原來卷積的輸入輸出channel乘以這個係數就是新的channel數量。第二個超參數是解析度乘子ρ,它也是縮放係數,對象是特徵圖的大小,特徵圖尺寸乘以這個係數就是新的特徵圖尺寸。

實驗結果上來看,文章在Imagenet數據集上的分類任務中對比了28層的傳統卷積與MobileNet,在最終準確率降低較少的情況下,正常卷積的計算量和參數量分別是MobileNet的8.55倍、6.98倍。

圖5 對比傳統卷積與MobileNet(圖片來源[1])

有意思的是文章對比了圖6中窄的網路和淺的網路,從結果上來看,在兩者計算量一致的情況下,窄的網路比淺的網路性能更好。

圖6 對比淺形網路和窄形網路(圖片來源[1])

另外一個有意思的結論是文章統計了Imagenet分類準確率跟計算量和參數量之間的關係,最終發現與計算量、參數兩都呈現了類似log函數的形式。

文章還在多種任務上都進行了對比測試,大部分的結果都表明了MobileNet能夠在保證一定準確率的情況下極大的減少計算量。


MobileNet v2

從上面v1的構成表格中可以發現,MobileNet是沒有shortcut結構的深層網路,為了得到更輕量級性能更好準確率更高的網路,v2版本就嘗試了在v1結構中加入shortcut的結構,且給出了新的設計結構,文中稱為inverted residual with linear bottleneck,即線性瓶頸的反向殘差結構。

文章首先考慮了relu非線性函數的影響,我們知道relu函數只取輸入的非負值,且認為這個行為導致了信息損失,而文章卻給出了另一個結論。首先文章假設了每一層的特徵圖激活值形成了一種未知流形,雖然無法直接知道這個流形是什麼,但是流形學習中最基本的想法就是高維數據能夠映射到低維空間,因而這些激活值構成的流形也是能映射的。在神經網路中這種映射就體現在降低特徵圖的channel數,類似MobileNet v1中設置了一個超參數寬度乘子

α

α,但是問題是這個寬度因子如何選擇?降低到多少channel數能夠最大程度的保留所有的信息。映射到一個合適的低維空間即等價於通過這個乘子降低到合適的channel數,且作者認為在寬度乘子作用下能夠使得激活值形成的低維流形能夠佔滿整個低維空間。就是在這個條件之下,文章通過公式證明了只有在激活值能夠得到輸入空間的一個低維流形時,relu函數才能夠保留完備的信息。這是第一個性質,另外一個性質是當輸入都是非負值時,就算經過relu變換,本質上還是線性變換,這點是顯而易見的。

這個性質表明了激活值的channel數量較少時,relu無法保留完備的信息,會丟失很多信息,所以這種情況下不適合用relu,如圖7所示,將原始二維信息,經過一個矩陣映射到高維空間中,再經過一個relu,反向映射回原始二維空間,由於原始的二維空間是n=15,30的低維流形,而不是n=2,3的低維流形,所以在n=2,3時信息丟失較多。

圖7 低維流形映射到高維空間中relu的影響(圖片來源[2])

基於上述結論,文章提出了linear bottleneck layer,這個結構有三個卷積操作,即先通過1*1的PointwiseConvolution來提升channel數,再接一個DepthwiseConvolution,最後再用PointwiseConvolution將channel數量降下來。Bottleneck就體現在最後的這個降低channel數的PointwiseConvolution,根據之前對relu的研究,這種維數較低的channel之後再加relu會損失信息,所以linear則體現在最後的PointwiseConvolution之後不像之前一樣接relu了。

圖8 MobileNet v2結構(圖片來源[2])

圖9 MobileNet v2結構caffe實現

從實驗結果上來看線性層確實能夠防止非線性破壞過多的信息。

圖10 在線性層加入relu的影響(圖片來源[2])

為了獲得更強的深層反向梯度傳播能力,在v2版本中加入了shortcut連接方式,inverted residuals的inverted體現跟resnet相反的設計方式,傳統的resnet模塊,往往會將輸入channel先用PointwiseConvolution降低,執行了正常的卷積操作之後再用PointwiseConvolution將channel增加還原,而本文的設計則跟這個方式剛好是反的。圖10的結果中也可看出加入shortcut連接性能提升很多。

圖11 加入shortcut的影響(圖片來源[2])

結合上述兩個創新點之後,MobileNet V2的整體結構如圖11,其中每一個bottleneck的結構如圖8所示。

圖12 MobileNet V2整體網路結構


小結

有人說MobileNet沒有創新點,有人說MobileNet是業界良心,個人覺得MobileNet是一個非常棒的網路,雖然很多東西不是它原創的,但是兩個版本的實用性都非常強。

-馬上學習AI挑戰百萬年薪-


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 AI講堂 的精彩文章:

再見「黑盒」:研究人員教AI解釋自己!
AI工程師工作中最常用的編程語言和數據分析工具!

TAG:AI講堂 |