• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    動(dòng)態(tài)深度神經(jīng)網(wǎng)絡(luò)的硬件加速設(shè)計(jì)及FPGA實(shí)現(xiàn)*

    2024-03-26 06:31:46任軼群范毓洋張嘉誠(chéng)
    電訊技術(shù) 2024年3期
    關(guān)鍵詞:池化交叉運(yùn)算

    王 鵬,任軼群,范毓洋,張嘉誠(chéng)

    (中國(guó)民航大學(xué)a.民航航空器適航審定技術(shù)重點(diǎn)實(shí)驗(yàn)室;b.電子信息與自動(dòng)化學(xué)院;c.安全科學(xué)與工程學(xué)院,天津 300300)

    0 引 言

    卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)為基礎(chǔ)的計(jì)算機(jī)視覺(jué)算法,在汽車(chē)自動(dòng)駕駛、無(wú)人機(jī)圖像識(shí)別、人體行為識(shí)別等領(lǐng)域有著廣泛的應(yīng)用[1-3],典型的卷積神經(jīng)網(wǎng)絡(luò)有AlexNet、VGGNet、GoogLeNet和ResNet等[4]。為了使CNN網(wǎng)絡(luò)獲得更好的精度,模型引入了更深層次的網(wǎng)絡(luò)架構(gòu),導(dǎo)致正向推理過(guò)程所需要的計(jì)算復(fù)雜度增加,邊緣設(shè)備難以高幀率地運(yùn)行CNN網(wǎng)絡(luò)[5]。實(shí)際應(yīng)用中圖像的特征識(shí)別難度不同,一些特征明顯的圖像只需要較少層數(shù)的網(wǎng)絡(luò)即可準(zhǔn)確識(shí)別[6]。為此,動(dòng)態(tài)深度神經(jīng)網(wǎng)絡(luò)[7-9]通過(guò)在CNN中插入側(cè)分枝(BranchyNet)分類(lèi)器,允許交叉熵?fù)p失滿足一定置信度的簡(jiǎn)單圖像提前退出,減少不必要的特征提取次數(shù),提升CNN模型在邊緣部署的計(jì)算效率。BranchyNet的加入雖然減少了識(shí)別部分圖像的計(jì)算量,但在邊緣平臺(tái)部署動(dòng)態(tài)深度神經(jīng)網(wǎng)絡(luò)仍面臨計(jì)算量大、算法復(fù)雜度高等問(wèn)題。

    現(xiàn)場(chǎng)可編程門(mén)陣列(Field Programmable Gate Array,FPGA)有著強(qiáng)大的并行性,不但可以數(shù)據(jù)并行還可以數(shù)據(jù)流并行,能夠滿足卷積神經(jīng)網(wǎng)絡(luò)的大量并行計(jì)算需求,并且具有低延時(shí)和低功耗的特性,還可以通過(guò)硬件適應(yīng)算法的特性[10],設(shè)計(jì)針對(duì)特殊算法的加速電路。因此,FPGA可以很好地契合動(dòng)態(tài)深度神經(jīng)網(wǎng)絡(luò)在邊緣部署的需求。在FPGA加速神經(jīng)網(wǎng)絡(luò)方面,Venieris等人[11]采用同步數(shù)據(jù)流架構(gòu)(Synchronous Dataflow Model)設(shè)計(jì)了一種將CNN模型計(jì)算任務(wù)映射到FPGA平臺(tái)的流水處理方法,為了避免因數(shù)據(jù)缺失而導(dǎo)致流水線停頓,將需要加速的CNN模型權(quán)重和各層之間的特征圖全部緩存到片上,但因?yàn)槠蟽?nèi)存受限,此類(lèi)方法只能適用于規(guī)模較小的CNN模型。Li等人[12]提出一種多FPGA組成FPG-A集群的架構(gòu),雖然可以達(dá)到較高的吞吐率以及很高的計(jì)算能力,但由于需要多個(gè)FPGA平臺(tái)協(xié)作完成,不適用于邊緣計(jì)算的應(yīng)用場(chǎng)景。Liu等人[13]使用Winograd算法提出了一個(gè)在FPGA上運(yùn)行的Winograd算法與脈動(dòng)陣列結(jié)合的架構(gòu),需要專(zhuān)門(mén)的訪存子系統(tǒng),設(shè)計(jì)較為復(fù)雜,并且Winograd算法只能適用于步長(zhǎng)為1的卷積,因此通用性受限。

    本文基于FPGA設(shè)計(jì)了一種面向嵌入式平臺(tái)的針對(duì)插入側(cè)分支后具有動(dòng)態(tài)深度的ResNet110網(wǎng)絡(luò)(BranchyNet-ResNet110,B-ResNet110),并從定點(diǎn)量化、并行運(yùn)算、流水線化等3個(gè)方面對(duì)模型進(jìn)行加速,針對(duì)提前退出機(jī)制設(shè)計(jì)專(zhuān)用的加速電路。在XILINX xc7z030ffg676-2芯片上對(duì)上述內(nèi)容進(jìn)行實(shí)現(xiàn),首先設(shè)計(jì)針對(duì)卷積層和池化層的通用IP,以及提前退出模塊的專(zhuān)用加速I(mǎi)P;然后將IP組成片上系統(tǒng)(System On Chip,SOC),完成B-ResNet110部署;最后分別從計(jì)算速度、資源利用率、識(shí)別準(zhǔn)確率等方面對(duì)設(shè)計(jì)進(jìn)行綜合性能分析。

    1 動(dòng)態(tài)深度神經(jīng)網(wǎng)絡(luò)

    本設(shè)計(jì)中的動(dòng)態(tài)網(wǎng)絡(luò)是帶有提前退出分支BranchyNet的神經(jīng)網(wǎng)絡(luò)。圖1給出了B-ResNet110的結(jié)構(gòu),可以看出該動(dòng)態(tài)網(wǎng)絡(luò)由主干網(wǎng)絡(luò)和兩個(gè)分支網(wǎng)絡(luò)組成。其中,主干網(wǎng)絡(luò)是ResNet110網(wǎng)絡(luò),可分為5個(gè)部分。第一部分是一個(gè)16通道卷積核尺寸3×3步長(zhǎng)(stride)為1的卷積層。第二部分至第四部分,由18個(gè)常規(guī)殘差模塊(plain residual block)組成,通道數(shù)分別為16通道,32通道,64通道。不同的是,第三部分和第四部分的第一個(gè)殘差模塊需要對(duì)輸入特征圖進(jìn)行下采樣操作。第五部分為池化層和全連接層組成的輸出層。第一個(gè)分支網(wǎng)絡(luò)(BranchyNet 1)插入在第二部分之后,第二個(gè)分支網(wǎng)絡(luò)(BranchyNet 2)插入在第三部分之后。分支網(wǎng)絡(luò)1由一個(gè)殘差模塊、一個(gè)全連接層、一個(gè)交叉熵?fù)p失函數(shù)層組成。分支網(wǎng)絡(luò)2由一個(gè)3×3卷積層、一個(gè)全連接層、一個(gè)交叉熵?fù)p失函數(shù)層組成。交叉熵?fù)p失函數(shù)如公式(1)所示:

    (1)

    圖1 B-ResNet110網(wǎng)絡(luò)結(jié)構(gòu)Fig.1 Network architecture of B-ResNet110

    (2)

    式中:zc是該出口點(diǎn)上全連接層的輸出值。

    在每一個(gè)分支的末端都有一個(gè)出口點(diǎn)(Exit),使用分類(lèi)結(jié)果的交叉熵?fù)p失作為預(yù)測(cè)置信度的度量。如果分支1分類(lèi)結(jié)果的交叉熵?fù)p失滿足置信度要求,認(rèn)為圖像經(jīng)過(guò)分支1可以進(jìn)行識(shí)別,則圖像在Exit 1預(yù)測(cè)結(jié)果后退出網(wǎng)絡(luò),不被主干網(wǎng)第三和第四部分處理;反之,則認(rèn)為該出口點(diǎn)的分類(lèi)結(jié)果不確定,樣本繼續(xù)回到網(wǎng)絡(luò)中并在分支2的Exit 2進(jìn)行預(yù)測(cè)。若Exit 2也不滿足預(yù)測(cè)要求,圖像將經(jīng)過(guò)全部網(wǎng)絡(luò)在Exit 3處進(jìn)行預(yù)測(cè)。B-ResNet110架構(gòu)可以根據(jù)輸入圖像的特征明顯程度自適應(yīng)選擇主干網(wǎng)的層數(shù),從而避免將所有圖像逐層處理,顯著減少了計(jì)算量以及正向推理時(shí)間。

    B-ResNet的網(wǎng)絡(luò)結(jié)構(gòu)中包含的卷積核尺為3×3和1×1,其中3×3的卷積核步長(zhǎng)是1和2,1×1卷積核的步長(zhǎng)為2。池化層中池化單元的尺寸為2×2。主干網(wǎng)和分支網(wǎng)絡(luò)都包含全連接層,每個(gè)分支中都包含交叉熵?fù)p失函數(shù)。對(duì)B-ResNet110而言,需要設(shè)計(jì)的硬件加速單元有通用卷積計(jì)算單元、池化計(jì)算單元、全連接層計(jì)算單元、殘差結(jié)構(gòu)的卷積輸出加法單元,以及分支網(wǎng)絡(luò)中提前退出機(jī)制計(jì)算單元。其中,提前退出機(jī)制包含的交叉熵?fù)p失函數(shù)較為復(fù)雜,需要根據(jù)推理階段的實(shí)際需求對(duì)其函數(shù)進(jìn)行簡(jiǎn)化。

    2 硬件加速設(shè)計(jì)

    2.1 定點(diǎn)量化設(shè)計(jì)

    在FPGA中,完成不同類(lèi)型的數(shù)據(jù)運(yùn)算所消耗的資源和時(shí)間是不同的。表1分別列舉了FPGA中16 b定點(diǎn)數(shù)和浮點(diǎn)數(shù)完成加法、減法、乘法、指數(shù)運(yùn)算、對(duì)數(shù)運(yùn)算所需要的DSP處理單元的個(gè)數(shù),以及完成上述運(yùn)算所需要的時(shí)鐘周期。從數(shù)據(jù)中可以看出,在FPGA中定點(diǎn)數(shù)的運(yùn)算效率以及資源利用率遠(yuǎn)大于浮點(diǎn)數(shù)。

    表1 FPGA浮點(diǎn)數(shù)和定點(diǎn)數(shù)運(yùn)算時(shí)間以及所耗資源對(duì)比Tab.1 Comparison of FPGA floating-point,fixed-point operation time and resource consumption

    因此,為了使FPGA在運(yùn)行神經(jīng)網(wǎng)絡(luò)時(shí)的具有更高的效率,可根據(jù)深度神經(jīng)網(wǎng)絡(luò)包含足夠多的冗余信息,并且裁剪這些冗余信息不會(huì)明顯導(dǎo)致網(wǎng)絡(luò)準(zhǔn)確率下降的特性,對(duì)深度神經(jīng)網(wǎng)絡(luò)權(quán)重和偏執(zhí)中浮點(diǎn)數(shù)據(jù)類(lèi)型進(jìn)行16 b定點(diǎn)數(shù)量化,量化完成后的定點(diǎn)數(shù)格式如圖2所示。

    圖2 16 b定點(diǎn)數(shù)格式Fig.2 Format of 16 b fixed-point number

    定點(diǎn)數(shù)首位是1 b的符號(hào)表示位,符號(hào)位后是(15-fl)位的整數(shù)部分,最后是fl位的小數(shù)部分。因此,量化后的16 b定點(diǎn)數(shù)可由公式(3)表示:

    (3)

    2.2 卷積計(jì)算單元設(shè)計(jì)

    雖然FPGA可以將卷積并行運(yùn)算,但是卷積神經(jīng)網(wǎng)絡(luò)的計(jì)算量較大,將卷積層的計(jì)算在FPGA中完全展開(kāi)十分困難。以B-ResNet110為例,其中主干網(wǎng)絡(luò)的卷積層中包含的乘積累加運(yùn)算(Multiply Accumulate,MAC)操作總數(shù)超過(guò)1.3億次,單層網(wǎng)絡(luò)所需最少M(fèi)AC運(yùn)算也有2.36×106次之多,這遠(yuǎn)超過(guò)適用于邊緣部署的FPGA內(nèi)部DSP處理單元的個(gè)數(shù)。因此,卷積神經(jīng)網(wǎng)絡(luò)部署在FPGA當(dāng)中時(shí),需要將卷積神經(jīng)網(wǎng)絡(luò)的卷積運(yùn)算拆分成更小的循環(huán),才能在FPGA的計(jì)算核心中執(zhí)行。卷積計(jì)算循環(huán)分塊如圖3所示,卷積計(jì)算輸入為N個(gè)的尺寸H×L的特征圖,卷積核為M個(gè)N×K×K的三維卷積核,輸出特征圖的尺寸為M×R×C。將輸入特征圖和輸出特征圖按通道數(shù)、長(zhǎng)、寬劃分成Tn×Th×Tl和Tm×Tr×Tc的塊,對(duì)應(yīng)的卷積核被劃分為T(mén)n×Tm×K×K塊。其中,Th和Tl與Tr和Tc的對(duì)應(yīng)關(guān)系為T(mén)h=(Tr-1)S+K,Th=(Tc-1)S+K,S和K分別為卷積核的步長(zhǎng)和尺寸。經(jīng)過(guò)分塊之后,卷積計(jì)算會(huì)從原來(lái)的4層循環(huán)轉(zhuǎn)換成圖3中的8層循環(huán)。這8層循環(huán)中黑色方框外部的4層循環(huán)描述的是分塊數(shù)據(jù)調(diào)度方法,內(nèi)部的4層表示的是FPGA計(jì)算核心中進(jìn)行的分塊卷積計(jì)算。

    圖3 卷積循環(huán)分塊Fig.3 Convolutional loop partitioning

    分塊之后特征圖與卷積核之間的卷積運(yùn)算本質(zhì)上來(lái)說(shuō)仍是一個(gè)三維的MAC操作。每一個(gè)輸入的特征圖都有與之相對(duì)應(yīng)的卷積核,各個(gè)特征圖只與其對(duì)應(yīng)的多個(gè)卷積核進(jìn)行卷積運(yùn)算,不同通道特征圖對(duì)應(yīng)卷積核之間不存在依賴關(guān)系。同通道卷積核共享輸入的特征圖,但這些卷積核的計(jì)算結(jié)果之間不進(jìn)行累加操作,同通道的不同卷積核之間無(wú)依賴關(guān)系。因此,在計(jì)算處理單元(Processing Element,PE)陣列設(shè)計(jì)時(shí),可以將圖3紅色框中的兩層無(wú)依賴關(guān)系的循環(huán)并行運(yùn)算,提高計(jì)算效率。

    卷積計(jì)算單元的硬件設(shè)計(jì)如圖4所示,由AXI Lite總線傳入控制信息,AXI總線傳輸權(quán)重?cái)?shù)據(jù)和特征圖。卷積計(jì)算單元內(nèi)部由計(jì)算模塊、數(shù)據(jù)調(diào)度模塊以及片上緩存組成。計(jì)算模塊中的PE計(jì)算對(duì)象是輸入通道分塊Tn展開(kāi)(Unroll)后的卷積運(yùn)算,并行度為n。m個(gè)PE組成PE陣列,對(duì)輸入通道不同卷積核并行展開(kāi)運(yùn)算,并行度為m。由圖3外部循環(huán)中的循環(huán)M可以看出,每計(jì)算出一個(gè)Tm都需要循環(huán)N完整循環(huán)一次。因此,數(shù)據(jù)調(diào)度模塊需要對(duì)外部數(shù)據(jù)反復(fù)進(jìn)行讀取,并且復(fù)用輸出數(shù)據(jù)。為了減少數(shù)據(jù)傳輸帶來(lái)的延遲,采用粗粒度流水線,即雙緩存乒乓操作,對(duì)數(shù)據(jù)進(jìn)行傳輸。這種方法可以在一組緩存中的數(shù)據(jù)參與計(jì)算的過(guò)程中,并行加載下一組輸入數(shù)據(jù)以及緩存下一組輸出數(shù)據(jù)。該方法既可以保證卷積計(jì)算對(duì)緩存數(shù)據(jù)亂序訪問(wèn)時(shí)不受輸入數(shù)據(jù)影響,又可以減少數(shù)據(jù)傳輸?shù)臅r(shí)間,從而減少訪存帶來(lái)的推理延遲。對(duì)于偏置權(quán)重,在第一次加載數(shù)據(jù)時(shí)與其他數(shù)據(jù)并行加載到輸出緩存,將偏置值與第一次分塊卷積輸出結(jié)果相加。這種偏置處理方法既能代替輸出緩存的復(fù)位操作從而節(jié)約復(fù)位時(shí)間,又能節(jié)省卷積運(yùn)算完成后再加偏置帶來(lái)的計(jì)算時(shí)間。若沒(méi)有偏置,則加載數(shù)據(jù)“0”,復(fù)位輸出緩存。

    圖4 卷積計(jì)算單元Fig.4 Convolutional computing unit

    2.3 池化計(jì)算單元設(shè)計(jì)

    池化單元的設(shè)計(jì)與卷積設(shè)計(jì)相比較為簡(jiǎn)單。池化運(yùn)算單元不需要加載權(quán)重,不同特征圖之間的池化計(jì)算得出的數(shù)據(jù)沒(méi)有依賴關(guān)系,計(jì)算量小,輸入通道數(shù)等于輸出通道數(shù),輸出的部分?jǐn)?shù)據(jù)不需要復(fù)用,因此池化模塊只需將特征圖按通道分批加載到片上計(jì)算后按序輸出即可。平均池化與最大池化都采用2×2的滑窗,因此最大池化和平均池化可以復(fù)用同一個(gè)片上緩存區(qū)域從而減少資源的占用。池化單元的設(shè)計(jì)如圖5所示。

    圖5 池化模塊Fig.5 Pooling module

    池化運(yùn)算單元的數(shù)據(jù)輸入方式與卷積運(yùn)算單元一樣,均由AXI總線將劃分好的特征圖輸入并且采用粗粒度流水線減少數(shù)據(jù)傳輸帶來(lái)的延遲。傳入的特征圖通過(guò)配置(config)信號(hào),選擇最大池化操作或者平均池化操作。平均操作池化首先將2×2的卷積窗的第一行的2個(gè)數(shù)據(jù)進(jìn)行大小比較,存入寄存器,然后將第二行的2個(gè)數(shù)據(jù)輸入進(jìn)行比較,最后將兩次輸出結(jié)果中最大值作為最大池化操作的輸出;平均池化計(jì)算將4個(gè)數(shù)據(jù)通過(guò)加法樹(shù)并行相加之后取平均值。池化得出的部分結(jié)果存入輸出緩存,待整張?zhí)卣鲌D計(jì)算完成后將其結(jié)果傳輸?shù)狡獯鎯?chǔ)。

    2.4 全連接層與卷積輸出加法設(shè)計(jì)

    全連接層與卷積輸出加法層,只涉及到順序的加法運(yùn)算和乘法運(yùn)算,不需要復(fù)雜的內(nèi)存訪問(wèn),因此對(duì)于全連接層與卷積輸出加法層,仍采用雙緩存片上數(shù)據(jù)存儲(chǔ)方式,以及粗粒度流水線加載方式。輸入的數(shù)據(jù)采用加法樹(shù)以及乘法器級(jí)聯(lián)加法樹(shù)的方法并行計(jì)算,與卷積層和池化層的設(shè)計(jì)方法相同,這里不再贅述。

    2.5 提前退出模塊設(shè)計(jì)實(shí)現(xiàn)

    在動(dòng)態(tài)深度神經(jīng)網(wǎng)絡(luò)中提前退出模塊是核心部分,然而提前退出模塊中包含的Softmax函數(shù)以及交叉熵?fù)p失函數(shù)等運(yùn)算通常運(yùn)用在訓(xùn)練時(shí)的反向傳播中。該運(yùn)算所包含的多次除法運(yùn)算、e指數(shù)運(yùn)算以及對(duì)數(shù)運(yùn)算,在部署過(guò)程中會(huì)消耗大量的硬件資源并且?guī)?lái)過(guò)高延遲。如果用全連接層輸出的最大值等指標(biāo)作為置信度測(cè)量指標(biāo),雖然能減少計(jì)算量,但精度非常低,很容易造成識(shí)別結(jié)果錯(cuò)誤。因此,可以將交叉熵?fù)p失判斷置信度與全連接層的輸出的最大值相結(jié)合,改進(jìn)交叉熵?fù)p失函數(shù)使其更符合硬件實(shí)現(xiàn)的需求。

    2.5.1 交叉熵函數(shù)的數(shù)學(xué)變換

    公式(1)中的yc代表的標(biāo)簽的值,該值是“0”或“1”,并且由yc對(duì)應(yīng)Softmax函數(shù)的輸出決定,Softmax函數(shù)輸出最大值對(duì)應(yīng)的yc的標(biāo)簽為“1”,其他為“0”。由公式(2)可以得出,Softmax函數(shù)的輸出值的大小由全連接成層的輸出大小決定。因此,結(jié)合公式(1)和公式(2),在部署階段可以用全連接層的輸出值代替Softmax函數(shù)的輸出值對(duì)標(biāo)簽值進(jìn)行判斷。根據(jù)判斷結(jié)果,對(duì)交叉熵?fù)p失簡(jiǎn)化如公式(4)所示,因?yàn)闃?biāo)簽為“0”的類(lèi)別對(duì)應(yīng)的Softmax其系數(shù)為“0”,不需要計(jì)算,所以只需要計(jì)算標(biāo)簽為“1”的類(lèi)別對(duì)應(yīng)的Softmax值,根據(jù)對(duì)數(shù)函數(shù)性質(zhì),將除法變成減法。這種變換方法可以減少C-1次Softmax運(yùn)算,并且去掉所有的除法運(yùn)算。該變換將較大提升推理速度。

    (4)

    當(dāng)z增加時(shí),對(duì)z取e指數(shù)運(yùn)算得出的值可能超出16 b定點(diǎn)數(shù)所能表示的范圍,故16 b定點(diǎn)數(shù)并不能充分地表示該計(jì)算結(jié)果,導(dǎo)致計(jì)算置信度時(shí)有誤差。因此,可以通過(guò)公式(5)的變換,將z取e指數(shù)運(yùn)算變成z-zmax取e指數(shù)運(yùn)算,將e指數(shù)運(yùn)算的計(jì)算結(jié)果約束在(0,1)范圍內(nèi)。

    (5)

    由于在部署的階段,zmax是最終的預(yù)測(cè)結(jié)果,z=zmax,因此交叉熵?fù)p失函數(shù)還可以進(jìn)一步轉(zhuǎn)化為公式(6)以減少計(jì)算量。

    (6)

    2.5.2 提前退出模塊硬件實(shí)現(xiàn)

    如圖6所示,交叉熵?fù)p失函數(shù)硬件實(shí)現(xiàn)的過(guò)程中,充分利用FPGA可以進(jìn)行并行運(yùn)算的特性,將交叉熵?fù)p失函數(shù)涉及到的加法運(yùn)算、比較運(yùn)算并行展開(kāi),然后通過(guò)比較樹(shù)以及加法樹(shù)等結(jié)構(gòu)將并行計(jì)算結(jié)果匯聚到一起,完成對(duì)交叉熵?fù)p失函數(shù)的加速計(jì)算。交叉熵?fù)p失函數(shù)的輸出與閾值的比較結(jié)果作為提前退出的判斷條件。

    圖6 提前退出模塊Fig.6 Exit in advance module

    3 設(shè)計(jì)與結(jié)果分析

    3.1 實(shí)驗(yàn)環(huán)境

    本文硬件系統(tǒng)設(shè)計(jì)采用的是Xilinx公司ARM+FPGA架構(gòu)的 Zynq xc7z030ffg676-2芯片。搭建硬件系統(tǒng)時(shí)的開(kāi)發(fā)環(huán)境是Vivado 2018.3和Vivado HLS 2018.3。為了與FPGA進(jìn)行比較,在Inter i7-5960x CPU和NVIDIA TITAN X GPU平臺(tái)上使用Ubuntu 16.04操作系統(tǒng)以及Chainer 5.3.0框架,實(shí)現(xiàn)了與FPGA完全一致的B-ResNet110模型。實(shí)驗(yàn)測(cè)試采用的數(shù)據(jù)集是CIFAR-10數(shù)據(jù)集。

    3.2 硬件系統(tǒng)設(shè)計(jì)

    SOC數(shù)據(jù)流如圖7所示,卷積(Conv)計(jì)算單元、池化(Pool)計(jì)算單元、提前退出(Exit)計(jì)算單元、全連接層(FC)計(jì)算單元,卷積輸出加法(Adder)計(jì)算單元的輸入輸出均通過(guò)AXI 4總線與ARM核的高速?gòu)臋C(jī)接口(Slave HP)相連。當(dāng)SOC工作時(shí),ARM作為主機(jī)按照B-ResNet的計(jì)算要求,通過(guò)低速主機(jī)口(Master GP)使用輕量化AXI 4總線(AXI 4 Lite)發(fā)送控制信號(hào)給各個(gè)計(jì)算單元。各個(gè)計(jì)算單元收到信號(hào)后作為主機(jī)(Master),借助Slave HP從DDR3中讀取特征圖信息和權(quán)重信息,計(jì)算完成后再寫(xiě)回到DDR3。

    圖7 SOC數(shù)據(jù)流圖Fig.7 SOC data stream

    根據(jù)圖7所示的數(shù)據(jù)流圖,在Vivado中設(shè)計(jì)搭建的SOC如圖8所示。其中,計(jì)算單元中的m_axi是主機(jī)接口通過(guò)AXI連接模塊(AXI SmartConnect)與AMR核的高速?gòu)臋C(jī)接口S_AXI_HP相連,傳輸數(shù)據(jù)信號(hào),s_axi_CTRL與AMR核的M_AXI_GP相連接收控制信號(hào)。

    圖8 SOC設(shè)計(jì)Fig.8 SOC desgin

    硬件設(shè)計(jì)結(jié)果如表2所示,該SOC工作在100 MHz下,功耗為2.853 W,使用了70%左右的LUT和50%DSP的處理單元,達(dá)到了最高2.78×104MOPS(Million Operations per Second)的MAC運(yùn)算,1.25 MOPS的e指數(shù)運(yùn)算,以及0.125 MOPS的自然對(duì)數(shù)運(yùn)算。

    表2 SOC性能參數(shù)Tab.2 Performance parameters of SOC

    3.3 實(shí)驗(yàn)過(guò)程與結(jié)果分析

    神經(jīng)網(wǎng)絡(luò)模型進(jìn)行定點(diǎn)數(shù)量化前,需要在軟件端將模型權(quán)重中浮點(diǎn)數(shù)轉(zhuǎn)化為定點(diǎn)數(shù),并對(duì)比不同類(lèi)型定點(diǎn)數(shù)對(duì)應(yīng)的準(zhǔn)確率,根據(jù)對(duì)比結(jié)果將準(zhǔn)確率最高的定點(diǎn)數(shù)類(lèi)型進(jìn)行量化。表3給出了對(duì)神經(jīng)網(wǎng)絡(luò)在不同定點(diǎn)數(shù)下的準(zhǔn)確率對(duì)比,在數(shù)據(jù)類(lèi)型中用fixed來(lái)表示定點(diǎn)數(shù),m代表定點(diǎn)數(shù)的位寬,為16 b,fl代表mb定點(diǎn)數(shù)中小數(shù)的位數(shù)。根據(jù)不同類(lèi)型定點(diǎn)數(shù)對(duì)應(yīng)的準(zhǔn)確率可以看出,當(dāng)定點(diǎn)數(shù)的小數(shù)位數(shù)為7 b時(shí),準(zhǔn)確率明顯低于原始網(wǎng)絡(luò);定點(diǎn)數(shù)的小數(shù)位數(shù)為8 b和9 b時(shí),準(zhǔn)確率雖有所提高但誤差仍較大;當(dāng)小數(shù)點(diǎn)位數(shù)為10 b時(shí),準(zhǔn)確率有著明顯提升,與原網(wǎng)絡(luò)的誤差不到0.01%;而小數(shù)點(diǎn)位數(shù)從10 b上升到12 b的過(guò)程中準(zhǔn)確率卻有所下降。因此,本設(shè)計(jì)將fixed<16,10>的量化結(jié)果作為加速器的整體數(shù)據(jù)類(lèi)型。

    表3 量化結(jié)果對(duì)比Tab.3 Comparison of quantitative results

    定點(diǎn)數(shù)量化后的權(quán)重將加載到外部存儲(chǔ)DDR3,使用ARM控制FPGA中的計(jì)算IP實(shí)現(xiàn)B-ResNet110功能,對(duì)測(cè)試數(shù)據(jù)集進(jìn)行識(shí)別。測(cè)試集圖片在每個(gè)出口點(diǎn)的退出數(shù)量,以及每張圖片的平均運(yùn)行時(shí)間等由ARM統(tǒng)計(jì)并且通過(guò)串口傳輸?shù)缴衔粰C(jī)。

    表4中展示了在FPGA中實(shí)現(xiàn)的B-ResNet110對(duì)CIFAR-10數(shù)據(jù)集10 000張測(cè)試集的測(cè)試結(jié)果,以及CPU和GPU中B-ResNet110和ResNet110的測(cè)試結(jié)果。表中給出了網(wǎng)絡(luò)在每個(gè)出口點(diǎn)輸出圖片的數(shù)量占測(cè)試集總數(shù)量的百分比,以及處理一張圖片所用的平均時(shí)間。在退出結(jié)果誤差不大的情況下,在時(shí)間方面FPGA相較于在CPU平臺(tái)運(yùn)行的B-ResNet110,加速比達(dá)到287%;對(duì)于CPU未加入提前退出機(jī)制的普通ResNet110,平均推理時(shí)間節(jié)省了80%。相較于NVIDIA TITAN X GPU運(yùn)行的B-ResNet110,加速比達(dá)到145%;對(duì)于GPU中未加入提前退出機(jī)制的普通ResNet110,平均推理時(shí)間節(jié)省了63.9%。

    表4 FPGA與CPU部署性能對(duì)比Tab.4 Comparison of FPGA and CPU deployment performance

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

    本文從網(wǎng)絡(luò)模型定點(diǎn)壓縮,并行化、粗粒度流水線以及數(shù)學(xué)優(yōu)化等角度完成了對(duì)卷積、池化、全連接和提前退出判斷模塊的IP設(shè)計(jì),以及對(duì)B-Resnst-110網(wǎng)絡(luò)的硬件實(shí)現(xiàn)。在Zynq xc7z030ffg676-2芯片搭建SOC系統(tǒng),從消耗資源、計(jì)算能力、計(jì)算延遲等角度對(duì)硬件系統(tǒng)進(jìn)行了分析。最終該系統(tǒng)獲得了2.78×104MOPS的最高算力,平均幀率達(dá)到了39.12 FPS(Frame per Second)的正向推理速度,系統(tǒng)功耗僅為2.853 W。

    動(dòng)態(tài)深度網(wǎng)絡(luò)可以有效減少不必要的計(jì)算量,減輕神經(jīng)網(wǎng)絡(luò)在邊緣部署時(shí)給邊緣計(jì)算平臺(tái)帶來(lái)的壓力。未來(lái)將會(huì)繼續(xù)探索其他動(dòng)態(tài)網(wǎng)絡(luò)在邊緣高效部署的方法。

    猜你喜歡
    池化交叉運(yùn)算
    基于緊湊型雙線性網(wǎng)絡(luò)的野生茵識(shí)別方法研究
    基于Sobel算子的池化算法設(shè)計(jì)
    重視運(yùn)算與推理,解決數(shù)列求和題
    卷積神經(jīng)網(wǎng)絡(luò)中的自適應(yīng)加權(quán)池化
    有趣的運(yùn)算
    “六法”巧解分式方程
    基于卷積神經(jīng)網(wǎng)絡(luò)和池化算法的表情識(shí)別研究
    “整式的乘法與因式分解”知識(shí)歸納
    撥云去“誤”學(xué)乘除運(yùn)算
    連一連
    周宁县| 会昌县| 襄樊市| 蒲江县| 犍为县| 开平市| 贞丰县| 秭归县| 虹口区| 迭部县| 长宁县| 浦江县| 敦煌市| 江孜县| 弥勒县| 双桥区| 扎囊县| 桦南县| 山东| 虞城县| 文山县| 昆山市| 海林市| 磴口县| 大荔县| 漠河县| 内江市| 新巴尔虎右旗| 马边| 丁青县| 新野县| 磐石市| 都兰县| 广南县| 五家渠市| 肇庆市| 泰安市| 东乌| 宝应县| 娄底市| 土默特左旗|