INT4量化用于目標(biāo)檢測(cè)
Int 4量化用于目標(biāo)檢測(cè)
【GiantPandaCV】文章2019 CVPR,講的是Int 4量化用于目標(biāo)檢測(cè),主要是工程化的一些trick。
文章介紹:文章是2019 CVPR 《Fully Quantized Network for Object Detection》,沒(méi)有開(kāi)源代碼。感受:這篇文章主要是做了實(shí)踐工作,可以看作是低bit量化(Int 4)用于目標(biāo)檢測(cè)的一些trick。
《Quantization and training of neural networks for efficient integer-arithmetic-only inference》簡(jiǎn)稱IAO
量化用于目標(biāo)檢測(cè)有以下困難:
1、Hardware-friendly end-to-end quantization現(xiàn)有的一些量化算法(Dorefa-net、《Quantized neural networks:Training neural networks with low precision weights andactivations》)只是在部分操作做量化,比如卷積操作和矩陣乘法,還有些操作是全精度的。
這個(gè)會(huì)帶來(lái)兩個(gè)問(wèn)題:(1)、一些操作在訓(xùn)練中沒(méi)辦法進(jìn)行量化,比如batch normalization(Dorefa-net),這會(huì)造成訓(xùn)練和驗(yàn)證之間的不匹配(mismatch)和難以收斂;(2)、在推理時(shí)候,還是有浮點(diǎn)數(shù)操作,這讓數(shù)據(jù)在int arithmetic和float arithmetic之間轉(zhuǎn)化,影響推理速度。
2、Low bitwidth quantization on complex tasks超低bit的量化如binary NN和Ternary NN精度上難以滿足,8-bit的量化算法比較成熟,再低bit的Int算法即Int-4。在IAO中,低于8-bit的quantization-aware finetune會(huì)不穩(wěn)定且難以收斂。
作者發(fā)現(xiàn),糟糕的精度和收斂是量化模型的一些敏感操作的不穩(wěn)定造成的。1、在batch normalization中,非常小的batch在做finetune時(shí)候,會(huì)導(dǎo)致統(tǒng)計(jì)量的估算值不準(zhǔn)。2、bn之后的activation會(huì)包含離群值,這個(gè)也會(huì)導(dǎo)致精度的損失。3、不同通道的模型的權(quán)值會(huì)有不同的值域,因此直接layer-wise的bn會(huì)不準(zhǔn)確。
針對(duì)上述的問(wèn)題,采用下面的trick來(lái)提升quantization-aware finetune:1、在做quantization-aware finetune時(shí)候,固定bn層的參數(shù);然后歸一化activation,歸一化的參數(shù)是模型訓(xùn)練完的時(shí)候的均值和方差。2、用小的訓(xùn)練數(shù)據(jù)集去調(diào)整(activation)激活函數(shù)的閾值(要clip的閾值),用百分比的方法丟棄離群值和截?cái)嗔炕募せ詈瘮?shù)值和梯度。3、對(duì)所有的參數(shù),采用channel-wise的量化。
量化神經(jīng)網(wǎng)絡(luò)的過(guò)程:1、全精度訓(xùn)練 2、quantization-aware finetune(只在前向傳播) 3、fully-quantized inference,這里要fold BN,激活函數(shù)和模型參數(shù)都要量化到低bit,且沒(méi)有浮點(diǎn)數(shù)的操作
一些細(xì)節(jié):1、mapping scheme采用均勻分布的量化策略,且是非對(duì)稱量化,就是有zero-point。2、weight quantization:采用channel-wise的方式 3、激活函數(shù)值的量化:量化所有的activation,從input,到送進(jìn)anchor回歸和NMS的最后的activation都進(jìn)行量化。激活函數(shù)截?cái)嗟拈撝挡捎肊MA,與IAO文章中的方法一樣。為了讓4-bit更加穩(wěn)定,首先從訓(xùn)練集中隨機(jī)采樣n個(gè)batches數(shù)據(jù)做校準(zhǔn)(calibration),在這個(gè)采樣的數(shù)據(jù)中做驗(yàn)證(跑一次訓(xùn)練中的evaluation),記錄下每層的activation,并且讓activation在[,] (0 < < 1) 內(nèi),文章設(shè)置n=20,=0.999. 4、折疊bn。在quantization-aware finetune中,固定bn的參數(shù),不更新bn的均值和方差。5、對(duì)齊zero-point:zero-point主要用于zero-padding 6、上采樣和element-wise的操作(針對(duì)FPN):上采樣都采用最近插值( nearest interpolation); element-wise的加法跟IAO的一樣,就是為了能有bit-shit的優(yōu)化
下面是一些實(shí)驗(yàn)數(shù)據(jù)和表格:





歡迎關(guān)注GiantPandaCV, 在這里你將看到獨(dú)家的深度學(xué)習(xí)分享,堅(jiān)持原創(chuàng),每天分享我們學(xué)習(xí)到的新鮮知識(shí)。( ? ?ω?? )?
有對(duì)文章相關(guān)的問(wèn)題,或者想要加入交流群,歡迎添加BBuf微信:
為了方便讀者獲取資料以及我們公眾號(hào)的作者發(fā)布一些Github工程的更新,我們成立了一個(gè)QQ群,二維碼如下,感興趣可以加入。
