張帆,黃赟,方子茁,郭威
(1.國家數(shù)字交換系統(tǒng)工程技術(shù)研究中心,河南 鄭州 450002;2.信息工程大學(xué),河南 鄭州 450001;3.紫金山實驗室,江蘇 南京 211111;4.東南大學(xué)網(wǎng)絡(luò)空間安全學(xué)院,江蘇 南京 211189)
卷積神經(jīng)網(wǎng)絡(luò)(CNN,convolutional neural network)模型在計算機(jī)視覺[1]、無人駕駛[2]等領(lǐng)域的高速發(fā)展和模型推理過程中所需巨大的內(nèi)存占用及高能耗問題引起了人們的關(guān)注。CNN 量化指的是將原始模型中使用32 位浮點表示的參數(shù)用更低比特位寬的參數(shù)來表示,由此來減小模型大小、提高運算效率,能夠有效地解決CNN 模型部署難的問題,成為神經(jīng)網(wǎng)絡(luò)加速領(lǐng)域的一個研究熱點。模型量化面臨著精度損失的難題,對此常用的量化方法通常使用數(shù)據(jù)集進(jìn)行量化訓(xùn)練或微調(diào)來降低精度損失,達(dá)到了較好的量化效果。而對于一些存在數(shù)據(jù)敏感性問題或需要量化實時性的應(yīng)用場景,如醫(yī)療、商業(yè)等領(lǐng)域,此時量化過程需要用到數(shù)據(jù)集的方法并不適用。
為解決數(shù)據(jù)敏感性場景下數(shù)據(jù)集不可用問題,本文利用神經(jīng)網(wǎng)絡(luò)批歸一化(BN,batch normalization)[3]層參數(shù)來生成模擬輸入數(shù)據(jù),通過損失最小化量化方法動態(tài)調(diào)節(jié)量化縮放因子進(jìn)行量化微調(diào),不需要使用數(shù)據(jù)集也能獲得較好的量化效果。
當(dāng)前CNN 模型大小、運算效率及能耗問題等成為制約其應(yīng)用部署的主要因素,而隨著存儲設(shè)備的發(fā)展,模型的運算效率及能耗相比較而言顯得更加突出。對于現(xiàn)場可編程門陣列(FPGA,field programmable gate array),相比于32 位浮點運算,8 位整數(shù)運算的功耗僅為,面積僅為,從而顯著提高計算吞吐量。對此本文采用8 bit 位寬來量化CNN模型,能夠有效減小模型大??;使用對數(shù)量化方法,使量化模型只含有整數(shù)乘法、加法及移位運算,能夠有效提高硬件設(shè)備的運算效率、降低功耗損失,有利于神經(jīng)網(wǎng)絡(luò)模型實際部署應(yīng)用。本文的主要工作如下。
1) 針對模型運算效率低及功耗大的問題,提出一種基于損失最小的對數(shù)量化方法。
2) 針對量化過程需要使用數(shù)據(jù)集的問題,提出一種模擬數(shù)據(jù)生成方法及激活無數(shù)據(jù)量化方法。
3) 針對所提量化方法,使用常用的圖像分類模型及目標(biāo)檢測模型驗證量化效果。
根據(jù)量化發(fā)生的階段不同,模型量化可分為兩類:訓(xùn)練中參數(shù)量化和訓(xùn)練后參數(shù)量化。訓(xùn)練中參數(shù)量化指在模型訓(xùn)練過程中對其進(jìn)行量化,其主要面臨模型量化在反向傳播過程中的梯度消失問題,對此可使用直通估計器來解決。文獻(xiàn)[5]針對二值量化導(dǎo)致模型前向和反向傳播過程產(chǎn)生嚴(yán)重的信息丟失問題,提出了一種信息保留網(wǎng)絡(luò)(IR-Net,information retention network),通過保留前向傳播和反向傳播中的信息來訓(xùn)練二值量化模型。IR-Net 在反向傳播過程中采用誤差衰減估計器(EDE,error decay estimator)來計算梯度,通過更好地逼近符號函數(shù)來最小化信息損失。文獻(xiàn)[6]提出了學(xué)習(xí)步長量化(LSQ,learned step size quantization)方法,將量化縮放因子設(shè)置為可訓(xùn)練的參數(shù),使其在網(wǎng)絡(luò)反向傳播過程中進(jìn)行學(xué)習(xí)調(diào)整;該研究通過一種簡單的啟發(fā)式方式,將縮放因子的更新和權(quán)重的更新保持平衡,得到更好的收斂精度。上述訓(xùn)練中參數(shù)量化方法都能有效降低量化損失,但實際中出于對隱私及數(shù)據(jù)安全性等問題考慮,訓(xùn)練數(shù)據(jù)存在無法訪問使用的情況,此時訓(xùn)練中參數(shù)量化訓(xùn)練并不適用。雖然參數(shù)量化過程發(fā)生在模型訓(xùn)練好之后,但當(dāng)前常用的訓(xùn)練后參數(shù)量化方法需要使用少量數(shù)據(jù)集來估算激活量化因子值或進(jìn)行量化微調(diào),同樣面臨著數(shù)據(jù)不可用問題。
為解決上述問題,面向無數(shù)據(jù)的訓(xùn)練后參數(shù)量化方法由此提出。無數(shù)據(jù)量化針對數(shù)據(jù)無法訪問的情況及量化激活時需要使用輸入數(shù)據(jù)這個矛盾,利用模型本身的一些參數(shù)特性來生成模擬數(shù)據(jù),以此來量化激活。無數(shù)據(jù)量化的難點主要集中在模擬數(shù)據(jù)的生成上,其量化性能很大程度取決于模擬數(shù)據(jù)的質(zhì)量,因而生成有意義的模擬輸入數(shù)據(jù)至關(guān)重要。文獻(xiàn)[7]首先生成符合高斯分布的隨機(jī)輸入數(shù)據(jù),然后利用BN 層中均值與方差參數(shù)來調(diào)節(jié)輸入數(shù)據(jù),再利用激活函數(shù)ReLU 的線性變換縮放不變特性,將量化因子進(jìn)行等價縮放來調(diào)節(jié)不同通道的權(quán)重范圍,均衡同層間不同通道數(shù)據(jù)值,使逐層量化達(dá)到了逐通道量化的效果。文獻(xiàn)[8]引入知識蒸餾的思想,通過輸入蒸餾數(shù)據(jù)計算得來的BN 層均值與方差與原始模型對應(yīng)參數(shù)的差值誤差最小化,不斷在反向傳播過程中調(diào)整蒸餾數(shù)據(jù)來得到模擬輸入數(shù)據(jù);該研究設(shè)計了一種基于帕累托邊界的混合比特量化方法,進(jìn)一步減小了量化誤差。文獻(xiàn)[9]使用對抗生成網(wǎng)絡(luò)的思想來產(chǎn)生模擬輸入數(shù)據(jù),提出了一種零樣本對抗量化(ZAQ,zero-shot adversarial quantization)框架,綜合考慮了最終輸出層差異及中間層通道間的量化差異,設(shè)計了一個基于兩級差異的結(jié)構(gòu)建模策略來衡量量化模型與原始模型之間的誤差。ZAQ 中的生成器基于極大極小博弈優(yōu)化思想,以對抗性學(xué)習(xí)的方式生成信息豐富且多樣化的模擬輸入數(shù)據(jù),實現(xiàn)了有效的差異估計和知識轉(zhuǎn)移。
上述方法雖然達(dá)到了無數(shù)據(jù)量化的目的,但并沒有充分研究利用真實的圖像數(shù)據(jù)分布特性。同時上述方法使用參數(shù)最大值來直接計算得到浮點量化縮放因子,獲得了較好的量化效果,但其量化及反量化過程中參數(shù)與量化因子的乘法操作依然為浮點運算,并沒有達(dá)到完全消除浮點乘法的效果,存在改進(jìn)的空間。對此本文基于BN 層參數(shù)及圖像數(shù)據(jù)分布特性來生成模擬輸入數(shù)據(jù),使用對數(shù)量化方法,使量化及反量化過程僅包含整數(shù)乘法、加法及移位運算,能夠進(jìn)一步提高硬件設(shè)備的運算效率、降低能耗損失。
相較于采用浮點縮放因子的線性量化方法,對縮放因子取對數(shù)的線性量化方法能夠解決線性量化含有浮點乘法算子的問題。但由于對數(shù)量化需對量化因子的指數(shù)部分進(jìn)行取整操作,其舍入過程會產(chǎn)生較大的誤差,因此本文使用損失最小化方法來動態(tài)調(diào)節(jié)取整值。
浮點模型各BN 層參數(shù)在模型訓(xùn)練過程中由卷積層輸出數(shù)據(jù)計算得到,與輸入數(shù)據(jù)相關(guān)。因而使用逆向思維方式,通過輸入隨機(jī)分布數(shù)據(jù)得到的BN 層參數(shù),將其與原始模型參數(shù)相比較,構(gòu)建損失函數(shù),在反向傳播過程中通過最小化損失調(diào)整模擬數(shù)據(jù)得到最優(yōu)模擬輸入數(shù)據(jù),用來量化激活值。下面對其具體實現(xiàn)進(jìn)行介紹。
線性量化運算簡單,有利于硬件設(shè)備實現(xiàn),故常被各種量化方法[6-9]所采用。本文在線性量化的基礎(chǔ)上,求量化因子時采用取對數(shù)的策略,能夠消除量化過程中的浮點乘法運算,使模型在推理過程中更加高效。
其中,x為被量化數(shù)據(jù),xq為量化后的整數(shù)值;z為量化零點值,本文取z=0;Δ為量化縮放因子;R(·)為取整函數(shù);c為截斷參數(shù),C(·)為截斷函數(shù),其計算方式為
量化縮放因子Δ的計算方式為
其中,n為量化位寬,s為Δ的指數(shù)部分值。因為Δ為2 的指數(shù)形式,所以量化及反量化過程中Δ與x的浮點乘法運算可用移位運算來代替,而移位操作幾乎不會帶來額外的推理時間和存儲消耗。量化之后通常需要反量化來還原之前的縮放尺寸,而對數(shù)量化能夠?qū)?quán)重及激活的量化因子與下一層的量化因子相結(jié)合,簡化了反量化操作。反量化的計算方式為
其中,xdq和wdq分別為反量化后的激活及權(quán)重值,因xdq*wdq為整數(shù)值與2 的指數(shù)形式參數(shù)相乘,可將其與下一卷積層量化因子相結(jié)合。因而本文所用方法能夠使量化及反量化過程中只包含整數(shù)乘法、移位及加法等簡單運算,能夠進(jìn)一步提高運算效率。
對數(shù)量化能夠提高運算效率、降低能耗損失,但由式(3)可知,在計算量化縮放因子Δ時,對所求的因子s需要進(jìn)行取整操作,而s為Δ的指數(shù)部分值,對其取整會導(dǎo)致Δ與原始最大值相差較大,最壞情況下會使其與原始最大值相差2±0.5,這給量化操作帶來更大的量化誤差。文獻(xiàn)[10]認(rèn)為對量化縮放因子取整時,最優(yōu)的縮放因子并不一定是離其最近的整數(shù)值。本文借用上述觀點,在對s進(jìn)行四舍五入取整的基礎(chǔ)上動態(tài)對其進(jìn)行微調(diào),對比不同因子得到的量化前后數(shù)值,選取誤差最小所對應(yīng)因子s取值。
本文使用L2 范數(shù)來衡量量化值與原始值之間的誤差,其計算方式為
其中,x為原始浮點數(shù)值;xdq為反量化后得到的數(shù)值,其為整數(shù)。
如式(7)~式(9)所示,首先通過四舍五入取整得到s0,然后得到量化縮放因子Δ0,代入式(1)得到量化值xq及反量化值xdq,代入式(6)得到對應(yīng)的損失值。
構(gòu)造相鄰舍入因子,令
同理可求得s1、s2對應(yīng)的損失值loss1、loss2,比較loss0、loss1、loss2的大小,則最小的損失所對應(yīng)的縮放因子為所求值,即
將s代入式(4)即可求得量化縮放因子Δ。
當(dāng)前CNN 模型在卷積運算后通過使用BN 層將數(shù)據(jù)歸一化,能夠有效解決過擬合和梯度爆炸等問題,加快網(wǎng)絡(luò)收斂速度。其計算方式為
其中,γ和β為模型訓(xùn)練過程中學(xué)習(xí)得到的參數(shù),u和σ2分別為
由式(13)可以看出,BN 層的均值μ及方差σ2皆由輸入的激活值x計算得到。因而可以利用BN層的參數(shù),通過對原始模型輸入一組隨機(jī)數(shù)據(jù)X0,在模型前向傳播過程中算得相應(yīng)新的參數(shù)值和σ2′,將其與原始模型的μ和σ2相比較構(gòu)建損失函數(shù),在反向傳播過程中使其損失最小化,不斷調(diào)整初始輸入數(shù)據(jù)X0值,得到與真實數(shù)據(jù)相似的最優(yōu)模擬輸入數(shù)據(jù)。
對于均值μ和方差σ2的實際值與模擬數(shù)據(jù)計算值之間的誤差,構(gòu)建相應(yīng)的損失函數(shù)為
其中,n為原始模型中BN 層的數(shù)量;μi′、為第i層BN 層計算的參數(shù)值,是輸入數(shù)據(jù)X的函數(shù),通過將模擬數(shù)據(jù)X=X0輸入原始模型,經(jīng)式(13)計算得到;μi、為其原始模型中的參數(shù)值。將損失L(X)通過Adam 算法在反向傳播過程中不斷更新優(yōu)化初始X0,Adam 算法如算法1 所示。
算法1Adam 算法
算法1 中,gt為目標(biāo)損失函數(shù)L的梯度;mt和vt為其偏一階矩和偏二階矩估計;β1(取β1=0.9)和β2(取β2=0.999)為矩估計的指數(shù)衰減率;Xt為待更新輸入數(shù)據(jù)值;α(取α=0.001)為學(xué)習(xí)率;ε(取ε=1 ×10-8)為極小的常數(shù)。通過Adam 算法得到總模擬輸入數(shù)據(jù)X=Xt,然后使用得到的模擬輸入數(shù)據(jù)及2.2 節(jié)中提到的損失最小化量化方法就能夠量化激活值,達(dá)到無數(shù)據(jù)量化的效果。
卷積神經(jīng)網(wǎng)絡(luò)模型量化主要針對卷積計算過程的激活和權(quán)重進(jìn)行量化操作。對于激活的量化,本文利用BN 層的參數(shù),使用誤差最小方法得到模擬輸入數(shù)據(jù),然后使用損失最小化量化方法對其進(jìn)行量化。對于權(quán)重的量化,則直接使用損失最小化量化方法對其進(jìn)行量化。下面對其具體實現(xiàn)進(jìn)行介紹。
任取兩張ImageNet 數(shù)據(jù)集中的圖片,將其進(jìn)行標(biāo)準(zhǔn)化、裁剪等數(shù)據(jù)預(yù)處理操作(數(shù)據(jù)維度為3×224×224),之后將其按通道展平為一維數(shù)據(jù)(3 個一維數(shù)據(jù),單個維度為1×50 176),再將每一個數(shù)據(jù)組按步長500 等距離取樣得到相同位置的散點分布。圖1 展示了兩張圖片在3 個不同通道的取樣數(shù)據(jù)分布,實線為將離散數(shù)據(jù)采用10 次多項式插值得到的擬合曲線。從圖1 中可以看到,不同通道數(shù)據(jù)的擬合曲線有很強的相似性,本文認(rèn)為這是因為每張圖片的通道間相同位置數(shù)據(jù)分布有很強的相似性。因而在使用2.3 節(jié)提出的模擬數(shù)據(jù)生成方法時,首先僅生成單一通道的隨機(jī)分布數(shù)據(jù),然后將其擴(kuò)充為三通道數(shù)據(jù),使之更加符合實際的數(shù)據(jù)分布特點。
圖1 兩張圖片在3 個不同通道的取樣數(shù)據(jù)分布
其中,ri(m,s)為隨機(jī)取整數(shù)函數(shù);m為最大值,對圖像數(shù)據(jù)取m=255;s=(n,n)為生成數(shù)據(jù)維度大小,如Resnet[11]模型取n=224。本文在對圖像進(jìn)行預(yù)處理時,標(biāo)準(zhǔn)化過程中使用均值mean=[0.485,0.456,0.406],方差std=[0.229,0.224,0.225],經(jīng)過歸一化及標(biāo)準(zhǔn)化處理后各維數(shù)據(jù)的最大值約為[2.249,2.429,2.624],因而在式(15)中將歸一化的數(shù)據(jù)折中乘以系數(shù)α=2.5。把x0擴(kuò)充為三通道圖像數(shù)據(jù)X0=(x0,x0,x0),將其輸入原始模型計算得到BN 層的參數(shù)μ′及σ2′,代入式(5)計算其相應(yīng)的損失值,依據(jù)損失最小化在反向傳播過程中不斷更新初始值X0,得到模擬輸入數(shù)據(jù)。
使用3.1 節(jié)生成的模擬輸入數(shù)據(jù),能夠解決量化激活需要使用數(shù)據(jù)集的問題。通過將模擬數(shù)據(jù)X0輸入原始模型得到每層卷積層的激活數(shù)據(jù)值,使用2.2 節(jié)提出的損失最小化量化方法量化激活值,可得到相應(yīng)的激活量化參數(shù)。
圖2 展示了激活量化的大致過程。圖2 中,步驟1表示將一組隨機(jī)分布的初始數(shù)據(jù)輸入原始浮點模型P,使用3.1 節(jié)提出的數(shù)據(jù)生成方法得到模擬數(shù)據(jù),利用BN 層參數(shù)及損失最小化原理,通過Adam(X0,L)優(yōu)化在反向傳播不斷調(diào)整模擬數(shù)據(jù),得到最優(yōu)的模擬輸入數(shù)據(jù)X0。步驟2 表示將X0輸入浮點模型得到激活值,使用2.2 節(jié)提出的損失最小化量化方法通過量化函數(shù)Q(xi)量化激活值,得到相應(yīng)的激活量化模型Q。
圖2 激活量化的大致過程
本節(jié)采用2.2節(jié)提出的損失最小化量化方法進(jìn)行權(quán)重量化。首先,對于原始浮點模型給出的權(quán)重,分別計算每層卷積權(quán)重對應(yīng)的s0;然后,根據(jù)反量化后的值與原始權(quán)重誤差最小化原理動態(tài)調(diào)整s0得到更優(yōu)的因子s;最后,計算量化縮放因子Δ,對權(quán)重進(jìn)行量化。圖3 展示了損失最小化量化方法對ResNet50 網(wǎng)絡(luò)權(quán)重進(jìn)行量化得到的初始因子s0與調(diào)整后的因子s取值對比。從圖3 可以看出,對于ResNet50 網(wǎng)絡(luò)的權(quán)重量化,大概有35%的點取值被調(diào)整。
圖3 因子調(diào)整前后對比
本節(jié)使用本文所提量化方法,在ImageNet[12]數(shù)據(jù)集上驗證了 ResNet50、Inception-v3[13]、RexNet3[14]等大型圖像分類模型及MobileNetV2[15]、RegNet[16]、GhostNet[17]等輕型圖像分類模型的量化效果,在COCO[18]數(shù)據(jù)集上驗證了RefineDet[19]和M2Det[20]目標(biāo)檢測模型的量化效果。本節(jié)實驗分為如下幾個部分:1) 將本文所提模擬數(shù)據(jù)生成方法與ZeroQ 框架模擬數(shù)據(jù)生成方法進(jìn)行對比分析實驗;2) 在ImageNet 數(shù)據(jù)集上使用常用的圖像分類模型進(jìn)行量化實驗,分析實驗結(jié)果;3) 在COCO 數(shù)據(jù)集上對RefineDet 及M2Det 目標(biāo)檢測模型進(jìn)行量化實驗,分析實驗結(jié)果。
本文實驗是在Centos7.6 操作系統(tǒng)下進(jìn)行的,使用的GPU 為NVIDIA Tesla V100 16 GB,實驗運行的Python 版本為3.6.13,Pytorch 版本為1.8.1,torchvision 版本為0.8.2,pytorchcv 版本為0.0.66。實驗中對圖像分類模型使用top1 及top5 準(zhǔn)確率[13]來評估模型效果,對目標(biāo)檢測模型使用平均精準(zhǔn)度(AP,average precision)[19]來評估模型效果。
本節(jié)使用ResNet50 圖像分類網(wǎng)絡(luò),對3.2 節(jié)所提的無數(shù)據(jù)激活量化方法與文獻(xiàn)[9]中ZeroQ 框架的激活量化方法進(jìn)行對比實驗。本節(jié)實驗主要對比模擬數(shù)據(jù)生成效率,因而實驗中對ZeroQ 同樣采用對數(shù)量化策略。因為實驗結(jié)果依賴生成的模擬數(shù)據(jù)集,具有一定的隨機(jī)性,所以使用多次實驗取平均值的方式進(jìn)行,實驗結(jié)果如表1 所示。從表1 中可以看出,本文所提無數(shù)據(jù)激活量化方法相比于ZeroQ 框架的激活量化方法對激活的量化效果,在模擬數(shù)據(jù)生成速率提高2.33 倍的情況下,量化模型的準(zhǔn)確率幾乎相同。本節(jié)實驗驗證了本文所提方法在有效減少數(shù)據(jù)生成時間的同時達(dá)到了與ZeroQ 相同的效果。
表1 模擬數(shù)據(jù)生成效率對比
上述實驗結(jié)果驗證了3.1 節(jié)所提依據(jù)數(shù)據(jù)分布特性所提出的模擬數(shù)據(jù)生成方式能夠有效地加快模擬數(shù)據(jù)的生成,同時生成的模擬數(shù)據(jù)通過Adam優(yōu)化調(diào)整而不影響其準(zhǔn)確率。
本節(jié)使用常用的圖像分類模型,對激活采用3.2 節(jié)所提的無數(shù)據(jù)激活量化方法,對權(quán)重采用3.3 節(jié)所提的權(quán)重量化方法對網(wǎng)絡(luò)進(jìn)行量化實驗。表2 展示了ResNet50、Inception-v3 及RexNet3等相對較大的圖像分類模型,將其激活和權(quán)重量化為8 bit 整數(shù)的實驗結(jié)果,本節(jié)實驗采用3 次實驗取平均值的方式展示實驗結(jié)果。從表2 中可以看到,本文所提方法將模型的激活和權(quán)重量化為8 bit 整數(shù)后,其top1 準(zhǔn)確率下降在0.5%左右,top5準(zhǔn)確率下降0.2%左右,量化模型準(zhǔn)確率和原始模型幾乎差不多。將模型量化至8 bit 能夠減小75%左右模型大小,有效減少內(nèi)存消耗、提高運算效率。
表2 大型圖像分類模型量化結(jié)果
表3 展示了對 Mobile NetV2、RegNet 及GhostNet 等輕量型圖像分類模型的量化結(jié)果。表3中W/A 分別表示權(quán)重及激活量化位寬,如W8/A8表示將權(quán)重和激活分別量化為8 bit 整數(shù)。當(dāng)將權(quán)重和激活量化至8 bit 整數(shù)時,網(wǎng)絡(luò)top1 準(zhǔn)確率下降了1%~2%;當(dāng)將其量化至16 bit 整數(shù),此時top1準(zhǔn)確率最大僅減少了0.32%,top5 準(zhǔn)確率減少量小于0.1%,達(dá)到了和原始浮點模型幾乎相同的精度。將權(quán)重和激活量化至16 bit 能夠減小模型大小50%左右,因而本文所提方法對輕量型圖像分類模型依然有壓縮效果。
表3 輕量型圖像分類模型的量化結(jié)果
本節(jié)通過量化實驗驗證了所提方法對圖像分類模型壓縮加速的有效性。圖像分類任務(wù)作為計算機(jī)視覺領(lǐng)域的基礎(chǔ)性任務(wù)之一,分類模型不僅用于圖像分類任務(wù),而且常用于圖像目標(biāo)檢測、實例分割等模型的骨干網(wǎng)絡(luò)使用,因而所提方法對目標(biāo)檢測等模型依然有效。
本節(jié)使用所提方法,對目標(biāo)檢測模型RefineDet和M2Det 在COCO 2014 驗證集進(jìn)行了量化對比實驗。表4 展示了將模型的激活采用3.2 節(jié)所提的無數(shù)據(jù)激活量化方法,權(quán)重采用3.3 節(jié)所提的權(quán)重量化方法,分別將其量化至8 bit 整數(shù)的量化效果。從表4 中可以看出,相較于原始模型,量化模型的RefineDet 的AP50:95量化誤差約為1.0%,M2Det 模型的AP50:95誤差約為0.6%,量化模型的誤差值都控制在1.0%左右的可接受范圍內(nèi)。圖4 展示了M2Det 模型對任意一張圖片量化前后目標(biāo)檢測實際效果對比情況。圖4(b)和圖4(c)分別為原始浮點模型及8 bit 量化模型檢測效果,從圖4 中可以看出,相對而言,僅鼠標(biāo)檢測的置信度有較大下降,但這幾乎不影響對物體的檢測框,對于大部分物體其置信度并不受影響。
表4 RefineDet 和M2Det 模型量化結(jié)果
圖4 M2Det 模型量化效果對比
對于上述實驗結(jié)果,本文認(rèn)為首先所提模擬數(shù)據(jù)生成方法生成的模擬輸入數(shù)據(jù)達(dá)到了與真實數(shù)據(jù)相近似的分布。其次,雖然對數(shù)量化會引入較大的量化誤差,但所提損失最小化量化方法能夠有效減小量化誤差,進(jìn)一步提高量化精度。
針對數(shù)據(jù)集不可用場景下CNN 量化問題,本文基于BN 層參數(shù)提出一種基于損失最小的CNN無數(shù)據(jù)量化方法。本文依據(jù)圖像各通道數(shù)據(jù)分布特性,利用BN 層參數(shù)及最小化誤差的方法,生成模擬數(shù)據(jù)用來量化激活值。在對量化因子取整的操作中,提出基于最小化不同取整值與原始浮點數(shù)值間誤差進(jìn)行選擇性取整的方法,選取最接近原始值的舍入值,有效地降低了量化損失。通過對常用圖像分類及目標(biāo)檢測模型進(jìn)行量化對比實驗,尤其對輕量型分類模型進(jìn)行了大量實驗,驗證了所提方法的有效性。本文使用的對數(shù)量化方法能夠消除量化及反量化過程中的浮點乘法運算,進(jìn)一步提高模型運算效率、降低功耗損失,有助于CNN 模型在手機(jī)等運算受限設(shè)備及云端部署應(yīng)用。下一步考慮將所提方法與模型剪枝等壓縮方式相結(jié)合,進(jìn)一步減小模型大小。