Towards Accurate Post-training Network Quantization via Bit-Split and Stitching

自動化所的一篇文章, 文章地址, 代碼地址

文章主要有兩個創(chuàng)新點

  1. 將量化后的weigths進(jìn)行split, 然后優(yōu)化每一位bit, 使得目標(biāo)函數(shù)最小, 得到每一位的bit后再將所有位的bit進(jìn)行stitching
  2. 在保證計算效率的前提下, 可以對Activation使用per-channel的量化, 論文中叫Error Compensated Activation Quantization(ECAQ)

下面針對這兩條分別說明,

Bit-Split and Stitching

Bit-Split and Stitching
  • 常規(guī)的二進(jìn)制, 第一位是符號位, 后面的是絕對值, 每一位只能取0或1. split的作用就是把符號位分配給每個bit, 經(jīng)過split處理, 總位數(shù)會少1, 每一位可取值變?yōu)?1, 0, 1. 可表示的范圍其實沒變都是最小位-111, 最大111.
    經(jīng)過這樣處理后, 就可以利用論文中的公式進(jìn)行優(yōu)化, 優(yōu)化這塊不太懂. 大致思想還是迭代, 每次迭代時, 固定其他值, 然后求解其中某一位的值.

其實我不太懂, 為什么這里split后求解得出的量化值和scale精度就會更好

  • conv/fc的計算過程可以表示位 Y = W^{T}X(假設(shè)Wshape為[M, N] Xshape為[N, C], 則Y的shape為[M, C]), 經(jīng)過per_tensor量化后變?yōu)?img class="math-inline" src="https://math.jianshu.com/math?formula=Y%20%3D%20%5Calpha%20%5Chat%7BW%7D%5Chat%7BX%7D%5Cbeta" alt="Y = \alpha \hat{W}\hat{X}\beta" mathimg="1">其中\alpha\beta均為標(biāo)量, 經(jīng)過這樣處理后, 計算量較大的WX變成了\hat{W}\hat{X} 由原來的float計算變?yōu)榱薸nt型的計算.
    當(dāng)W變?yōu)閜er_channel量化后, 上述過程仍適用. 當(dāng)變?yōu)閜er_channel量化后, \alpha又標(biāo)量變?yōu)橄蛄? \pmb{\alpha} 且其維度為M. 但是若對X使用per_channel的量化方法, 則\beta的維度為N, 這樣的話, 無法繼續(xù)將原有的浮點計算轉(zhuǎn)為定點計算, 否則數(shù)學(xué)上無法等價.
    ECAQ的主要思想如圖, 即對X進(jìn)行per_channel量化, 但是將量化的scale乘到W中.
    ECAQ

    這里在代碼實現(xiàn)層面使用了in_scaleout_scale, 所以原本的計算過程變?yōu)?br> \tilde{X} = \beta_{out}\frac{X}{\beta_{in}}
    這里的\beta_{out}會乘到對應(yīng)的W中, 當(dāng)把\beta_{out}乘到后續(xù)的W中以后, X的fake quantize將變成
    \hat{X} = \frac{X}{\beta_{in}}
    在代碼中這里會設(shè)置out_scale=1, 也就是X經(jīng)過Quantization op后的輸出為int, 而非平時的Quantization那樣, 輸出的是近似與float X的值.

該論文的代碼需要注意下面一些地方:

  1. 先對W進(jìn)行進(jìn)行ofwa(optimal fixed-point weight approximation) 解出初步最佳值
  2. 利用layer的input 和 output再進(jìn)行ofwa解出W的最佳量化值和scale, 并保存為文件
  3. load量化后的W到model內(nèi), 然后使用數(shù)據(jù)對量化activation
  4. Weights bitwidth=8時時間較長
  5. 當(dāng)使用ECAQ時, 對feature定點后得到β, 此后beta固定, 且此feature以定點后的數(shù)值存在
  6. 默認(rèn)情況relu后的quantizer是signed
  7. First and last layer activation quantize bit-width is always 8
  8. 不會fold BN
  9. input image 沒有定點
  10. 只在conv前定點
  11. 從feature map中隨機(jī)選取點進(jìn)行量化, 所以結(jié)果每次會有所不同

resnet 系列網(wǎng)絡(luò)的quantization插入位置

resnet 系列網(wǎng)絡(luò)的quantization插入位置

mobilenet系列網(wǎng)絡(luò)的quantization插入位置

mobilenet系列網(wǎng)絡(luò)的quantization插入位置

實驗:

resnet 18和resnet50

基本復(fù)現(xiàn)了論文中的結(jié)果, 但是代碼沒有給出ECAQ的實現(xiàn), 自己實現(xiàn)后, 結(jié)果為
A3W8:
float 69.758/89.078
Bit split & stitch: * Acc@1 64.754 Acc@5 85.926
Bit split & stitch + ECAQ: * Acc@1 66.262 Acc@5 86.750
略有提升, 但是不多.
ECAQ在實現(xiàn)時, 對每一個conv做完ECAQ后需是使用乘以\beta后的W作為conv的weights, 并且,與之對應(yīng)的activation的Quantization的in\_scale=\beta, out\_scale=1

mobilenet v2

Bit width | accuracy | accuracy after quantize W but not quantize activation
---- | ----- |
A8W8: | * Acc@1 71.644 Acc@5 90.134 | * Acc@1 71.842 Acc@5 90.296
A8W4: | * Acc@1 67.898 Acc@5 88.028 | * Acc@1 63.652 Acc@5 85.112
A4W4: | * Acc@1 36.672 Acc@5 61.942 | * Acc@1 64.240 Acc@5 85.496

A4W4+ECAQ后:

  • Acc@1 46.160 Acc@5 71.004 (只對第一層使用ECAQ)
    這里很奇怪, 如果對所有層使用ECAQ, 最終結(jié)果不理想,
    但如果只對第一層使用ECAQ, 絕對精度雖然還不行, 但是相對于原始的量化, 提升很多
    只對第一層量化: * Acc@1 46.160 Acc@5 71.004

思考

  • 由于量化條件比較寬松( , per_channel, float scale, unsigned), 所以在8bit時精度幾乎沒有掉. 這篇論文主要在說自己在低比特時效果更好, 但是實驗?zāi)P投紝儆诒容^好量化的, 在mobilenet v2上的效果似乎不是特別好.
  • 而且他們在量化時沒有fold bn也挺奇怪.
  • 從實驗來看, per_channel和per_tensor的量化方式, 對于activation來說貌似影響不大, 即使將per_tensor替換為per_channel精度提升似乎并不高
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末嫉髓,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖匪傍,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肮之,死亡現(xiàn)場離奇詭異,居然都是意外死亡七嫌,警方通過查閱死者的電腦和手機(jī)惩激,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門店煞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人风钻,你說我怎么就攤上這事顷蟀。” “怎么了骡技?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵鸣个,是天一觀的道長。 經(jīng)常有香客問我布朦,道長囤萤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任是趴,我火速辦了婚禮涛舍,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘右遭。我一直安慰自己做盅,他們只是感情好缤削,可當(dāng)我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布窘哈。 她就那樣靜靜地躺著,像睡著了一般亭敢。 火紅的嫁衣襯著肌膚如雪滚婉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天帅刀,我揣著相機(jī)與錄音让腹,去河邊找鬼远剩。 笑死,一個胖子當(dāng)著我的面吹牛骇窍,可吹牛的內(nèi)容都是我干的瓜晤。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼腹纳,長吁一口氣:“原來是場噩夢啊……” “哼痢掠!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起嘲恍,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤足画,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后佃牛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體淹辞,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年俘侠,在試婚紗的時候發(fā)現(xiàn)自己被綠了象缀。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡爷速,死狀恐怖攻冷,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情遍希,我是刑警寧澤等曼,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站凿蒜,受9級特大地震影響禁谦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜废封,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一州泊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧漂洋,春花似錦遥皂、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至贝咙,卻和暖如春样悟,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工窟她, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留陈症,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓震糖,卻偏偏與公主長得像录肯,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子吊说,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容