亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于AI神經(jīng)網(wǎng)絡(luò)加速芯片的模型量化算法

        2021-03-14 00:50:42王騫陶青川
        現(xiàn)代計(jì)算機(jī) 2021年36期
        關(guān)鍵詞:浮點(diǎn)數(shù)浮點(diǎn)卷積

        王騫,陶青川

        (四川大學(xué)電子信息學(xué)院,成都 610065)

        0 引言

        近年來(lái),由于深度學(xué)習(xí)技術(shù)的蓬勃發(fā)展,深度卷積神經(jīng)網(wǎng)絡(luò)也被大量地運(yùn)用于生活中的各種場(chǎng)景,例如人臉識(shí)別、人臉檢測(cè)、異常檢測(cè)、姿態(tài)估計(jì),等等。盡管其應(yīng)用廣泛,但是其龐大的計(jì)算量和內(nèi)存占用始終是深度神經(jīng)網(wǎng)絡(luò)無(wú)法全面落地的一個(gè)重要原因。很多大型深度卷積神經(jīng)網(wǎng)絡(luò)的精度非常高,但往往伴隨著龐大的參數(shù)量和計(jì)算量,例如VGG[6],ResNet[5],MobileNetV3[7],ShuffleNet[8],等等。但是他們的權(quán)重模型參數(shù)巨大,從幾十MB 到幾個(gè)GB 不等,這使得這項(xiàng)技術(shù)很難在需求更加廣泛的邊緣計(jì)算設(shè)備上運(yùn)用。眾所周知,邊緣計(jì)算設(shè)備是嚴(yán)重的計(jì)算和內(nèi)存資源受限的,比如常用的嵌入式開(kāi)發(fā)板,其普通的芯片算力可能只有幾個(gè)GFLOPs,而上述所說(shuō)的網(wǎng)絡(luò)模型少則幾個(gè)GFLOPs 的計(jì)算量,多則幾十、幾百GFLOPs 甚至幾個(gè)TFLOPs 的計(jì)算量,而大多數(shù)應(yīng)用場(chǎng)景又要求能夠?qū)崟r(shí)的計(jì)算,所以原本的網(wǎng)絡(luò)模型根本無(wú)法在邊緣嵌入式設(shè)備上進(jìn)行模型部署。

        針對(duì)上述問(wèn)題,工業(yè)界和學(xué)術(shù)界都在努力解決,都在盡可能地將網(wǎng)絡(luò)模型縮小,降低模型前向推理時(shí)的計(jì)算量和內(nèi)存占用,并且也取得了相當(dāng)不錯(cuò)的成果。目前主流的方法有四種:①設(shè)計(jì)輕量化的網(wǎng)絡(luò)結(jié)構(gòu),比如使用于手機(jī)端的Mo?bileNet系列、ShuffleNet系列都是輕量化設(shè)計(jì)的典范,其中設(shè)計(jì)的深度可分離卷積和分組卷積效果很好,其性能在配合手機(jī)端的GPU 時(shí)非常不錯(cuò)。②模型剪枝[10],其基本方法是將訓(xùn)練好的浮點(diǎn)模型中的神經(jīng)元根據(jù)信息量大小進(jìn)行屏蔽,將網(wǎng)絡(luò)稀疏化,達(dá)到降低內(nèi)存開(kāi)銷,加速推理過(guò)程,剪枝方法包括結(jié)構(gòu)化剪枝和非結(jié)構(gòu)化剪枝。③知識(shí)蒸餾[10],即通過(guò)訓(xùn)練一個(gè)大的精度非常高的模型來(lái)指導(dǎo)一個(gè)設(shè)計(jì)好的小模型,在訓(xùn)練過(guò)程中通過(guò)凍結(jié)大模型的權(quán)重參數(shù),反向傳播時(shí)只更新小模型的參數(shù),然后使得小模型在最后的輸出或者中間層的輸出逼近大模型的輸出結(jié)果,如此便能使小模型獲得和大模型相近的精度,但是在計(jì)算量上小模型較大模型卻大大降低。④模型量化[4],即將訓(xùn)練好的浮點(diǎn)網(wǎng)絡(luò)模型,通過(guò)某種算法將權(quán)重參數(shù)映射到某個(gè)定點(diǎn)數(shù)域內(nèi),如此網(wǎng)絡(luò)的運(yùn)算便從浮點(diǎn)運(yùn)算變?yōu)槎c(diǎn)運(yùn)算,然后通過(guò)與特定的計(jì)算指令例如SIMD(單指令多數(shù)據(jù)流)配合,既可提高運(yùn)算速度,也可以降低內(nèi)存占用,可謂一舉兩得。

        盡管壓縮方法有很多,但是邊緣設(shè)備的計(jì)算能力始終有限,因此本文選取了一款神經(jīng)網(wǎng)絡(luò)加速芯片并通過(guò)使用在感知量化算法[4],在訓(xùn)練中不指定每層的量化精度,而為每個(gè)網(wǎng)絡(luò)層設(shè)置了一個(gè)可學(xué)習(xí)參數(shù),用以學(xué)習(xí)該層應(yīng)該采用的量化精度,使得網(wǎng)絡(luò)以自適應(yīng)的方式去選擇量化的精度。并且本文設(shè)計(jì)的算法是通過(guò)異構(gòu)計(jì)算的方式部署在邊緣端,推理性能極高、功耗極低。實(shí)驗(yàn)證明,本文所設(shè)計(jì)的算法在精度,耗時(shí)和功耗上都具有很大的優(yōu)勢(shì),可以很好地滿足實(shí)際需求。

        1 網(wǎng)絡(luò)量化算法原理

        1.1 對(duì)稱量化

        對(duì)稱量化算法屬于后量化算法的一種,這種量化算法也被廣泛應(yīng)用于各種邊緣設(shè)備,英偉達(dá)的tensorRT 便是使用了這種量化算法。其原理如下:假設(shè)要量化網(wǎng)絡(luò)的其中一個(gè)卷積核,量化精度為8 bit,量化范圍為-128~127,卷積核的尺寸為cin×cout×k×k,那么首先就要計(jì)算出此卷積核中的權(quán)重的最大值和最小值,比較最大值與最小值的絕對(duì)值大小,保留絕對(duì)值較大的并以此作為截?cái)鄻O值,如圖1 所示,即截?cái)喾秶鸀?max |xi|~max |xi|,然后根據(jù)映射公式(1)將32位浮點(diǎn)值映射到8 bit 定點(diǎn)數(shù)域內(nèi),這樣便完成了32 位浮點(diǎn)數(shù)到8 位定點(diǎn)數(shù)的參數(shù)量化,可以看到浮點(diǎn)的每個(gè)權(quán)重占的內(nèi)存為4 bit,量化為8 位精度之后占用變成了1 bit,實(shí)現(xiàn)了模型的4 倍壓縮。不僅如此,在邊緣設(shè)備上,以armv8a 架構(gòu)為例,以往的一條指令可以計(jì)算一個(gè)4 bit 的加法,那么量化為1 bit 之后,使用單指令多數(shù)據(jù)流的方式,一條指令可以實(shí)現(xiàn)4 個(gè)1 bit 數(shù)的加法,由此可見(jiàn)不僅僅模型的內(nèi)存占用降低了4 倍,計(jì)算速度同樣也會(huì)提升4倍。

        圖1 對(duì)稱量化原理

        然而,對(duì)于對(duì)稱量化算法,如果權(quán)重值的分布為非均勻分布,那么浮點(diǎn)值分布比較密集的區(qū)域的值會(huì)被映射到值域很窄的定點(diǎn)數(shù)范圍,而當(dāng)浮點(diǎn)值大部分集中在max ( |xi|)附近而-max ( |xi|)~min(xi)之間并沒(méi)有分布太多的參數(shù)時(shí),那么在對(duì)應(yīng)的量化范圍內(nèi)的量化值就會(huì)被浪費(fèi)掉,這就會(huì)導(dǎo)致網(wǎng)絡(luò)的精度有很大的下降幅度。

        線性量化的一般步驟為:①求取尺度因子:②舍入小數(shù);②截?cái)喑缰?。首先?duì)步驟1,量化首先要將量化前的32位浮點(diǎn)值wf映射到整點(diǎn)數(shù)域內(nèi):

        例如對(duì)于8 比特對(duì)稱量化來(lái)說(shuō),zmax= 127,zmin= -128,wmax為待量化權(quán)重的最大值,wmin為待量化權(quán)重的最小值,wq為縮放后的權(quán)重值,scale為求取的尺度因子。對(duì)浮點(diǎn)權(quán)值進(jìn)行縮放后我們得到的權(quán)值仍然為浮點(diǎn)數(shù),此時(shí)再通過(guò)公式(3)將浮點(diǎn)數(shù)近似到定點(diǎn)數(shù)。

        然而在進(jìn)行了縮放和取整運(yùn)算之后由于小數(shù)位可能會(huì)向上取整,故取整后的值會(huì)存在超界問(wèn)題,所以在取整之后再通過(guò)公式(4)對(duì)整數(shù)值進(jìn)行截?cái)嗉纯伞?/p>

        1.2 非對(duì)稱量化

        由圖2 所示,與對(duì)稱量化算法對(duì)比,非對(duì)稱量化算法的最大值與最小值的選取不是求得了最大絕對(duì)值之后取對(duì)稱區(qū)間,而是直接由將最大值與最小值包圍的權(quán)值分布區(qū)間映射到定點(diǎn)數(shù)的數(shù)域。與對(duì)稱量化不同的是,非對(duì)稱量化的零點(diǎn)的求取不是直接令其等于0 而是根據(jù)映射公式(1),(2)求得,這是因?yàn)榱泓c(diǎn)值在網(wǎng)絡(luò)計(jì)算過(guò)程中具有特殊意義,比如對(duì)卷積的補(bǔ)邊操作,在量化之后我們不能簡(jiǎn)單的將原來(lái)應(yīng)該補(bǔ)0 的地方量化后仍然填充為0,此時(shí)在非對(duì)稱量化中我們就將計(jì)算的零點(diǎn)偏移值作為浮點(diǎn)中的零點(diǎn)值。由圖2 可知,采用非對(duì)稱量化后將原浮點(diǎn)模型映射到定點(diǎn)數(shù)后,因?yàn)闆](méi)有空余的浮點(diǎn)數(shù)域,那么在定點(diǎn)數(shù)區(qū)間上浪費(fèi)的定點(diǎn)值會(huì)更少,如此非對(duì)稱量化的魯棒性會(huì)更好。

        圖2 非對(duì)稱量化原理

        1.3 感知量化

        感知量化算法對(duì)比于對(duì)稱和非對(duì)稱量化算法,它不是在浮點(diǎn)模型訓(xùn)練好后再對(duì)權(quán)重參數(shù)進(jìn)行量化,而是在訓(xùn)練過(guò)程中通過(guò)定義量化器(量化函數(shù)),對(duì)參數(shù)進(jìn)行實(shí)時(shí)訓(xùn)練,如圖3所示。

        圖3 模擬量化示意圖

        模擬量化操作即為將浮點(diǎn)數(shù)通過(guò)映射公式將原本的浮點(diǎn)值映射到定點(diǎn)數(shù)域,但是模擬量化僅僅是將定點(diǎn)數(shù)用浮點(diǎn)數(shù)來(lái)保存,此時(shí)還不是真正的定點(diǎn)數(shù),就是僅存有定點(diǎn)數(shù)的信息的浮點(diǎn)數(shù),只有在網(wǎng)絡(luò)訓(xùn)練好將權(quán)重轉(zhuǎn)為定點(diǎn)數(shù)之后,那么此時(shí)網(wǎng)絡(luò)模型就是真正的定點(diǎn)數(shù)。由此可見(jiàn),在整個(gè)感知量化訓(xùn)練過(guò)程中,最重要的是如何定義模擬量化函數(shù)。在卷積神經(jīng)網(wǎng)絡(luò)中,模型訓(xùn)練通過(guò)反向傳播算法進(jìn)行訓(xùn)練,因此這個(gè)模擬量化函數(shù)也必須可以進(jìn)行反向傳播,而如果在訓(xùn)練時(shí)就真正的將浮點(diǎn)數(shù)保存為定點(diǎn)數(shù),那么反向傳播就無(wú)法完成,即網(wǎng)絡(luò)無(wú)法訓(xùn)練,所以實(shí)際的做法就是將32 位浮點(diǎn)數(shù)通過(guò)量化公式量化到定點(diǎn)數(shù)域,但此時(shí)的權(quán)重仍然是32位精度的,但是取值為定點(diǎn)數(shù)取值。

        2 改進(jìn)的量化算法

        2.1 加速芯片選取

        目前已經(jīng)有很多優(yōu)秀的AI加速芯片可以選擇,例如華為的昇騰系列;英偉達(dá)的TX、TK系列,英特爾的Movidius 神經(jīng)加速棒,但是這些芯片由于算力很強(qiáng)導(dǎo)致體積和功耗很高,在綜合考慮后本文選擇了一款極低功耗的、由Gyrfalcon Technology公司生產(chǎn)的加速芯片。此芯片采用的是自研的APiM 架構(gòu)(存儲(chǔ)和計(jì)算融合一體的本地并行AI 計(jì)算),大大節(jié)省了數(shù)據(jù)搬運(yùn)環(huán)節(jié)的時(shí)延,有極高的計(jì)算密度。此款芯片有近30000個(gè)并行計(jì)算核心,但是功耗僅僅只有180 MW,在單張輸入圖片尺寸為224×224 的情況下,基于VGG16 的推理時(shí)間僅有5 ms,而VGG16在PC機(jī)上做一次推理需要3 s,由此可見(jiàn)此芯片在邊緣計(jì)算領(lǐng)域有很強(qiáng)的優(yōu)勢(shì),這也是本文選擇這款芯片的主要原因。

        2.2 算法改進(jìn)

        本文采用的基準(zhǔn)網(wǎng)絡(luò)為VGG16,因?yàn)榇司W(wǎng)絡(luò)的參數(shù)量大,浮點(diǎn)模型的性能很好。由圖4 算法流程圖可知,本文設(shè)計(jì)的算法將VGG16切分為兩部分,第一部分為主干網(wǎng),此部分的網(wǎng)絡(luò)為從圖片輸入到第五層池化層,第二部分為第五層池化層之后的所有的層為分類頭。由網(wǎng)絡(luò)結(jié)構(gòu)可知,網(wǎng)絡(luò)的計(jì)算負(fù)載90%都在第一部分,因此我們將第一部分放在神經(jīng)網(wǎng)絡(luò)加速芯片上去計(jì)算。而對(duì)于第二部分網(wǎng)絡(luò)由于做分類或者回歸任務(wù)時(shí)我們的分類頭或者回歸頭需要有很寬的數(shù)域,故這部分我們未對(duì)它進(jìn)行量化,仍然使用浮點(diǎn)計(jì)算,這樣可以最大程度地保留網(wǎng)絡(luò)的精度。而我們對(duì)于需要量化的層都設(shè)置一個(gè)系數(shù)α,這個(gè)系數(shù)會(huì)隨著網(wǎng)絡(luò)的訓(xùn)練而不斷的變化,但是會(huì)被控制在1~8 范圍內(nèi),而每次計(jì)算的是其的滑動(dòng)平均值,當(dāng)網(wǎng)絡(luò)訓(xùn)練結(jié)束后我們?cè)賹?duì)它進(jìn)行四舍五入得到的整數(shù)值便是本層的量化精度。

        圖4 算法流程

        2.3 訓(xùn)練流程

        由圖5可知,對(duì)于我們的算法,訓(xùn)練共分為4步。首先,我們?cè)谟?xùn)練集上訓(xùn)練浮點(diǎn)模型,當(dāng)浮點(diǎn)模型達(dá)到精度要求后,將浮點(diǎn)模型權(quán)重當(dāng)成量化卷積訓(xùn)練的預(yù)訓(xùn)練模型,并在同一訓(xùn)練集上進(jìn)行訓(xùn)練。接下來(lái)我們?cè)儆昧炕矸e模型作為預(yù)訓(xùn)練模型去訓(xùn)練量化激活層,注意此時(shí)的卷積核中的權(quán)重已經(jīng)是浮點(diǎn)數(shù)表示的定點(diǎn)數(shù)了。當(dāng)量化激活層訓(xùn)練完成后,我們?cè)偈褂靡粋€(gè)很小的學(xué)習(xí)率,本文采用的是1e-7 來(lái)對(duì)網(wǎng)絡(luò)進(jìn)行一個(gè)微調(diào),但這一步并非必須。最后我們便得到了量化后的模型,再使用加速芯片供應(yīng)商提供的轉(zhuǎn)換庫(kù),即可將我們的量化模型轉(zhuǎn)換為芯片特有模型數(shù)據(jù)格式(.model),然后即可將此模型用于芯片推理。

        圖5 算法訓(xùn)練流程

        3 實(shí)驗(yàn)結(jié)果分析

        本地訓(xùn)練和測(cè)試的計(jì)算機(jī)硬件配置為:CPU為Intel Core i5-7400,主頻為3.0 GHz,內(nèi)存8 GB;GPU為NVIDIA Geforce GTX1080 Ti,顯存為11 GB;操作系統(tǒng)為Ubuntu 16.04,開(kāi)發(fā)環(huán)境為Pytorch 1.7.0,Python 3.7。網(wǎng)絡(luò)的主干網(wǎng)權(quán)值初始化使用了在ImageNet 數(shù)據(jù)集上預(yù)訓(xùn)練的模型,網(wǎng)絡(luò)的圖片輸入尺寸為224×224 的RGB 圖片。在數(shù)據(jù)預(yù)處理上做了色彩抖動(dòng),隨機(jī)裁剪,隨機(jī)反轉(zhuǎn),每批次圖片為16 張,并使用1e-3 為初始學(xué)習(xí)率,每50個(gè)訓(xùn)練集迭代減小0.5倍,共訓(xùn)練了300輪,圖6 顯示了量化模型在四步訓(xùn)練過(guò)程中的損失和準(zhǔn)確率的變化情況。邊緣計(jì)算設(shè)備我們使用的是ROC-3399-PC;CPU 為RK3399,處理器為ARM Cortex-A72(雙核)及Cortex A53(四核),GPU 為Mali T860(四核),主頻為2.0 GHz,內(nèi)存為2 GB,操作系統(tǒng)為Ubuntu18.04。且除芯片計(jì)算的模型以外的所有模型,在CPU 的前向推理我們都使用Ncnn開(kāi)源框架完成。

        圖6 模型在cifar100數(shù)據(jù)集上的損失和準(zhǔn)確率變化

        由表1 可知,在本文所采用的實(shí)驗(yàn)環(huán)境下,在Cifar10 上效果最好的網(wǎng)絡(luò)為MobileNetV3 精度達(dá)到了95.2%,本文所提出的量化模型的精度為93.6%,在Cifar100 數(shù)據(jù)集上標(biāo)準(zhǔn)的VGG16 取得了最好的結(jié)果為82.8%,本文提出的量化模型的精度為82.1%。模型參數(shù)量最大的是標(biāo)準(zhǔn)的VGG16 達(dá)到了528 MB,本文的量化模型的參數(shù)量為6.5 MB。且在將模型轉(zhuǎn)換為推理模型后,部署到開(kāi)發(fā)板上測(cè)得的速度所提出的量化模型取得了最快的推理速度,單張圖片的前向推理速度為28 ms,實(shí)驗(yàn)證明本文提出的算法可以在計(jì)算和內(nèi)存資源極其受限的邊緣嵌入式設(shè)備上達(dá)到實(shí)時(shí)推理性能。

        表1 網(wǎng)絡(luò)準(zhǔn)確率對(duì)比

        4 結(jié)語(yǔ)

        本文針對(duì)深度學(xué)習(xí)模型參數(shù)量大,計(jì)算耗時(shí)難以在邊緣計(jì)算設(shè)備上部署的問(wèn)題,選用了一款神經(jīng)網(wǎng)絡(luò)前向推理加速芯片,并基于VGG16設(shè)計(jì)了一種自適應(yīng)的量化精度選擇算法。實(shí)驗(yàn)證明本文所提出的量化算法在公開(kāi)數(shù)據(jù)集上的測(cè)試性能略低于浮點(diǎn)精度模型,但是經(jīng)過(guò)量化后的模型的大小遠(yuǎn)遠(yuǎn)低于浮點(diǎn)模型,且由部署實(shí)驗(yàn)可知,量化后的模型在邊緣計(jì)算設(shè)備上的單張圖片推理性能為28 ms,遠(yuǎn)遠(yuǎn)優(yōu)于浮點(diǎn)模型,證明了所提出算法的實(shí)用性和有效性。

        猜你喜歡
        浮點(diǎn)數(shù)浮點(diǎn)卷積
        LEO星座增強(qiáng)GNSS PPP模糊度浮點(diǎn)解與固定解性能評(píng)估
        基于3D-Winograd的快速卷積算法設(shè)計(jì)及FPGA實(shí)現(xiàn)
        四種Python均勻浮點(diǎn)數(shù)生成方法
        基于浮點(diǎn)DSP的鐵路FSK信號(hào)檢測(cè)
        從濾波器理解卷積
        電子制作(2019年11期)2019-07-04 00:34:38
        基于傅里葉域卷積表示的目標(biāo)跟蹤算法
        在C語(yǔ)言中雙精度浮點(diǎn)數(shù)線性化相等比較的研究
        非精確浮點(diǎn)數(shù)乘法器設(shè)計(jì)
        基于FPGA的浮點(diǎn)FIR濾波器設(shè)計(jì)
        改進(jìn)的Goldschmidt雙精度浮點(diǎn)除法器
        亚洲中文字幕乱码在线视频| 亚洲人成人影院在线观看 | 99久久婷婷国产综合亚洲| 久久99精品国产99久久6男男| 色欧美与xxxxx| 亚洲中文乱码在线视频| 无遮掩无码h成人av动漫| 国产真人无码作爱视频免费| 亚洲熟女av超清一区二区三区| 国产一区二区三区在线观看黄| 丰满熟妇乱又伦精品| 中文字幕人妻丝袜乱一区三区| 在线观看国产三级av| 亚洲午夜精品第一区二区| 亚洲av日韩综合一区久热| 国产乱子伦精品免费无码专区| 无码伊人久久大杳蕉中文无码| 亚洲国产国语对白在线观看| 国产精品综合色区在线观看| 亚洲国产中文在线二区三区免| 成年人视频在线播放视频| 媚药丝袜美女高清一二区| 大又大粗又爽又黄少妇毛片| 久草午夜视频| 人妻露脸国语对白字幕| 99久久无色码中文字幕人妻蜜柚 | 久久久亚洲免费视频网| 巨大巨粗巨长 黑人长吊| 天堂中文在线资源| 久久精品亚洲精品毛片| 亚洲啪啪色婷婷一区二区| 欧美最猛黑人xxxx黑人猛交| 欧美丰满大爆乳波霸奶水多| 亚洲人av毛片一区二区| 中文乱码字字幕在线国语| 亚洲av日韩综合一区在线观看| 国产欧美日韩不卡一区二区三区| 国产免费网站在线观看不卡| 中文字幕一区日韩精品| 色婷婷资源网| 久久av少妇亚洲精品|