模型壓縮論文解讀1:(MobileNets解讀)Efficient Convolutional Neural Networks for Mobile ...

一、番外說明

大家好,我是小P,今天給大家帶來深度模型壓縮經典文獻MobileNets的解讀,關於輕量化模型的介紹,資料齊全。
此外,對“目標檢測/模型壓縮/語義分割”感興趣的小夥伴,歡迎加入QQ羣 813221712 討論交流,進羣請看羣公告!
點擊鏈接加入羣聊【Object Detection】:https://jq.qq.com/?_wv=1027&k=5kXCXF8

二、資料推薦

注:爲方便下載,部分資源已上傳百度網盤,點擊即可下載,若網盤失效,望告知!
①論文原著下載:https://pan.baidu.com/s/1KaOZgoIJ1-Qn2NdVjz1nnA
②中英對照翻譯:https://pan.baidu.com/s/157USvAuZMtJMPFv5NXtGag
③官方源碼地址:https://github.com/Zehaos/MobileNet
④其他版本代碼:https://github.com/marvis/pytorch-mobilenet

三、基礎知識

1、卷積原理理解

數字圖像是一個二維的離散信號,對數字圖像做卷積操作其實就是利用卷積核(卷積模板)在圖像上滑動,將圖像點上的像素灰度值與對應的卷積核上的數值相乘,然後將所有相乘後的值相加作爲卷積核中間像素對應的圖像上像素的灰度值,並最終滑動完所有圖像的過程。

這張圖可以清晰的表徵出整個卷積過程中一次相乘後相加的結果:該圖片選用3*3的卷積核,卷積核內共有九個數值,所以圖片右上角公式中一共有九行,而每一行都是圖像像素值與卷積核上數值相乘,最終結果-8代替了原圖像中對應位置處的1。這樣沿着圖片一步長爲1滑動,每一個滑動後都一次相乘再相加的工作,我們就可以得到最終的輸出結果。除此之外,卷積核的選擇有一些規則:

1)卷積核的大小一般是奇數,這樣的話它是按照中間的像素點中心對稱的,所以卷積核一般都是3x3,5x5或者7x7。有中心了,也有了半徑的稱呼,例如5x5大小的核的半徑就是2。

2)卷積核所有的元素之和一般要等於1,這是爲了原始圖像的能量(亮度)守恆。其實也有卷積核元素相加不爲1的情況,下面就會說到。

3)如果濾波器矩陣所有元素之和大於1,那麼濾波後的圖像就會比原圖像更亮,反之,如果小於1,那麼得到的圖像就會變暗。如果和爲0,圖像不會變黑,但也會非常暗。

4)對於濾波後的結構,可能會出現負數或者大於255的數值。對這種情況,我們將他們直接截斷到0和255之間即可。對於負數,也可以取絕對值。

上述二維卷積的動態過程可以表示爲下圖所示

同樣可以觀測三維卷積的動態過程

如上圖所示:輸入特徵圖的維度爲5×5×3,其中5×5表示特徵圖的空間尺寸(width,height),3表示特徵圖的深度信息,也就是通道數,使用卷積核爲3×3×3×2,左邊的3×3表示進行二維卷積運算的卷積核的尺寸,由3×3=9個數構成一個二維矩陣式的卷積核,右邊的3對應輸入特徵圖的深度(通道數),2爲卷積運算後的輸出通道數。
注意(敲黑板)
①該層卷積層的參數量爲:3×3×3×2=54,該卷積核分爲2組,每一組的尺寸爲3×3×3

②在輸入特徵圖的深度維度上的每個二維矩陣上的卷積過程相當於濾波,然後對濾波過後的結果進行求和相當於跨通道的信息融合,所以一個標準卷積的過程兼有濾波和融合的效果。

2、常用的模型壓縮的方法

這個知識點比較寬,想要詳細理解的參考 https://www.cnblogs.com/kexinxin/p/9858743.html

四、論文解讀

1、本文的應用背景

①、DNN模型的總體設計趨勢是越來越深,越來越複雜,過大的模型和算力需求阻礙了模型向移動應用端移植的步伐。
②、在諸如機器人、自動駕駛汽車和增強現實等許多現實應用中需要在計算有限的平臺上及時地執行識別任務。
③、許多關於輕量化網絡的論文只關注模型大小但不考慮速度(模型小的不一定運算量就少)

2、本文亮點

①、使用深度可分離卷積替換了原來的標準卷積,訓練了模型MobileNets,在許多公開數據集上取得了不錯的效果。深度可分離卷積其實並不是本文所提出的。

②、引入了兩個超參數:寬度係數和分辨率係數,寬度係數在每層均勻地稀疏網絡,分辨率係數通過控制輸入網絡圖像的分辨率大小降低網絡的運算成本。

③、將上述兩點應用到了不同的實際應用中,做了豐富的實驗(咱們寫論文其實也可以堆很多的實驗,增加工作量 \笑哭)

3、論文核心內容

第一點:MobileNet的網絡架構
這個沒什麼好說的,直接看圖,有個直觀的瞭解即可

第二點:如何將將標準卷積分解爲“深度卷積+1×1的逐點卷積”
主體思想MobileNet模型基於深度可分離卷積,這是一種因式分解的卷積形式,它將標準卷積分解爲深度卷積和稱爲逐點卷積的1×1卷積。

對於MobileNets,深度卷積將單個濾波器應用於每個輸入通道。 然後,逐點卷積應用1×1卷積來組合輸出的深度卷積【通道信息融合】。

標準卷積可以在一個步驟中完成濾波並將輸入組合成一組新的輸出。 深度可分離卷積將其分成兩層,一個用於濾波的單獨層和一個用於組合的單獨層。

標準卷積層(圖a所示)以DF×DF×M維度的特徵圖F作爲輸入並生成DK×DK×N的特徵圖G

其中DF是方形輸入特徵圖的空間寬度和高度,M是輸入通道的數量(輸入深度)

DK是方形輸出特徵圖的空間寬度和高度,N是輸出通道的數量(輸出深度)

圖(a)中標準卷積的計算量爲:

圖(b)(c)表示將圖(a)的標準卷積分解的 “深度卷積” 和 “1×1卷積”

其中圖(b)的深度卷積爲輸入特徵圖DF×DF×M的每一個通道(深度)應用二維卷積運算,得到DK×DK大小的特徵圖,一共M個(此時是一個輸入通道對應一個輸出通道,沒有融合)

圖(b)中深度卷積的計算量爲:

圖(c)表示將圖(b)深度卷積後得到的DK×DK×M的特徵圖應用1×1×M的卷積進行跨通道的信息融合,一共應用N次,所以圖(c)中卷積核的尺寸爲1×1×M×N,生成的特徵圖的尺寸爲DK×DK×N

圖(c)中1×1卷積的計算量爲:

注意:圖片來自論文,其中公式有誤,上式的DF應該爲DK,將上式帶如下面的(5)也要變化
綜合b和c,兩步總的計算量爲:

分解後的卷積的運算量佔原先標準卷積運算量的比率爲:

可以看出,經過圖(b)的深度卷積和圖(c)的1×1卷積,處理DF×DF×M的特徵圖時,能和圖(a)的標準卷積得到同樣的輸出特徵圖DK×DK×N,而且完成了同樣的功能(濾波+信息融合)

下面舉一個實際例子演示上述分解過程

特別感謝:以下部分圖片和內容引自博主:DFann 地址:https://blog.csdn.net/u011974639/article/details/79199306
原博主的圖實在畫得太美妙了,手殘的我嘗試了N次後只能放棄 ????????????

黑色的輸入爲(6,6,3)與第n 個卷積覈對應,每個通道對應每個卷積核通道卷積得到輸出,最終輸出爲2+0+1=3。(這是常見的卷積操作,注意這裏卷積核要和輸入的通道數相同,即圖中表示的3個通道~)

對於深度分離卷積,把標準卷積(4,4,3,5)分解爲:

深度卷積部分:大小爲(4,4,1,3),作用在輸入的每個通道上,輸出特徵映射爲(3,3,3)
逐點卷積部分:大小爲(1,1,3,5),作用在深度卷積的輸出特徵映射上,得到最終輸出爲(3,3,5)
例中深度卷積卷積過程示意圖如下:

輸入有3個通道,對應着有3個大小爲(4,4,1)的深度卷積核,卷積結果共有3個大小爲(3,3,1),我們按順序將這卷積按通道排列得到輸出卷積結果(3,3,3)。

相比之下計算量減少了:
4×4×3×5 轉爲了4×4×1×3+1×1×3×5 ,即參數量爲原來的:

同樣的可以計算運算量變爲原來的:
6×6×3×4×4+3×3×3×N6×6×3×4×4×N\frac{6×6×3×4×4+3×3×3×N}{6×6×3×4×4×N} \quad
注意
①、如果輸出通道N爲1時反而增加了計算量,但實際情況中往往輸出通道不爲1
②、MobileNet使用可分離卷積減少了8到9倍的計算量,只損失了一點準確度。
③、在MobileNet中,標準卷積後接的BN和RELU激活函數經分解後在深度卷積和1×1卷積後面均有,如圖所示:

第三點:超參數寬度係數α的使用
雖然MobileNet基礎架構已經很小且延遲很低,但是很多時候特定用例或應用程序可能要求模型更小更快。 爲了構造這些更小且計算量更小的模型,我們引入了一個非常簡單的參數α,稱爲寬度係數。 寬度係數α的作用是在每層均勻地稀疏網絡。 對於給定的層和寬度係數α,輸入通道M的數量變爲αM,輸出通道的數量N變爲αN。

引入寬度係數α後計算量變爲:

其中α∈(0,1],典型值爲1,0.75,0.5和0.25.α= 1是基礎的MobileNet,α<1的時候構建更簡化的MobileNets。寬度乘數具有降低計算成本和參數數量的效果,參數量大致減少爲1/α2

第三點:超參數分辨率係數β的使用
降低神經網絡計算成本的第二個超參數是分辨率係數ρ。 將其應用於輸入圖像,並且每個層的內部表示隨後減少相同的倍數。 在實踐中,通過設置輸入圖像的分辨率隱式地設置ρ。引入β後計算量變爲:

中ρ∈(0,1),通常是隱式設置的,網絡的輸入分辨率通常爲224,192,160或128.ρ= 1是基本的MobileNet,ρ<1是減少計算的MobileNets。分辨率係數能降低計算成本ρ2倍。

4、實驗分析

實驗一:模型的選擇
使用深度分類卷積的MobileNet與使用標準卷積的MobileNet之間對比:

從上圖可以看出:MobileNet的精度僅降低了1%,但運算量幾乎變爲1/9,參數量也變爲1/8

下圖進一步比較了使用寬度係數簡化模型與將MobileNet中的5層14×14×512 的深度可分離卷積去除來淺化模型的結果:

可以看出:使用寬度係數α得到的模型比直接淺化得到的模型精度更高,參數量和運算量也更少。

實驗二:關於寬度係數α和分辨率係數β的實驗
表6顯示了使用寬度係數α後縮小的MobileNet架構的準確性,計算和大小權衡。 精度隨着α的減小平滑下降,直到在α= 0.25時由於結構太小而下降很多。

表7顯示了通過使用不同分辨率係數β訓練具有降低的輸入分辨率MobileNets的精度,計算量和參數大小的權衡。 精度在分辨率降低時平滑下降。

爲了更詳盡地說明問題,還對寬度係數α和分辨率係數β之間不同組合地實驗進行了比較,結果見下圖:

其中阿爾法取值:α ∈ {1,0.75,0.5,0.25},β取值:{224,192,160,128}

隨後將MobileNet與VGG和GoogleNet進行了比較,同時用使用寬度係數和分辨率係數得到地模型與SqueezeNet和AlexNet進行了比較,實驗結果見下表,不多贅述:

實驗三:細粒度識別實驗
在Stanford Dogs數據集上訓練MobileNet進行細粒度識別。從網上收集了更大但嘈雜的訓練集。 使用嘈雜的網絡數據預先訓練細粒度識別狗的模型,然後在Stanford Dogs訓練集上微調模型。Stanford Dogs測試集的結果見表10.MobileNet幾乎可以在大大減少計算量和模型尺寸的情況下實現不錯的結果。

實驗四:大規模地理定位
PlaNet是做大規模地理分類任務,我們使用MobileNet的框架重新設計了PlaNet,對比如下:

PlaNet模型擁有5200萬個參數和57.4億個乘加操作。 MobileNet模型只有1300萬個參數,通常是網絡主體300萬個參數,最終層1000萬個參數和58萬個乘加操作。 如表格11所示,與PlaNet相比,MobileNet版本的性能略有下降,但是更緊湊。 而且,它仍然極大地優於Im2GPS。

實驗五:Face Attributes實驗
MobileNet的框架技術可用於壓縮大型模型,在Face Attributes任務中,我們驗證了MobileNet的蒸餾(distillation )技術的關係,蒸餾的核心是讓小模型去模擬大模型,而不是直接逼近Ground Label:

將蒸餾技術的可擴展性和MobileNet技術的精簡性結合到一起,最終系統不僅不需要正則技術(例如權重衰減和退火等),而且表現出更強的性能。

實驗六:關於目標檢測的實驗
在表13中,MobileNet與以VGG和Inception V2 爲骨幹網絡的Faster-RCNN 和SSD 框架進行了比較。 在我們的實驗中,SSD使用300作爲輸入分辨率(SSD 300)進行評估,並將Faster-RCNN與300和600作爲輸入分辨率(Faster RCNN 300,Faster-RCNN 600)進行比較。 Faster-RCNN模型每個圖像評估300個RPN提議框。 這些模型在COCO train + val上訓練,拿出了8k的minival,並在minival上進行評估。 對於這兩個框架,MobileNet實現了與其相當的結果,但是計算複雜性和模型大小相當少。

實驗七:Face Embeddings實驗
爲了構建移動FaceNet模型,我們使用蒸餾來訓練,從而使得FaceNet和MobileNet的輸出在訓練數據上的平方差最小。 可以在表14中看到, MobileNet的模型非常小。

五、源碼推薦

參考網站 https://github.com/Zehaos/MobileNet 進行實驗即可

六、致謝:

https://github.com/Zehaos/MobileNet
https://blog.csdn.net/u011974639/article/details/79199306
https://www.jianshu.com/p/854cb5857070
https://blog.csdn.net/t800ghb/article/details/78879612

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