模型部署系列 | 卷積Backbone量化技巧集錦
點(diǎn)擊下方卡片,關(guān)注「集智書童」公眾號
本文首發(fā)于 【集智書童】,白名單賬號轉(zhuǎn)載請自覺植入本公眾號名片并注明來源,非白名單賬號請先申請權(quán)限,違者必究。
深度神經(jīng)網(wǎng)絡(luò)在廣泛的任務(wù)中被證明是有效的。然而,它們高昂的計(jì)算和內(nèi)存成本使得在資源受限的設(shè)備上部署它們不切實(shí)際。為了解決這個(gè)問題,已經(jīng)提出了量化方案來減少內(nèi)存占用并提高推理速度。雖然已經(jīng)提出了許多量化方法,但它們?nèi)狈ζ溆行缘南到y(tǒng)分析。
為了彌補(bǔ)這一空白,作者收集并改進(jìn)現(xiàn)有的量化方法,并提出了PTQ量化的黃金準(zhǔn)則。作者在ImageNet數(shù)據(jù)集上使用2個(gè)流行的模型,ResNet50和MobileNetV2,評估了作者提出的方法的有效性。按照作者的準(zhǔn)則進(jìn)行量化后,即使直接將模型量化為8位也不會導(dǎo)致準(zhǔn)確性下降,無需額外的訓(xùn)練。
基于準(zhǔn)則的量化感知訓(xùn)練可以進(jìn)一步提高低位量化的準(zhǔn)確性。此外,作者還整合了一個(gè)多階段微調(diào)策略,與現(xiàn)有的剪枝技術(shù)協(xié)同工作,進(jìn)一步降低成本。
值得注意的是,作者的結(jié)果顯示,30%稀疏的量化MobileNetV2實(shí)際上超越了等效的全精度模型的性能,凸顯了作者提出的方案的有效性和韌性。
1、簡介
自從AlexNet的引入以來,提出了大量出色的卷積神經(jīng)網(wǎng)絡(luò),對各種視覺任務(wù)取得了有希望的成果。盡管取得了顯著的結(jié)果,但在嵌入式或移動設(shè)備上部署CNN模型仍然具有挑戰(zhàn)性,因?yàn)樗鼘τ?jì)算和內(nèi)存存儲造成了巨大負(fù)擔(dān)。
為了解決這個(gè)問題,已經(jīng)進(jìn)行了大量的研究來降低相關(guān)成本,從而使CNN模型在實(shí)際應(yīng)用中更加實(shí)用。廣泛來說,這方面的研究可以分為3個(gè)不同的領(lǐng)域:
-
高效結(jié)構(gòu)設(shè)計(jì) -
模型剪枝 -
模型量化
高效結(jié)構(gòu)設(shè)計(jì)是一個(gè)富有挑戰(zhàn)性的研究領(lǐng)域,引入了分離卷積作為一種有效的技術(shù)。這種方法將標(biāo)準(zhǔn)卷積分解為深度卷積和逐點(diǎn)卷積,從而減少計(jì)算量。其在高效網(wǎng)絡(luò)中的成功應(yīng)用包括MobileNets和ShuffleNets。這些網(wǎng)絡(luò)廣泛應(yīng)用于資源受限的設(shè)備,并在實(shí)際應(yīng)用中顯示出了希望。此外,還提出了各種剪枝策略來減少計(jì)算和存儲負(fù)擔(dān)。然而,這些方法往往會導(dǎo)致準(zhǔn)確性降低,使它們在實(shí)際應(yīng)用中不那么吸引人。因此,重點(diǎn)已經(jīng)轉(zhuǎn)向開發(fā)高效結(jié)構(gòu)設(shè)計(jì)方法,既可以提供高準(zhǔn)確性,又不會損害計(jì)算效率。
量化是一種非常有效的部署模型的方法。它的有效性已經(jīng)在最近的研究中得到證明,并因其硬件友好的特性而在工業(yè)界越來越受歡迎,它可以顯著降低計(jì)算和內(nèi)存成本。然而,盡管具有諸多優(yōu)勢,全精度模型和量化模型之間存在顯著的準(zhǔn)確性差距。這種差距在低位量化情況下(例如4位)尤為明顯。盡管如此,研究人員正在積極努力縮小這一差距,使量化變得更加有效。
本文對卷積神經(jīng)網(wǎng)絡(luò)上的每個(gè)量化因素進(jìn)行了系統(tǒng)的探索,形成了PTQ量化的黃金準(zhǔn)則。此外,作者提出的多階段微調(diào)策略使得量化能夠與現(xiàn)有的剪枝策略協(xié)同工作。在ImageNet上使用ResNet-50和MobileNetV2進(jìn)行不同位寬的量化的詳細(xì)實(shí)驗(yàn)展示了作者提出方法的有效性。
2、量化方案
本節(jié)中,作者收集、審查和改進(jìn)了現(xiàn)有的方法,以獲取準(zhǔn)確的量化神經(jīng)網(wǎng)絡(luò)。然后,作者進(jìn)行了實(shí)驗(yàn),使用兩個(gè)代表性模型,ResNet50和MobileNetV2,在ImageNet數(shù)據(jù)集上檢驗(yàn)這些方法的有效性。除非在實(shí)驗(yàn)中另有說明,權(quán)重和激活的位寬均設(shè)置為8位。
ImageNet分類任務(wù)被廣泛認(rèn)為是一個(gè)具有挑戰(zhàn)性的基準(zhǔn),用于測試量化算法的有效性。該數(shù)據(jù)集包含128萬個(gè)訓(xùn)練圖像和5萬個(gè)驗(yàn)證圖像。在全精度訓(xùn)練期間,作者使用了隨機(jī)大小裁剪策略,然后進(jìn)行隨機(jī)翻轉(zhuǎn)和均值通道減法。作者的小Batch-size設(shè)置為256,并使用動量SGD優(yōu)化器。
對于ResNet50,初始學(xué)習(xí)率設(shè)置為0.1,作者在第30、60和90個(gè)Epoch分別將其降低10倍,總共100個(gè)Epoch。對于MobileNetV2,初始學(xué)習(xí)率也為0.1,在第90、180和270個(gè)Epoch分別降低10倍,總共300個(gè)Epoch。
2.1、PTQ量化
1、確定最優(yōu)的量化尺度
在進(jìn)行高效的量化時(shí),確定最優(yōu)的量化尺度是主要挑戰(zhàn)之一。選擇給定位寬的大尺度允許更寬的表示范圍,可以避免數(shù)據(jù)溢出,但也會導(dǎo)致更多的分布誤差。相反,選擇較小的尺度在大多數(shù)情況下可以減小量化誤差,但由于數(shù)據(jù)范圍較窄,可能導(dǎo)致數(shù)據(jù)溢出,從而導(dǎo)致數(shù)值計(jì)算錯(cuò)誤。
為了解決這個(gè)問題,NVIDIA的TensorRT采用了一種PTQ量化方法,通過最小化量化前后特征圖分布之間的Kullback-Leibler(KL)散度來掃描量化尺度。這種方法在量化流行的CNN模型,如ResNet和MobileNet,時(shí)表現(xiàn)出色,并且不需要額外的微調(diào)。
在數(shù)理統(tǒng)計(jì)的背景下,KL散度是衡量兩個(gè)概率分布之間差異的一種度量。因此,通過最小化真實(shí)值和其量化結(jié)果之間的KL散度,它可以用于確定合適的量化尺度。
然而,通過實(shí)驗(yàn)作者發(fā)現(xiàn),直接使用與最小KL散度相對應(yīng)的尺度通常會導(dǎo)致性能下降。相反,作者發(fā)現(xiàn)優(yōu)越結(jié)果的最優(yōu)尺度通常大于最小KL散度的尺度。因此,作者引入了一個(gè)容差系數(shù) 來改進(jìn)CNN中的量化性能。作者不再選擇具有最小KL散度的尺度,而是在一系列尺度候選值中掃描,并選擇其對應(yīng)的KL散度小于最小KL散度的T倍的最大值。
表1展示了作者方法的結(jié)果。為簡單起見,作者為網(wǎng)絡(luò)中的所有層設(shè)置了一個(gè)全局容差參數(shù) 。 為1.0時(shí),對應(yīng)于使用傳統(tǒng)的KL散度算法進(jìn)行特征圖量化,它選擇具有最小KL散度的量化尺度,并用作比較的基準(zhǔn)。隨著T的增加,作者觀察到ResNet50和MobileNetV2的顯著性能改進(jìn)。
但是,如果將 設(shè)置為非常高的值,它會退化為簡單的對稱MinMax量化,即將張量的最大值選為量化閾值。作者發(fā)現(xiàn)將 設(shè)置為1.3可以顯著改進(jìn)大多數(shù)模型。
2、確定激活量化尺度的細(xì)節(jié)
通過作者的實(shí)驗(yàn),作者發(fā)現(xiàn),優(yōu)秀結(jié)果的最優(yōu)尺度通常大于對應(yīng)于KL散度最小值的尺度,如圖1所示。
基于這一觀察,作者對之前在標(biāo)準(zhǔn)KL散度算法進(jìn)行了改進(jìn)。作者對改進(jìn)后的算法進(jìn)行了詳細(xì)描述,如算法1所示。
在該算法中,作者通過不斷迭代,利用KL散度的計(jì)算結(jié)果和給定的浮點(diǎn)范圍來更新激活和權(quán)重的最優(yōu)尺度,直至達(dá)到收斂條件為止。通過這樣的改進(jìn),作者可以得到更優(yōu)的尺度,從而獲得更優(yōu)越的結(jié)果。
3、量化的粒度
通常情況下,對整個(gè)張量使用單一的量化尺度通常會得到令人滿意的結(jié)果。然而,Jacob等人最近的研究表明,在卷積權(quán)重的每個(gè)卷積核中使用不同的量化尺度可以得到出色的性能,在將模型部署到硬件上時(shí)不會增加計(jì)算復(fù)雜性。
在文獻(xiàn)中,卷積層中的權(quán)重量化分為兩種類型:Per-Tensor和Per-Channel。雖然激活只允許進(jìn)行Per-Tensor量化,但卷積權(quán)重可以進(jìn)行Per-Channel量化。
表2對比了8位和7位的Per-Tensor量化和Per-Channel量化。結(jié)果顯示,在所有情況下,Per-Channel量化始終優(yōu)于Per-Tensor量化,這是可以預(yù)期的,因?yàn)樗峁┝烁蟮撵`活性和更少的分布誤差。此外,隨著位寬的降低,性能差距變得更加明顯。
例如,在8位量化中,MobileNetV2的top-1準(zhǔn)確率為71.45%,而Per-Channel量化優(yōu)于Per-Tensor變體0.54%。然而,在7位量化中,差距擴(kuò)大到2.48%。這些結(jié)果表明,在神經(jīng)網(wǎng)絡(luò)的權(quán)重中,Per-Channel量化的優(yōu)勢。
4、無符號量化
ReLU激活在現(xiàn)代架構(gòu)中常被使用,用于解決梯度消失問題。在ReLU中,負(fù)的激活值被截?cái)酁榱恪.?dāng)在ReLU之后對特征圖進(jìn)行量化時(shí),可以應(yīng)用無符號量化來改進(jìn)正值的表示,通過丟棄負(fù)值來實(shí)現(xiàn)。本質(zhì)上,這種方法相當(dāng)于在正值的量化中添加一個(gè)額外的比特,從而有效地將表示的范圍加倍。
為了評估無符號量化的有效性,作者將其結(jié)果與有符號量化進(jìn)行了比較。如表3所示,作者觀察到量化的類型對高效網(wǎng)絡(luò)有重要影響。使用無符號量化,MobileNetV2的top-1準(zhǔn)確率達(dá)到了71.94%,與全精度訓(xùn)練的準(zhǔn)確率相等。
另一方面,有符號量化的變體只達(dá)到了71.28%的top-1準(zhǔn)確率。因此,對于正激活值的表示,加入無符號量化對于在不增加額外成本的情況下獲得更好的準(zhǔn)確性至關(guān)重要。
5、量化位置
通常,在卷積層之后進(jìn)行量化,可以有或沒有激活層。在具有通過逐元素求和的快捷連接的殘差網(wǎng)絡(luò)中,通常會對殘差分支的輸出激活和求和后的特征進(jìn)行量化。
然而,作者觀察到在殘差分支的末端進(jìn)行量化會顯著降低性能。這是因?yàn)樵谇蠛偷那闆r下,兩個(gè)輸入特征的量化尺度需要保持一致。
作者認(rèn)為這是一個(gè)嚴(yán)格的約束條件,可能導(dǎo)致顯著的準(zhǔn)確性降低。因此,在逐元素求和中,作者更傾向于保持浮點(diǎn)算術(shù)(例如半精度)并在所有實(shí)驗(yàn)中使用它。
6、量化放置的說明
如前所述,作者更傾向于使用浮點(diǎn)運(yùn)算(如半精度)來進(jìn)行元素級求和。圖2展示了ResNet中量化瓶頸塊的一個(gè)例子。
7、INT16中的累積
為了避免在卷積的累積過程中出現(xiàn)數(shù)據(jù)溢出,通常的做法是使用INT32數(shù)據(jù)類型來存儲中間累積結(jié)果,即使權(quán)重和激活值被量化為8位或更少的位寬。
然而,為了進(jìn)一步降低延遲和內(nèi)存占用,作者建議在權(quán)重和激活值的位寬之和小于等于14時(shí)使用INT16數(shù)據(jù)類型進(jìn)行累積。在作者的設(shè)置中,作者將卷積的權(quán)重量化為6位,激活值量化為8位,這滿足了這個(gè)要求。
表格4展示了結(jié)果。作者發(fā)現(xiàn),在量化的MobileNetV2中使用INT16進(jìn)行累積時(shí),幾乎保持了準(zhǔn)確性,這驗(yàn)證了使用INT16進(jìn)行累積的有效性。
8、關(guān)于在INT16中的積累的詳細(xì)闡述
在后續(xù)的第2.1節(jié)中,作者簡要提及了累積過程。在這里,作者將詳細(xì)介紹這個(gè)過程。圖3說明了量化卷積的累積過程,其中A、W和O分別表示卷積層的浮點(diǎn)輸入激活、權(quán)重和輸出激活。進(jìn)行量化卷積操作時(shí),首先使用量化尺度SA和SW將A和W分別量化為INT8和INT6表示,表示為Aint和Wint。
通常情況下,使用INT32來存儲累積結(jié)果,以避免數(shù)據(jù)溢出的可能性。然而,作者的實(shí)驗(yàn)表明,更節(jié)省內(nèi)存的INT16數(shù)據(jù)類型足以完成這個(gè)任務(wù)。為了恢復(fù)浮點(diǎn)結(jié)果,可以將INT16中的累積結(jié)果與用于各自量化的激活和權(quán)重的量化尺度的乘積相乘。
9、PTQ量化指南
總結(jié)一下,為了提高PTQ量化的準(zhǔn)確性,作者提出了以下準(zhǔn)則:
-
使用改進(jìn)的KL散度算法和容差系數(shù)來確定激活值的量化尺度,并使用MinMax量化來確定權(quán)重的尺度。
-
對權(quán)重使用Per-Channel量化,這比Per-Tensor量化更優(yōu),特別是對于高效的卷積操作。
-
對正的激活值(如ReLU的輸出)使用無符號量化。
-
盡可能地避免對網(wǎng)絡(luò)中的加法輸入進(jìn)行量化,因?yàn)檫@可以在計(jì)算量略微增加的情況下帶來顯著的性能提升。
表5展示了PTQ量化的結(jié)果。為了比較,作者使用了商業(yè)閉源的推理庫TensorRT,并報(bào)告了使用不同校準(zhǔn)數(shù)據(jù)的8次實(shí)驗(yàn)運(yùn)行的平均結(jié)果。遵
循上述準(zhǔn)則,作者在ResNet50和MobileNetV2上實(shí)現(xiàn)了8位量化的全精度準(zhǔn)確性水平。實(shí)際上,作者的方法在一定程度上優(yōu)于TensorRT。
2.2、QAT量化
1、折疊BN層
Batch Normalization (BN) 是一個(gè)關(guān)鍵模塊,它增強(qiáng)了訓(xùn)練的穩(wěn)定性,并使得深度神經(jīng)網(wǎng)絡(luò)的權(quán)重初始化要求降到最低。在訓(xùn)練過程中,BN操作被認(rèn)為是一個(gè)線性操作,可以合并到前一個(gè)卷積層中。
為了實(shí)現(xiàn)量化感知訓(xùn)練,作者需要實(shí)現(xiàn)BN折疊來確定前向傳遞過程中的最優(yōu)尺度。然后梯度以展開的方式進(jìn)行反向傳播,允許作者單獨(dú)更新前一個(gè)卷積層的權(quán)重以及BN的尺度和偏移。參數(shù)折疊策略的公式如下:
其中W是前一個(gè)卷積層的權(quán)重, 和 是合并后的權(quán)重和偏置。 、 、 和 分別是BN的均值、方差、尺度和偏移值。 和 分別是卷積權(quán)重在合并前后的量化尺度向量。
值得注意的是, 只需要在訓(xùn)練后執(zhí)行一次即可。
2、量化感知訓(xùn)練
在較低精度(例如4位)下,對權(quán)重和激活進(jìn)行量化,PTQ量化無法保持準(zhǔn)確性,會有一定的容忍損失。在這種情況下,作者通過精細(xì)調(diào)整量化模型,增強(qiáng)權(quán)重的適應(yīng)性和魯棒性,來進(jìn)一步提高準(zhǔn)確性。
作者首先根據(jù)PTQ準(zhǔn)則對經(jīng)過訓(xùn)練的全精度模型進(jìn)行量化。然后,作者采用修改后的訓(xùn)練過程對其進(jìn)行微調(diào),使模型適應(yīng)量化。作者禁用了激進(jìn)的隨機(jī)大小裁剪,并采用了較弱的隨機(jī)裁剪增強(qiáng)。模型進(jìn)行微調(diào),使用固定的權(quán)重量化尺度進(jìn)行20個(gè)epochs的訓(xùn)練,改善訓(xùn)練收斂性。初始學(xué)習(xí)率為5e-4,在第10個(gè)epoch時(shí)衰減為原來的1/5,以達(dá)到可比較的性能。
表6顯示了MobileNetV2的比較結(jié)果。在較低的精度(4位、5位和6位)量化下是具有挑戰(zhàn)性的,但作者的方法在這些情況下都實(shí)現(xiàn)了最佳性能,超越了其他方法。
3、與剪枝集成
作者現(xiàn)在探索將量化與網(wǎng)絡(luò)剪枝策略結(jié)合,旨在加速推理并減少內(nèi)存占用。作者采用簡單的非結(jié)構(gòu)化剪枝方法,將“不重要”的權(quán)重置零,這些權(quán)重具有相對較小的絕對值,因?yàn)樽髡叩闹攸c(diǎn)不在于稀疏策略的設(shè)計(jì)。為了將剪枝與量化結(jié)合起來,作者提出了一個(gè)包含以下步驟的流程:
「稀疏化 →全精度微調(diào) →PTQ量化 →QAT訓(xùn)練」
具體而言,作者首先對經(jīng)過訓(xùn)練的全精度模型 應(yīng)用剪枝策略,從而在整個(gè)流程中保持稀疏性。在剪枝步驟后,作者使用較小的學(xué)習(xí)率對模型進(jìn)行微調(diào),使其余參數(shù)進(jìn)行微調(diào),生成另一個(gè)稀疏的全精度模型 。接下來是PTQ量化,然后是如上所述的量化感知訓(xùn)練。這將得到兩個(gè)連續(xù)的量化模型,即 和 。
作者在高效的MobileNetV2上進(jìn)行了實(shí)驗(yàn),結(jié)果顯示在表7中。作者首先訓(xùn)練了一個(gè)top-1準(zhǔn)確率為72.91%的全精度模型,然后對該模型進(jìn)行了0%、10%、20%和30%的稀疏比率剪枝。
有趣的是,在第一次微調(diào)后,作者觀察到所有經(jīng)過剪枝的模型都優(yōu)于全精度的Baseline模型,包括沒有剪枝的模型(稀疏率為0)。這可能歸因于微調(diào)期間數(shù)據(jù)增強(qiáng)的減弱,就像在量化感知訓(xùn)練中一樣。
在經(jīng)過QAT訓(xùn)練(即第二次微調(diào))后,作者獲得了一個(gè)8位MobileNetV2的量化模型,其top-1準(zhǔn)確率為73.35%,是迄今為止最好的性能。
此外,所有具有不同剪枝比例的量化模型均優(yōu)于全精度模型。這些結(jié)果表明,量化方案可以很好地與網(wǎng)絡(luò)剪枝策略結(jié)合使用。
3、總結(jié)
在這項(xiàng)工作中,作者首先對PTQ量化的有效方法進(jìn)行了系統(tǒng)地改進(jìn)和優(yōu)化,并在實(shí)踐中建立了一個(gè)黃金準(zhǔn)則。遵循這個(gè)準(zhǔn)則,8位量化的模型可以達(dá)到與全精度模型相當(dāng)?shù)臏?zhǔn)確性,而無需額外的訓(xùn)練。
此外,作者提出了一種簡單高效的量化感知訓(xùn)練策略,在較低精度的設(shè)置中進(jìn)一步提高了準(zhǔn)確性。最后,作者證明了量化可以與剪枝策略結(jié)合使用,并提出了一個(gè)多階段微調(diào)的流程將它們連接在一起。
這些貢獻(xiàn)為在資源受限的環(huán)境中實(shí)現(xiàn)更高效和準(zhǔn)確的深度神經(jīng)網(wǎng)絡(luò)模型鋪平了道路。
4、參考
[1].BAG OF TRICKS WITH QUANTIZED CONVOLUTIONAL NEURAL NETWORKS FOR IMAGE CLASSIFICATION.
5、推薦閱讀
YOLO落地部署 | 一文全覽YOLOv5最新的剪枝、量化的進(jìn)展【必讀】
全新ViT Backbone | 混合卷積與Attention設(shè)計(jì)的SMT更快、更小也更強(qiáng)
遠(yuǎn)超YOLOP | 超輕超快的TwinLiteNet實(shí)現(xiàn)多任務(wù)自動駕駛感知

掃碼加入??「集智書童」交流群
(備注:方向+學(xué)校/公司+昵稱)
前沿AI視覺感知全棧知識??「分類、檢測、分割、關(guān)鍵點(diǎn)、車道線檢測、3D視覺(分割、檢測)、多模態(tài)、目標(biāo)跟蹤、NerF」
歡迎掃描上方二維碼,加入「集智書童-知識星球」,日常分享論文、學(xué)習(xí)筆記、問題解決方案、部署方案以及全棧式答疑,期待交流!
