解讀模型壓縮2:你一定從未見過如此通俗易懂的模型壓縮slimming操作解讀

本文已授權極市平臺,未經允許不得二次轉載,如有需要請私信作者。

專欄目錄

目錄

  • 如何衡量模型的復雜度?
  • Literature Review for Model Compression
  • Slimming
  • Slimming操作壓縮GAN模型
  • 參考文獻

如何衡量模型的復雜度?

在學習slimming操作之前的很重要一步是搞懂模型壓縮領域的指標的含義。很多優秀的CNN模型在部署到端側設備時會遇到困難,主要難在下面這3個方面。它們也是模型壓縮領域關註的3個參數:

  • model size
  • Runtime Memory
  • Number of computing operations
  • model size

就是模型的大小,我們一般使用參數量parameter來衡量,註意,它的單位是個。但是由於很多模型參數量太大,所以一般取一個更方便的單位:兆(M)來衡量。比如ResNet-152的參數量可以達到60 million = 0.0006M。

有些時候,model size在實際計算時除瞭包含參數量以外,還包括網絡架構信息和優化器信息等。比如存儲一個一般的CNN模型(ImageNet訓練)需要大於300MB。

這裡你可能會有疑問:剛才的單位是M,怎麼這裡出來瞭個MB?是不是寫錯瞭?

肯定沒有,我們需要註意這裡的M和MB的換算關系:

所以讀到這裡你應該明白說一個模型的model size,用M和MB其實是一樣的意思。

那你可能還會有疑問:是不是一定要用32位存儲?

這個問題很好,現在的quantization技術就是減少參數量所占的位數:比如我用8位存儲,那麼:

更有甚者使用二值神經網絡進一步減小參數量所占的位數(權值被限制為{-1, 1}或{-1, 0, 1}),後文有論文的鏈接,有空再專門介紹這個方法吧。下面簡單介紹下參數量的計算方法:

卷積層參數量的計算方法:

如圖中第2行所示為卷積核:這些卷積核時權重共享的,所以參數量為:

Params_{w}=K_{in}times K_{out}times C_{in}times C_{out}tag{1}

Params_{b}=C_{out}tag{2}

Params=K_{in}times K_{out}times C_{in}times C_{out}+C_{out}tag{3}

=(K_{in}times K_{out}times C_{in}+1)times C_{out}

全連接層參數量的計算方法:

Params_{w}=N_{in}times N_{out}tag{4}

Params_{b}=N_{out}tag{5}

Params_{}=N_{in}times N_{out}+N_{out}tag{6}

  • Run time Memory

就是模型實際運行時所占的內存。註意這個指標與隻存儲模型參數所占的存儲空間的大小是不一樣的,這個指標更大。這對於GPU來講不算是問題,但是對於硬件能力極為有限的端側設備來說就顯得無法承受瞭。它的單位是兆字節 (MB)。

  • Number of computing operations

就是模型的計算量,有FLOPs和MACs兩種衡量的方式、簡而言之,前者指的是乘加的數量,而後者指運算量。比如ResNet-152在前向傳播一張256 * 256的圖片的運算量可以達到20 GFLOPs。下面簡單介紹下模型計算量的計算方法:

第1種:FLOPs:

卷積層FLOPs的計算方法:

隻需在parameters的基礎上再乘以feature map的大小即可,即對於某個卷積層,它的FLOPs數量為:

FLOPs|_{bias}=2K_{in}times K_{out}times C_{in}times C_{out}times H_{out}times W_{out}tag{1}

FLOPs|_{no bias}=(2K_{in}times K_{out}times C_{in}-1)times C_{out}times H_{out}times W_{out}tag{2}

如果計算 bias ,則 K_{in}times K_{out}times C_{in}times C_{out}times H_{out}times W_{out} 為乘法的運算量。

(K_{in}times K_{out}times C_{in}-1)times C_{out}times H_{out}times W_{out} 為加法的運算量。

1times C_{out}times H_{out}times W_{out}bias 的運算量。

全連接層FLOPs的計算方法:

對於全連接層,由於不存在權值共享,它的FLOPs數目即是該層參數數目:

FLOPs_{}=(2N_{in}-1)N_{out}tag{8}

N_{in}N_{out} 為乘法的運算量, (N_{in}-1)N_{out} 為加法的運算量。

第2種:MACs:

MACs與FLOPs的關系:

設有全連接層為:

y = w[0]*x[0] + w[1]*x[1] + w[2]*x[2] + ... + w[n8]*x[8]

发表回复

相关推荐

卸貨港/交貨地=中轉港/目的港?

“中轉港”有時也稱為“中轉地”,是指貨物從啟航港前往目的港,途經行程中的第三港口,運輸工具進行停靠、裝卸貨物、補給等操作...

· 25秒前

杠精系列·三國殺中所有鎖定技都有負面效果嗎?

在上一個回答中,我說過:“三國殺的所有鎖定技都具有一定的負面效果”。這是在之前的貼吧中廣為流傳的一句話,每一次提出都會...

· 33秒前

新五代史·伶官傳序,北宋·歐陽修

新五代史·伶官傳序 北宋· 歐陽修【原文】嗚呼!盛衰之理,雖曰天命,豈非人事哉!原莊宗之所以得天下,與其所以失之者,可...

· 1分钟前

常見的門窗玻璃的加工工藝

本文通過玻璃加工工藝的註意事項介紹讓大傢進一步瞭解門窗玻璃1.切片切三角形玻璃時,角部太尖的地方(一般小於30度)掰片時...

· 1分钟前

“碎銀子”是什麼茶?為什麼盡量別喝?這4種坑人茶,早知早受益

人們常說,喝茶可以靜心養身,但是隨著市面上各種新茶的出現,讓人挑的眼花繚亂。但是有一樣茶可以說是懂茶的人人嫌棄,不懂...

· 1分钟前