国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

面向3D-CNN的算法壓縮-硬件設(shè)計(jì)協(xié)同優(yōu)化

2023-09-25 08:54錢(qián)佳明婁文啟周學(xué)海
關(guān)鍵詞:壓縮比分塊復(fù)數(shù)

錢(qián)佳明,婁文啟,宮 磊,王 超,周學(xué)海

1.中國(guó)科學(xué)技術(shù)大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,合肥230027

2.中國(guó)科學(xué)技術(shù)大學(xué)蘇州高等研究院,江蘇蘇州215123

隨著大數(shù)據(jù)時(shí)代的來(lái)臨和計(jì)算機(jī)運(yùn)算能力的提高,2D-CNN在圖像分類(lèi)方面取得了最先進(jìn)的精度。然而,在處理視頻等高維數(shù)據(jù)時(shí),基于圖像的2D-CNN無(wú)法對(duì)其中的時(shí)間信息和運(yùn)動(dòng)模式進(jìn)行建模,因此無(wú)法取得令人滿意的效果。為了實(shí)現(xiàn)對(duì)視頻等高維數(shù)據(jù)的精確分類(lèi),研究人員提出使用三維卷積來(lái)捕獲視頻等數(shù)據(jù)中的時(shí)空信息。2010年,Ji等人首次提出了三維卷積神經(jīng)網(wǎng)絡(luò)[1],其在相鄰的圖像幀上執(zhí)行三維卷積以提取時(shí)間和空間維度上的特征。隨后,Tran等人提出了一個(gè)現(xiàn)代意義上的深度架構(gòu)C3D[2],C3D 相對(duì)于以往的3D-CNN 具有更深的層,故而可以在大規(guī)模數(shù)據(jù)集上進(jìn)行學(xué)習(xí)并取得最優(yōu)的結(jié)果。此后,3D-CNN 在視頻分析、三維幾何數(shù)據(jù)分析、三維醫(yī)學(xué)圖像診斷方面取得了巨大的成功[3-5]。然而,與算法性能提升相對(duì)應(yīng)的是3D-CNN顯著增加的模型尺寸和計(jì)算量。例如,在網(wǎng)絡(luò)結(jié)構(gòu)相同的情況下,3D ResNet-34[6]的參數(shù)數(shù)目和計(jì)算量分別為6.35×105和36.7 GFLOPs,是2D ResNet-34(參數(shù)數(shù)目2.15×105,計(jì)算量3.5 GFLOPs)的2.95倍和10.49倍。相比于2D-CNN,3D-CNN 額外增加了時(shí)間維度以捕獲時(shí)域特征,因此3D-CNN的部署存在更為龐大的存算開(kāi)銷(xiāo)。

針對(duì)這一問(wèn)題,研究者在傳統(tǒng)ASIC 和FPGA 專(zhuān)用AI 加速器設(shè)計(jì)的基礎(chǔ)上[7-12],提出了一系列軟硬件協(xié)同優(yōu)化方法,在算法端對(duì)3D-CNN 模型的計(jì)算復(fù)雜度、存儲(chǔ)開(kāi)銷(xiāo)進(jìn)行優(yōu)化,并在硬件端設(shè)計(jì)與算法端適配的計(jì)算核心,以求達(dá)到更優(yōu)的硬件部署效率[13-17]。其中,Sun等人對(duì)3D-CNN進(jìn)行稀疏化處理[13],通過(guò)裁剪冗余權(quán)值減少模型的計(jì)算和存儲(chǔ)開(kāi)銷(xiāo)。然而,剪枝操作引入了計(jì)算和訪存的不規(guī)則性,在導(dǎo)致額外硬件設(shè)計(jì)開(kāi)銷(xiāo)的同時(shí)也使得硬件加速器難以獲得理想的性能提升;3D-VNPU[14]和F3D[15]分別采用了3D Winograd與3D FFT變換來(lái)減少卷積操作的計(jì)算量。盡管快速算法未引入不規(guī)則性,但其只對(duì)模型計(jì)算復(fù)雜度進(jìn)行了優(yōu)化而未降低模型訪存需求。此外,該類(lèi)方法對(duì)卷積核大小敏感,也限制了其應(yīng)用場(chǎng)景。例如,兩者都無(wú)法加速1×1×1卷積,這在現(xiàn)代網(wǎng)絡(luò)中占據(jù)了主要計(jì)算量,如3D ResNet、3D MobileNet;Wu 等人提出了一種混合張量分解策略[16],該策略對(duì)卷積層使用Tensor Train分解,對(duì)全連接層使用Hierarchical Tucker 分解,取得了比單一分解方法更好的壓縮效果。然而,這類(lèi)基于低秩分解的壓縮方法往往會(huì)使模型的訓(xùn)練過(guò)程變得更加復(fù)雜,并且同樣無(wú)法有效應(yīng)用于小卷積核??偟膩?lái)說(shuō),相關(guān)工作仍未妥善解決3D-CNN的處理效率問(wèn)題,使其在能效/資源受限場(chǎng)景下的部署仍面臨嚴(yán)峻的性能和能效挑戰(zhàn)。

針對(duì)上述挑戰(zhàn),本文基于FPGA提出了面向3D-CNN高效硬件部署的算法-硬件協(xié)同設(shè)計(jì)與優(yōu)化方法3D FCirNN。在算法層面,為了緩解以往稀疏化帶來(lái)的不規(guī)則性,本文首次采用分塊循環(huán)矩陣來(lái)壓縮3D-CNN的權(quán)重,配合FFT 的加速,進(jìn)一步將計(jì)算復(fù)雜度從O(N2)減少為O(NlbN)。此外,為緩解FFT 在不同網(wǎng)絡(luò)層加速過(guò)程中所引入的時(shí)域/頻域切換開(kāi)銷(xiāo),本文引入了頻域內(nèi)的激活、批歸一化和池化層,實(shí)現(xiàn)了全頻域計(jì)算。在硬件層面,本文基于FPGA平臺(tái)設(shè)計(jì)了一個(gè)和算法端適配的高效硬件架構(gòu),并針對(duì)片外訪存效率、實(shí)數(shù)序列FFT 后復(fù)數(shù)的運(yùn)算特點(diǎn),提出了一系列面向硬件資源、內(nèi)存帶寬的優(yōu)化措施,顯著提升了模型硬件部署的性能和計(jì)算效率。本文的主要貢獻(xiàn)如下:

(1)本文首次引入分塊循環(huán)矩陣對(duì)3D-CNN進(jìn)行壓縮,并采用快速傅里葉變換進(jìn)行加速,在精度損失較小的情況下,取得了相當(dāng)可觀的加速效果。在此基礎(chǔ)上,為了消除由于FFT 所引入的頻繁的時(shí)域/頻域切換開(kāi)銷(xiāo),本文進(jìn)一步引入了頻域中的激活、批歸一化以及池化層,實(shí)現(xiàn)了全頻域推理。

(2)本文在FPGA平臺(tái)上實(shí)現(xiàn)了一個(gè)高效的硬件加速器。在訪存方面,通過(guò)對(duì)特征圖進(jìn)行NC/8DHW8 格式的數(shù)據(jù)重排,顯著提升了片外訪存效率;在硬件資源方面,通過(guò)充分挖掘?qū)崝?shù)序列FFT 的特點(diǎn),以及Xilinx DSP Slice的計(jì)算能力,進(jìn)一步減少了資源占用,提升了加速器的性能。

(3)在Xilinx ZCU102 FPGA 上的實(shí)驗(yàn)表明,相較于以往最先進(jìn)的工作,3D FCirCNN可以在精度損失可接受的范圍內(nèi),取得接近32 倍的壓縮比,以及16.68 倍的性能提升和16.18倍的計(jì)算效率提升。

1 背景知識(shí)

1.1 3D-CNN

先前的工作表明,3D-CNN目前在視頻理解等領(lǐng)域已經(jīng)達(dá)到了最先進(jìn)的精度。然而,和2D-CNN 不同的是,為了提取時(shí)空信息,3D-CNN 在二維卷積的基礎(chǔ)上增加了一個(gè)時(shí)間維度,形成了三維卷積。如圖1 所示,在三維卷積中,卷積核不僅會(huì)沿著輸入特征的空間維度滑動(dòng)(R、C方向),也會(huì)沿著輸入特征的時(shí)間維度(D方向)滑動(dòng),因此,三維卷積可以同時(shí)捕獲輸入特征的時(shí)空信息,相較于二維卷積具有更強(qiáng)的特征提取能力。假設(shè)輸入視頻In的空間分辨率為R×C,共有D幀(時(shí)間維度)和N個(gè)通道,權(quán)重W的卷積核數(shù)目為M,每一個(gè)卷積核的空間尺寸為Kr×Kc,時(shí)間尺寸為Kd,通道數(shù)目為N,則輸入和權(quán)重進(jìn)行三維卷積,會(huì)得到一個(gè)空間分辨率為(R-Kr+1)×(C-Kc+1),時(shí)間維度為D-Kd+1,通道數(shù)目為M的輸出特征圖Out,其計(jì)算過(guò)程可由公式(1)所描述:

圖1 三維卷積操作Fig.1 3D convolutional operation

顯然,二維卷積是三維卷積在D=1、Kd=1 情況下的特例。分析可知,三維卷積的計(jì)算復(fù)雜度為M×N×D×R×C×Kd×Kr×Kc,存儲(chǔ)開(kāi)銷(xiāo)為M×N×Kd×Kr×Kc。因此,相對(duì)于2D-CNN,3D-CNN 在模型大小方面增長(zhǎng)了Kd倍,在模型計(jì)算量方面增長(zhǎng)了D×Kd倍,計(jì)算量的增長(zhǎng)相對(duì)于模型大小的增長(zhǎng)更加顯著,故三維卷積是一個(gè)更加計(jì)算密集的算法。例如,在C3D[2]模型中,卷積層占了整個(gè)網(wǎng)絡(luò)計(jì)算量的99.8%以上。

在3D-CNN中,全連接層具有和2D-CNN相同的計(jì)算模式。假設(shè)全連接層輸出特征a和輸入特征x的維度分別為M、N,權(quán)重W是一個(gè)M×N的矩陣,不考慮偏置,則全連接層的計(jì)算可以表示為一個(gè)矩陣-向量乘法,即a=W?x,其計(jì)算復(fù)雜度和存儲(chǔ)開(kāi)銷(xiāo)均為M×N。和三維卷積不同的是,在3D-CNN 中,全連接層的計(jì)算量占比較小,但卻占據(jù)了大部分的存儲(chǔ)開(kāi)銷(xiāo),是整個(gè)網(wǎng)絡(luò)的存儲(chǔ)瓶頸。

1.2 循環(huán)矩陣

循環(huán)矩陣(circulant matrix)是一種特殊形式的托普利茲矩陣(Toeplitz matrix),一個(gè)N×N的矩陣A是一個(gè)循環(huán)矩陣,當(dāng)且僅當(dāng)其每一行元素都是上一行元素循環(huán)右移一個(gè)位置的結(jié)果,如圖2(a)所示,用數(shù)學(xué)公式描述,就是A[i][j]=A[(i+1)%N][(j+1)%N]。根據(jù)該性質(zhì)可知,只需存儲(chǔ)A矩陣的第一列元素(稱(chēng)A矩陣的第一列元素所構(gòu)成的向量為該循環(huán)矩陣的生成向量),就可以表示整個(gè)矩陣,從而將存儲(chǔ)開(kāi)銷(xiāo)由O(N2) 減少為O(N)。此外,循環(huán)矩陣在帶來(lái)O(N)倍壓縮比的同時(shí),還可以有效降低矩陣-向量乘法的計(jì)算復(fù)雜度:根據(jù)循環(huán)卷積定理[18],一個(gè)N×N的循環(huán)矩陣A和一個(gè)N×1的任意向量x相乘,可以通過(guò)公式(2)進(jìn)行加速:

圖2 循環(huán)矩陣及其壓縮方法Fig.2 Circulant matrix and its compression method

其中,a是循環(huán)矩陣A的生成向量,F(xiàn)FT、IFFT分別表示快速傅里葉變換及其逆變換,⊙表示元素級(jí)乘法,如圖3所示。注意到N點(diǎn)FFT/IFFT的計(jì)算復(fù)雜度為O(NlbN),因此,通過(guò)循環(huán)卷積定理,可以將原先O(N2)的計(jì)算復(fù)雜度減少為O(NlbN),從而取得O(N/lbN)倍的計(jì)算壓縮比。

圖3 循環(huán)矩陣-向量乘法的FFT加速Fig.3 FFT acceleration of circulant matrix-vector multiplication

根據(jù)定義,循環(huán)矩陣必須為方陣(即矩陣行數(shù)等于列數(shù))。然而,在絕大多數(shù)情況下,矩陣往往不具備這一形式,因此無(wú)法直接用循環(huán)矩陣進(jìn)行壓縮。對(duì)此,可以通過(guò)分塊來(lái)解決這一問(wèn)題。該方法首先對(duì)矩陣進(jìn)行分塊操作,例如圖2(b)中4×8 的矩陣被劃分為2 個(gè)4×4 的子矩陣,然后令每一個(gè)子矩陣都具有循環(huán)矩陣的結(jié)構(gòu),則根據(jù)循環(huán)矩陣的性質(zhì),只需存儲(chǔ)每一個(gè)循環(huán)矩陣的生成向量即可(圖2(b)中紅框內(nèi)的4×2個(gè)元素),從而起到4倍(等于分塊大?。┑膲嚎s效果。顯然,在該壓縮方法中,壓縮比由矩陣的分塊大小決定。因此,可以通過(guò)調(diào)節(jié)矩陣的分塊大小,在精度和壓縮比之間進(jìn)行權(quán)衡:分塊越大,其所能提供的壓縮比則越大,而由此帶來(lái)的精度損失也越大,反之亦然。

由于循環(huán)矩陣可以有效降低矩陣的存儲(chǔ)和計(jì)算開(kāi)銷(xiāo),一些研究人員開(kāi)始將該方法應(yīng)用于神經(jīng)網(wǎng)絡(luò)的壓縮中[19-21]。Zhao 等人從理論上證明了循環(huán)矩陣在壓縮深度學(xué)習(xí)模型方面的有效性[22]:在神經(jīng)網(wǎng)絡(luò)理論中,通用近似性質(zhì)(universal approximation property)是指在參數(shù)數(shù)目足夠多的情況下,神經(jīng)網(wǎng)絡(luò)以任意的精度逼近任何連續(xù)或可測(cè)函數(shù)的能力,這一性質(zhì)為神經(jīng)網(wǎng)絡(luò)解決一系列機(jī)器學(xué)習(xí)問(wèn)題提供了理論保證。Zhao 指出,采用分塊循環(huán)矩陣壓縮后的神經(jīng)網(wǎng)絡(luò)仍然具有這一性質(zhì),并且該結(jié)論可以進(jìn)一步推廣到更一般的低位移秩矩陣神經(jīng)網(wǎng)絡(luò)。

2 基于循環(huán)矩陣壓縮的3D-CNN算法優(yōu)化

2.1 全連接層的壓縮

在3D-CNN 中,全連接層可以表示為矩陣-向量乘法操作。假設(shè)輸入特征x和輸出特征a的維度分別為N、M,則權(quán)重W為一個(gè)M×N的矩陣。為了使用循環(huán)矩陣對(duì)全連接層進(jìn)行壓縮,首先將權(quán)重W劃分為p×q個(gè)B×B尺寸的子矩陣Wij(這里p=M/B,q=N/B,i=0,1,…,p-1,j=0,1,…,q-1)。令每一個(gè)子矩陣Wij均為循環(huán)矩陣,對(duì)應(yīng)生成向量為wij。此時(shí),對(duì)于所有的權(quán)值子矩陣Wij,僅需存儲(chǔ)其各自對(duì)應(yīng)的生成向量wij,因此總的存儲(chǔ)開(kāi)銷(xiāo)為pqB,相較于未壓縮時(shí)MN(pqB2)的存儲(chǔ)開(kāi)銷(xiāo),可以獲得B倍的壓縮收益。與上述壓縮方法相對(duì)應(yīng),當(dāng)使用壓縮后的權(quán)重W與維度為N×1 的輸入特征x進(jìn)行計(jì)算時(shí),對(duì)應(yīng)需要將x劃分為q個(gè)尺寸為B×1 的子向量xj,同理尺寸為M×1 的結(jié)果向量a將被劃分為p個(gè)B×1 的子向量ai,分別計(jì)算,如公式(3)所示:

在此基礎(chǔ)上,考慮到Wij為循環(huán)矩陣,其對(duì)應(yīng)的生成向量為wij,故矩陣向量乘法Wij?xj可以進(jìn)一步采用FFT進(jìn)行加速,相應(yīng)的ai計(jì)算過(guò)程如公式(4)所示:

為了進(jìn)一步減少I(mǎi)FFT的調(diào)用次數(shù),可以利用FFT/IFFT的線性性質(zhì)[23],將IFFT移至求和符號(hào)外,如公式(5)所示:

從而將IFFT的調(diào)用次數(shù)由q減少為1。綜上所述,經(jīng)過(guò)分塊循環(huán)矩陣壓縮,全連接層的計(jì)算復(fù)雜度可以由O(pqB2)減少為O(pqBlbB)。

2.2 卷積層的壓縮

為方便敘述,約定M、N分別為三維卷積的輸出、輸入通道數(shù),D、R、C分別為輸出特征在時(shí)間、高度、寬度三個(gè)維度上的大小,K、B分別表示卷積核尺寸和循環(huán)矩陣塊大小,則輸入特征圖I、權(quán)重W和輸出特征圖O分別是尺寸為N×(D+K-1)×(R+K-1)×(C+K-1)、M×N×K×K×K、M×D×R×C的多維張量。為了使用循環(huán)矩陣壓縮三維卷積層權(quán)重,首先將權(quán)重張量W(圖4(a))視為K3個(gè)尺寸為M×N的矩陣,如圖4(b)所示,而后再將其中每個(gè)M×N矩陣劃分為P×Q個(gè)尺寸為B×B的子矩陣Wp,q,i,j,k(P=M/B,Q=N/B,p=0,1,…,P-1,q=0,1,…,Q-1,i,j,k=0,1,…,K-1) ,最后,令每一個(gè)子矩陣Wp,q,i,j,k均為循環(huán)矩陣。與之相對(duì)應(yīng),原權(quán)值矩陣可由子矩陣Wp,q,i,j,k的生成向量wp,q,i,j,k表示,如圖4(c)所示,從而將卷積層權(quán)值的存儲(chǔ)開(kāi)銷(xiāo)由MNK3減少為PQBK3,取得B倍的壓縮效果。

圖4 卷積層權(quán)重的壓縮Fig.4 Compression of convolutional layer weights

與卷積層的壓縮過(guò)程相對(duì)應(yīng),其計(jì)算過(guò)程如圖5所示,其中①是原始的三維卷積的偽代碼。由于在壓縮卷積層權(quán)重時(shí)已經(jīng)對(duì)輸入、輸出通道進(jìn)行了分塊操作,因此,①可以進(jìn)一步改寫(xiě)為圖5 中②所對(duì)應(yīng)的分塊矩陣-向量乘法的形式。進(jìn)一步地,根據(jù)卷積層的壓縮策略,對(duì)于每一組給定的p,q,i,j,k,W[pB+B:pB][qB+B:qB][i][j][k]均為循環(huán)矩陣,因此②可以進(jìn)一步通過(guò)③所對(duì)應(yīng)的FFT 操作進(jìn)行優(yōu)化,其中,w[p][q][:][i][j][k]是循環(huán)矩陣W[pB+B:pB][qB+B:qB][i][j][k]對(duì)應(yīng)的生成向量。

圖5 卷積計(jì)算的加速Fig.5 Acceleration of convolutional calculations

得益于三維卷積中多種形式的數(shù)據(jù)復(fù)用,F(xiàn)FT加速給卷積層帶來(lái)的收益更加可觀。壓縮前卷積層的計(jì)算復(fù)雜度為O(MNDRCK3),而根據(jù)對(duì)圖5中③的分析可知,對(duì)輸入特征、權(quán)重以及輸出特征進(jìn)行FFT/IFFT變換的計(jì)算復(fù)雜度分別為O(NDRClbB)、O(K3PQBlbB)和O(MDRClbB),元素級(jí)乘法的計(jì)算復(fù)雜度為O(MNDRCK3/B),故計(jì)算復(fù)雜度的理論壓縮比可以由公式(6)所描述:

考慮到在3D-CNN中,M、N、D、R、C的值遠(yuǎn)大于B、K,因此壓縮后卷積層的計(jì)算復(fù)雜度(即公式(6)中的分母)可近似為O(MNDRCK3/B),對(duì)應(yīng)計(jì)算壓縮比約為O(B),相比全連接層O(B/lbB)倍的壓縮效果,取得了更為明顯的提升。

2.3 全頻域計(jì)算

根據(jù)上述分析可知,采用分塊循環(huán)矩陣和FFT 對(duì)3D-CNN的卷積層和全連接層進(jìn)行壓縮和加速后,網(wǎng)絡(luò)層的計(jì)算流程變?yōu)椋篎FT →元素級(jí)乘法→IFFT。該過(guò)程涉及較為頻繁的時(shí)域/頻域切換:如圖6(a)所示,由于傳統(tǒng)前饋過(guò)程中激活、批歸一化以及池化層需要在時(shí)域中進(jìn)行計(jì)算,因此,每次在頻域中計(jì)算完卷積層/全連接層后需要通過(guò)IFFT將結(jié)果轉(zhuǎn)化至?xí)r域(圖6(a)中的①)。而在進(jìn)行下一次卷積層或全連接層操作時(shí),又必須將時(shí)域特征通過(guò)FFT轉(zhuǎn)換至頻域(圖6(a)中的②)。頻繁的頻域/時(shí)域轉(zhuǎn)換將嚴(yán)重影響前饋過(guò)程的硬件加速效果:(1)由于FFT/IFFT是計(jì)算密集型算法,轉(zhuǎn)換過(guò)程本身存在較大開(kāi)銷(xiāo);(2)在設(shè)計(jì)硬件加速器時(shí),需要專(zhuān)門(mén)的硬件模塊計(jì)算FFT/IFFT,會(huì)消耗額外的硬件資源;(3)FFT/IFFT算法會(huì)引入計(jì)算誤差,對(duì)模型量化不友好。

圖6 全頻域推理Fig.6 Full frequency domain inference

為解決該問(wèn)題,本文提出了針對(duì)激活層、批歸一化層、池化層的頻域算子,并在此基礎(chǔ)上實(shí)現(xiàn)了全頻域前饋計(jì)算,以此消除頻繁的時(shí)域/頻域切換開(kāi)銷(xiāo)。全頻域前饋過(guò)程如圖6(b)所示。在選取頻域算子時(shí)綜合考慮了以下兩方面因素:其一是頻域算子的計(jì)算復(fù)雜度不能過(guò)高,否則其計(jì)算開(kāi)銷(xiāo)可能抵消全頻域計(jì)算所帶來(lái)的收益;其二是頻域算子的引入不能造成較大的精度損失。權(quán)衡這兩點(diǎn),本文最終選擇CReLU[24]、CBN和CMaxPool作為激活層、批歸一化層、池化層的頻域算子,相應(yīng)表達(dá)式分別如公式(7)~(9)所示:

其中,ReLU、BN和Maxpool分別是實(shí)數(shù)域上的激活、批歸一化和最大池化操作。由公式(7)~(9)可知,CReLU、CBN 和CMaxpool 相當(dāng)于對(duì)數(shù)據(jù)的實(shí)部和虛部分別進(jìn)行ReLU、BN 和Maxpool 操作,因此,其計(jì)算開(kāi)銷(xiāo)較小。為進(jìn)一步探究頻域算子對(duì)模型精度的影響,本文使用C3D 網(wǎng)絡(luò)模型和UCF101 數(shù)據(jù)集對(duì)所提出的頻域算子進(jìn)行了消融測(cè)試,結(jié)果如表1 所示。從表中可以看出,引入CReLU 后造成了0.37 個(gè)百分點(diǎn)的精度損失,而CBN、CMaxpool 的引入分別帶來(lái)0.556 個(gè)百分點(diǎn)和0.417 個(gè)百分點(diǎn)的精度提升。由此可見(jiàn),所選頻域算子CReLU、CBN和CMaxpool在具有較低計(jì)算復(fù)雜度的同時(shí),能夠較好地保持模型精度,充分符合全頻域前饋過(guò)程的處理要求。

表1 C3D上頻域算子消融實(shí)驗(yàn)Table 1 Frequency domain operator ablation experiment on C3D

2.4 復(fù)數(shù)域內(nèi)的模型量化

為了進(jìn)一步降低模型尺寸和硬件部署時(shí)的開(kāi)銷(xiāo),本文對(duì)壓縮后的3D-CNN 進(jìn)行了量化操作。與全頻域內(nèi)的前饋過(guò)程相對(duì)應(yīng),本文的量化操作是在復(fù)數(shù)域上進(jìn)行的。在傳統(tǒng)INT8 量化感知訓(xùn)練方法的基礎(chǔ)上[25],本文進(jìn)一步提出了以下量化方案:

其中,zr、zi分別為復(fù)數(shù)z的實(shí)部和虛部;Quant 為實(shí)數(shù)域上的對(duì)稱(chēng)量化算子,Quant(x)=clamp([x/s],-127,127),clamp(x,a,b)用于將x的值約束在a、b之間,若x小于a則返回a,若x大于b則返回b,否則返回x,s為伸縮因子,[?]為取整操作;Dequant 為實(shí)數(shù)域上的反對(duì)稱(chēng)量化算子,Dequant(x)=x?s。將CQuant和CDequant算子構(gòu)成的偽量化算子插入到神經(jīng)網(wǎng)絡(luò)的計(jì)算圖中,即可實(shí)現(xiàn)量化感知訓(xùn)練[25]。在量化過(guò)程中,為了降低量化對(duì)模型精度的影響,權(quán)重和激活、實(shí)部和虛部均采用獨(dú)立的伸縮因子。其中,權(quán)重實(shí)部和虛部的伸縮因子Siw(i=1,2,分別表示實(shí)部和虛部,下同)均是基于權(quán)重wi的統(tǒng)計(jì)信息在訓(xùn)練過(guò)程中動(dòng)態(tài)計(jì)算得到的,如公式(12)所示:

而為了平滑激活的伸縮因子,防止其在訓(xùn)練過(guò)程中出現(xiàn)劇烈抖動(dòng),本文采用滑動(dòng)平均法(exponential moving average)更新,如公式(13)所示:

在上式中,β∈[0,1],起調(diào)節(jié)作用,其值越小,說(shuō)明歷史值的影響越大,反之則當(dāng)前值(max(|ai|)/127 占據(jù)主導(dǎo)地位。此外,在反向傳播過(guò)程中,由于取整函數(shù)(round)是不可導(dǎo)的,因此,本文采用直通估計(jì)器(straightthrough estimator,STE)[26]估計(jì)其導(dǎo)數(shù),如公式(14)所示:

3 硬件設(shè)計(jì)與優(yōu)化

3.1 加速器的硬件架構(gòu)

加速器的整體架構(gòu)如圖7 所示,主要包括控制單元、AXI DMA、輸入特征緩存、權(quán)重緩存、輸出特征緩存、計(jì)算單元(PEs)以及后處理單元。由于FPGA片上存儲(chǔ)資源有限,無(wú)法一次性容納特征圖和權(quán)重,因此,在設(shè)計(jì)加速器時(shí),本文進(jìn)行了循環(huán)分塊優(yōu)化。為了方便說(shuō)明,約定Tn、Tm分別為加速器輸入、輸出通道的分塊大小,同時(shí)也是加速器在輸入、輸出通道維度的并行度,Td、Tr、Tc分別為輸出特征圖時(shí)間、高度、寬度維度的分塊大小,B為分塊循環(huán)矩陣壓縮時(shí)的塊大小。上述硬件參數(shù)在加速器設(shè)計(jì)時(shí)可以根據(jù)模型定制化,以盡可能提升加速器的性能。在整個(gè)硬件架構(gòu)中,最核心的是計(jì)算單元(PEs),如圖7 所示,計(jì)算單元包含多個(gè)PE,每個(gè)PE 均由Tn/B個(gè)并行的復(fù)數(shù)乘法器構(gòu)成,相乘的結(jié)果,通過(guò)一個(gè)Tn/B輸入的復(fù)數(shù)加法樹(shù)求和,若僅在輸入、輸出通道進(jìn)行循環(huán)展開(kāi),則共有Tm/B×B=Tm個(gè)PE。此外,計(jì)算單元可以根據(jù)硬件資源的數(shù)量以及實(shí)際應(yīng)用場(chǎng)景的需求進(jìn)行靈活縮放,例如可以通過(guò)調(diào)節(jié)Tm、Tn的大小或者在其余維度上進(jìn)行類(lèi)似的循環(huán)展開(kāi)來(lái)縮放加速器的并行度。因此,計(jì)算單元具有良好的可擴(kuò)展性。為了給計(jì)算單元提供相匹配的片上訪存帶寬,輸入特征緩存、輸出特征緩存以及權(quán)重緩存分別由Tn、Tm、Tn×Tm/B個(gè)Bank構(gòu)成,不同通道的數(shù)據(jù)存儲(chǔ)在不同的Bank中,從而可以實(shí)現(xiàn)對(duì)數(shù)據(jù)的并行讀寫(xiě)。后處理單元包括CReLU、CBN、量化和CMaxpool單元,分別如圖7 ①~④所示。所有的處理單元均由兩路構(gòu)成,分別處理輸入的實(shí)部(zr)和虛部(zi)。其中,CReLU 單元通過(guò)和實(shí)數(shù)0進(jìn)行比較實(shí)現(xiàn)對(duì)復(fù)數(shù)實(shí)部和虛部的ReLU操作;CBN單元接受參數(shù)γ和β,并分別對(duì)輸入的實(shí)部和虛部進(jìn)行線性變換;量化單元首先對(duì)輸入的實(shí)部和虛部分別進(jìn)行縮放(×1/s),然后就近取整并將值限制在區(qū)間[-127,127]內(nèi);CMaxpool單元由兩路比較樹(shù)構(gòu)成,并由此求得每一路池化窗口內(nèi)所有數(shù)據(jù)的最大值。AXI DMA 用于在片外存儲(chǔ)器和加速器之間搬運(yùn)數(shù)據(jù)??刂茊卧?fù)責(zé)控制與調(diào)度整個(gè)加速器的工作。為了掩蓋數(shù)據(jù)的傳輸時(shí)間,本文的硬件加速器還進(jìn)行了雙緩沖操作,通過(guò)在加載、計(jì)算、寫(xiě)回之間實(shí)現(xiàn)粗粒度流水,進(jìn)一步增大加速器的吞吐率。

圖7 加速器硬件架構(gòu)Fig.7 Hardware architecture of accelerator

3.2 高效的數(shù)據(jù)排布策略

為增大片外訪存效率,充分利用片外存儲(chǔ)器帶寬,本文對(duì)特征圖進(jìn)行了數(shù)據(jù)重排。需要強(qiáng)調(diào)的是,由于加速器的計(jì)算單元是在特征圖的通道維度并行的,因此,相應(yīng)的緩存單元也需要在通道維度分割,以提供足夠的片上帶寬。例如,在圖8 ③中,片上緩存被分割為4 個(gè)Bank,每個(gè)Bank負(fù)責(zé)存儲(chǔ)一個(gè)通道的特征圖,以支持計(jì)算單元并行的需求。

圖8 NCHW和NC/xHWx數(shù)據(jù)排布(x=4)Fig.8 NCHW and NC/xHWx data arrangement(x=4)

現(xiàn)以二維特征圖為例(三維類(lèi)似),闡述本文的數(shù)據(jù)排布策略。如圖8所示,左側(cè)是一個(gè)8通道的特征圖,每一幅特征圖的大小均為2×2,圖8 ①是常見(jiàn)的NCHW數(shù)據(jù)排布格式,該格式按照行主序的方式,先排布通道0的特征圖,接著排布下一個(gè)通道的數(shù)據(jù)。然而,在這種數(shù)據(jù)排布方式下,片外訪存效率難以被充分利用:假設(shè)數(shù)據(jù)位寬為8 位,總線位寬為32 位,則理論上該總線可以在1個(gè)周期內(nèi)讀取4個(gè)數(shù)據(jù)。然而,在NCHW數(shù)據(jù)排布下,即使總線能夠在一個(gè)周期內(nèi)讀取4 個(gè)數(shù)據(jù)(例如圖8 ①紅框所示),由于所讀取數(shù)據(jù)屬于同一通道,因此無(wú)法在同一周期內(nèi)寫(xiě)入片上緩存,從而造成停頓。為此,本文采用了圖8 ②所示的NC/xHWx 數(shù)據(jù)排布格式(以x=4 為例,即NC/4HW4),該格式首先排布前4 個(gè)通道(0~3)的特征圖,具體的排布策略為:將這0~3通道同一像素位置(1)的數(shù)據(jù)取出并排列,接著取出這4 個(gè)通道下一個(gè)像素位置(2)的數(shù)據(jù)排列,直至所有數(shù)據(jù)都排列完畢,再對(duì)4~7 通道進(jìn)行類(lèi)似的排布。在該排布下,總線可以一次并行讀取4個(gè)分布于不同通道的數(shù)據(jù)(例如圖8 ②中紅框所示),并能夠在同一周期內(nèi)將所讀數(shù)據(jù)寫(xiě)入片上緩存,從而充分利用了片外訪存帶寬。

3.3 針對(duì)復(fù)數(shù)運(yùn)算特點(diǎn)的設(shè)計(jì)優(yōu)化

3.3.1 基于復(fù)數(shù)共軛對(duì)稱(chēng)性的優(yōu)化

由于在3D-CNN中,時(shí)域的激活、權(quán)重均為實(shí)數(shù),因此,其經(jīng)過(guò)FFT 變換后得到的頻域激活、權(quán)重滿足共軛對(duì)稱(chēng)性。本文利用該性質(zhì),進(jìn)一步對(duì)加速器進(jìn)行了優(yōu)化:一個(gè)長(zhǎng)為N的實(shí)數(shù)序列x經(jīng)過(guò)FFT變換后,得到的復(fù)數(shù)序列X滿足共軛對(duì)稱(chēng)性,如公式(15)、(16)所示:

其中,Imz表示取復(fù)數(shù)z的虛部,*表示復(fù)數(shù)的共軛,即(a+bi)*=a-bi。因此,在對(duì)頻域的權(quán)重(可以預(yù)先轉(zhuǎn)化到頻域)和激活進(jìn)行存儲(chǔ)時(shí),可以只存儲(chǔ)其一部分值。對(duì)于偶數(shù)的N來(lái)說(shuō)(本文在選擇循環(huán)矩陣分塊大小時(shí),均采用偶數(shù)),只需存儲(chǔ)X0,X1,…,XN/2共N/2+1 個(gè)復(fù)數(shù),考慮到X0和XN/2均為實(shí)數(shù),因此,可以將X0和XN/2進(jìn)一步打包為一個(gè)復(fù)數(shù)X0+iXN/2,從而將存儲(chǔ)空間減半,如圖9 所示。此外,由于共軛復(fù)數(shù)的乘積等于復(fù)數(shù)乘積的共軛,如公式(17)所示:

圖9 基于復(fù)數(shù)共軛對(duì)稱(chēng)性的優(yōu)化Fig.9 Optimization based on complex conjugate symmetry

因此,在頻域進(jìn)行復(fù)數(shù)向量的元素級(jí)乘法時(shí),可以只計(jì)算前N/2+1 項(xiàng)的乘積,而后N/2-1 項(xiàng)乘積的結(jié)果可以由前者的復(fù)共軛得到,從而減少約50%的計(jì)算量,如圖9所示。

3.3.2 復(fù)數(shù)乘法優(yōu)化

由于在2.3節(jié)中,通過(guò)引入頻域算子,實(shí)現(xiàn)了全頻域推理,因此,在本文中,復(fù)數(shù)乘法是加速器設(shè)計(jì)中最核心的運(yùn)算。然而,和實(shí)數(shù)乘法相比,復(fù)數(shù)的乘法更加復(fù)雜,如公式(18)所示:

上式表明,1次復(fù)數(shù)乘法包含了4次實(shí)數(shù)乘法和2次實(shí)數(shù)加法。為了進(jìn)一步減少其計(jì)算量,作如下變換:

由式(19)~(22)可知,經(jīng)過(guò)優(yōu)化后,原先4次實(shí)數(shù)乘法、2次實(shí)數(shù)加法的復(fù)數(shù)乘法運(yùn)算,計(jì)算量可以減少為3次實(shí)數(shù)乘法和5 次實(shí)數(shù)加法。由于加法的計(jì)算復(fù)雜度遠(yuǎn)低于乘法,因此,上述優(yōu)化可以有效降低復(fù)數(shù)乘法的計(jì)算復(fù)雜度,進(jìn)而減少硬件資源(如DSP Slice)的消耗(接近25%),提升加速器的計(jì)算效率。

3.3.3 基于數(shù)據(jù)共享的計(jì)算資源優(yōu)化

DSP 是FPGA 中重要的計(jì)算資源,以Xilinx FPGA為例,在UltraScale/UltraScale+系列的FPGA中,DSP48E2 Slice 包括1 個(gè)27×18 bit 的乘法器和1 個(gè)48 bit 的加法器,由于其支持較大的位寬,因此,在數(shù)據(jù)位寬較小且存在數(shù)據(jù)共享的情況下,可以進(jìn)一步優(yōu)化從而提高DSP的利用率[27]。與此同時(shí),在3D-CNN 中,存在著豐富的數(shù)據(jù)復(fù)用,包括輸入特征圖復(fù)用(input feature map reuse)、卷積核復(fù)用(filter reuse)以及卷積復(fù)用(convolutional reuse),這些復(fù)用使得數(shù)據(jù)共享成為可能。基于以上兩點(diǎn),本文提出了基于INT9乘法的DSP優(yōu)化方法。

現(xiàn)考慮有三個(gè)復(fù)數(shù)x=a+bi,w1=x1+iy1,w2=x2+iy2,需要計(jì)算o1=x×w1和o2=x×w2,結(jié)合3.3.2 小節(jié)中復(fù)數(shù)乘法的優(yōu)化,對(duì)于i=1,2,有:

注意到,A1和A2共享了乘數(shù)a+b,B1和B2共享了乘數(shù)b,C1和C2共享了乘數(shù)b-a,在本文INT8 量化的情況下,a+b、b-a、x1+y1以及x2+y2都需要用9位有符號(hào)整數(shù)表示,因此,可以進(jìn)一步將問(wèn)題抽象為:a、b、c均為INT9 類(lèi)型,需要計(jì)算x=a×b,y=a×c,如何對(duì)其進(jìn)行優(yōu)化可以減少DSP資源消耗。

如圖10所示,為了對(duì)x、y的計(jì)算進(jìn)行優(yōu)化,首先將b左移18位,同時(shí)將c符號(hào)擴(kuò)展為27位,兩者求和,然后再和a相乘,得到o=a×(b<<18+c),最后,再?gòu)膐中將x和y拆分出來(lái):x=o35:18+o17,y=o17:0。通過(guò)上述優(yōu)化,可以實(shí)現(xiàn)1個(gè)DSP48E2 Slice同時(shí)計(jì)算兩個(gè)INT9乘法的目的,這充分挖掘了Xilinx DSP48E2 Slice 的計(jì)算能力,顯著降低了DSP 資源的使用量,進(jìn)而提升了加速器的計(jì)算效率。

圖10 INT9乘法DSP優(yōu)化Fig.10 DSP optimization of INT9 multiplication

4 實(shí)驗(yàn)評(píng)估

4.1 實(shí)驗(yàn)設(shè)置

為了對(duì)本文提出的方法進(jìn)行評(píng)估,本文選擇了兩個(gè)典型的3D-CNN模型:C3D[2]和3D ResNet-18[6]。C3D具有非常規(guī)整的網(wǎng)絡(luò)結(jié)構(gòu),它包含8 個(gè)卷積層、5 個(gè)池化層、2個(gè)全連接層以及一個(gè)Softmax層。其中,所有卷積核的大小均為3×3×3,步長(zhǎng)均為1×1×1,所有的最大池化層,除第一個(gè)池化核的尺寸和步長(zhǎng)為1×2×2 外,其余均為2×2×2。3D ResNet-18由2D ResNet-18演化而來(lái),因此,在3D ResNet-18中,不僅包含3×3×3的標(biāo)準(zhǔn)卷積,還包含1×1×1的點(diǎn)態(tài)(point-wise)卷積。此外,3D ResNet-18還具有殘差連接結(jié)構(gòu),用以解決深度網(wǎng)絡(luò)梯度消失和梯度爆炸的問(wèn)題。本文采用的數(shù)據(jù)集是UCF101,該數(shù)據(jù)集包含101個(gè)類(lèi)別共13 320個(gè)視頻,分辨率為320×240,幀率不固定,一般為25幀或29幀。

本文基于Pytorch深度學(xué)習(xí)框架實(shí)現(xiàn)對(duì)模型的壓縮和訓(xùn)練,實(shí)驗(yàn)采用的GPU 配置為4 塊NVIDIA TITAN X。在訓(xùn)練過(guò)程中,神經(jīng)網(wǎng)絡(luò)模型所有的ReLU、BN 及Maxpool操作均被替換為CReLU、CBN和CMaxpool,以實(shí)現(xiàn)全頻域推理。同時(shí),本文還在復(fù)數(shù)域上進(jìn)行了INT8 量化感知訓(xùn)練。在整個(gè)訓(xùn)練過(guò)程中,相同模型的訓(xùn)練參數(shù)是一致的:輸入視頻的空間尺寸為112×112,通道數(shù)為3,共16幀,學(xué)習(xí)率為0.01,采用余弦學(xué)習(xí)率更新策略,訓(xùn)練300 個(gè)Epoch,C3D 和3D ResNet-18 的批處理大小分別為64和128。本文選擇Xilinx ZCU102 FPGA作為實(shí)驗(yàn)的硬件平臺(tái),開(kāi)發(fā)工具為Xilinx Vivado HLS 2019.2,本文分別為C3D 和3D ResNet-18 設(shè)計(jì)了相應(yīng)的硬件加速器。其中,C3D 加速器的硬件參數(shù)為(Tn,Tm,Td,Tr,Tc)=(32,64,2,7,7),并對(duì)Tn、Tm進(jìn)行循環(huán)展開(kāi);3D ResNet-18 加速器由兩個(gè)硬件加速核構(gòu)成,分別用于加速1×1×1和3×3×3卷積,其硬件參數(shù)分別為(Tn,Tm,Td,Tr,Tc)=(8,32,2,7,7)和(Tn,Tm,Td,Tr,Tc)=(32,32,2,7,7),前者對(duì)Tn、Tm進(jìn)行循環(huán)展開(kāi),后者對(duì)Td、Tn、Tm進(jìn)行循環(huán)展開(kāi)。此外,為了提高片外訪存效率,本文對(duì)特征圖進(jìn)行了NC/8DHW8 格式的數(shù)據(jù)排布。由于加速器和片外存儲(chǔ)器是通過(guò)AXI 總線傳輸數(shù)據(jù)的,因此,為了適配N(xiāo)C/8DHW8 數(shù)據(jù)排布格式,AXI總線接口的位寬被設(shè)置為128,每次可以并行地讀取8個(gè)復(fù)數(shù)(每個(gè)復(fù)數(shù)的實(shí)部和虛部均為8位,共16位)。本文使用Xilinx Vivado 2019.2 對(duì)設(shè)計(jì)完成的加速器進(jìn)行綜合、布局布線、生成比特流,加速器的時(shí)鐘頻率為200 MHz。

4.2 實(shí)驗(yàn)結(jié)果

4.2.1 模型精度與壓縮比

為了探究模型精度和壓縮比之間的關(guān)系,取塊大小為1(即未壓縮的模型)、4、8、16在C3D和3D ResNet-18上進(jìn)行了實(shí)驗(yàn),結(jié)果如圖11所示。由圖可知,當(dāng)分塊大小為4 時(shí),C3D 和3D ResNet-18 的精度損失僅為0.278和0.51 個(gè)百分點(diǎn),相應(yīng)的存儲(chǔ)與計(jì)算壓縮比為16 倍和2.67倍。作為對(duì)比,文獻(xiàn)[13]對(duì)C3D進(jìn)行以塊為單位的剪枝,以0.34個(gè)百分點(diǎn)的精度損失為代價(jià)獲得了1.05倍的參數(shù)壓縮比和3.18 倍的計(jì)算壓縮比。顯然,3D FCirCNN以更小的精度損失(0.278個(gè)百分點(diǎn))取得了更加顯著的參數(shù)壓縮效果。而在計(jì)算量壓縮方面,盡管3D FCirCNN 取得的壓縮效果相較文獻(xiàn)[13]減少了約16%,但3D FCirCNN 對(duì)C3D 的壓縮是高度規(guī)則的,因此在實(shí)際部署時(shí)可以取得更優(yōu)的效果,這一點(diǎn)在4.2.2小節(jié)3D FCirCNN 和其他相關(guān)工作的比較中得到了充分體現(xiàn)。當(dāng)分塊大小為16 時(shí),C3D 和3D ResNet-18 的精度損失分別為2.825和3.196個(gè)百分點(diǎn),壓縮對(duì)精度造成了較大影響。因此,為了在精度和壓縮比之間取得較優(yōu)權(quán)衡,本文最終采用塊大小為8的分塊循環(huán)矩陣來(lái)壓縮C3D 和3D ResNet-18,相應(yīng)的存儲(chǔ)與計(jì)算壓縮比分別為32 倍和5.33 倍,精度損失分別為1.25 和1.71 個(gè)百分點(diǎn)。相比之下,3D VNPU[14]采用Winograd算法和INT8量化,以1 個(gè)百分點(diǎn)的精度損失為代價(jià)獲得了4 倍的存儲(chǔ)壓縮比和3.33倍的計(jì)算壓縮比。通過(guò)分析不難發(fā)現(xiàn),3D FCirCNN 在精度損失稍大的情況下(0.25 個(gè)百分點(diǎn)),在3D VNPU 的基礎(chǔ)上將存儲(chǔ)和計(jì)算的壓縮比進(jìn)一步提升了8倍和1.6倍,從而充分說(shuō)明了3D FCirCNN在3D-CNN模型壓縮方面的優(yōu)越性。

圖11 壓縮比對(duì)精度的影響Fig.11 Effect of compression ratio on accuracy

4.2.2 和相關(guān)工作的比較

表2列出了針對(duì)兩個(gè)不同模型所設(shè)計(jì)的加速器的資源消耗情況。表3 給出了加速器和其他相關(guān)工作的比較結(jié)果。由表3可知,得益于本文算法壓縮和硬件加速的協(xié)同優(yōu)化,C3D 和3D ResNet-18 加速器的吞吐量分別達(dá)到了2 692.81 GOP/s 和1 591.52 GOP/s,相較于表中其余工作的加速比分別為1.99~16.68 倍和1.18~9.86 倍,取得了顯著提升。此外,由于本文所采取的針對(duì)復(fù)數(shù)乘法的DSP優(yōu)化技術(shù),C3D和3D ResNet-18加速器分別取得了每DSP 3.349 GOP/s 和1.677 GOP/s 的吞吐率,相較于表2 中其余加速器的結(jié)果分別提升了2.54~16.18 倍和1.27~8.1 倍。因此,本文所提出的方法可以以較少的硬件資源為代價(jià),取得優(yōu)異的性能,這一點(diǎn)在硬件資源、功耗受限的嵌入式平臺(tái)上顯得尤為重要。

表2 加速器資源消耗Table 2 Resource utilization of accelerator

表3 和先前實(shí)現(xiàn)的比較Table 3 Comparison with previous implementations

5 結(jié)束語(yǔ)

本文提出了3D FCirCNN,一個(gè)算法-硬件協(xié)同設(shè)計(jì)與優(yōu)化的方法來(lái)對(duì)3D-CNN進(jìn)行加速。在算法層面,本文采用基于分塊循環(huán)矩陣的壓縮方法,并進(jìn)一步利用FFT加速計(jì)算。此外,為了消除由于FFT帶來(lái)的頻繁的時(shí)域/頻域切換開(kāi)銷(xiāo),本文引入了頻域內(nèi)的激活、池化和批歸一化層,實(shí)現(xiàn)了全頻域計(jì)算。本文還采用與分塊循環(huán)矩陣正交的INT8對(duì)稱(chēng)量化對(duì)3D-CNN進(jìn)行進(jìn)一步壓縮。在硬件層面,本文為壓縮后的3D-CNN設(shè)計(jì)了一個(gè)專(zhuān)用的硬件架構(gòu),并針對(duì)硬件資源、存儲(chǔ)帶寬進(jìn)行了一系列優(yōu)化。在精度損失可以接受的范圍內(nèi),3D FCirCNN帶來(lái)了接近32 倍的壓縮效果,相較于以往最先進(jìn)的工作,本文的加速器在Xilinx ZCU102 FPGA平臺(tái)上取得了多達(dá)16.68倍的性能提升和16.18倍的計(jì)算效率提升。

猜你喜歡
壓縮比分塊復(fù)數(shù)
評(píng)析復(fù)數(shù)創(chuàng)新題
求解復(fù)數(shù)模及最值的多種方法
數(shù)系的擴(kuò)充和復(fù)數(shù)的引入
質(zhì)量比改變壓縮比的辛烷值測(cè)定機(jī)
復(fù)數(shù)
分塊矩陣在線性代數(shù)中的應(yīng)用
反三角分塊矩陣Drazin逆新的表示
基于自適應(yīng)中值濾波的分塊壓縮感知人臉識(shí)別
基于多分辨率半邊的分塊LOD模型無(wú)縫表達(dá)
低溫廢氣再循環(huán)及低壓縮比對(duì)降低歐6柴油機(jī)氮氧化物排放的影響
永康市| 关岭| 咸宁市| 汉寿县| 满洲里市| 太和县| 通山县| 马公市| 团风县| 临猗县| 湖口县| 拜城县| 玉溪市| 永济市| 樟树市| 钦州市| 平武县| 平阳县| 枣庄市| 双柏县| 米脂县| 娱乐| 香港 | 开原市| 道孚县| 郎溪县| 司法| 西畴县| 资阳市| 鸡泽县| 恩平市| 新和县| 吉林省| 平顶山市| 吉木萨尔县| 大方县| 荔浦县| 桃源县| 泸溪县| 汕尾市| 横峰县|