謝曉燕,杜卓林+,胡傳瞻,楊 坤,王安琪
(1.西安郵電大學(xué) 計(jì)算機(jī)學(xué)院,陜西 西安 710121;2.西安郵電大學(xué) 電子工程學(xué)院,陜西 西安 710121)
隨著CNN在人工智能領(lǐng)域的廣泛應(yīng)用,層數(shù)越深、精度越高的深度卷積神經(jīng)網(wǎng)絡(luò)(deep convolutional neural network,DCNN)成為發(fā)展趨勢(shì)。然而,DCNN在訓(xùn)練過(guò)程中會(huì)產(chǎn)生大量的中間數(shù)據(jù),過(guò)擬合幾率也會(huì)增加,計(jì)算復(fù)雜度隨之攀升[1,2],使得CPU的時(shí)間成本和GPU的功耗成本成為其部署在資源受限的嵌入式設(shè)備上的主要瓶頸。近年來(lái),由于輕量級(jí)網(wǎng)絡(luò)架構(gòu)的涌現(xiàn),學(xué)術(shù)界一直嘗試在保證DCNN計(jì)算精度的前提下降低網(wǎng)絡(luò)的復(fù)雜度。例如,Christian Szegedy提出了GoogLeNet[3],參數(shù)量減少到了6.8 M,并采用平均池化代替全連接層,將網(wǎng)絡(luò)準(zhǔn)確率提高了0.6%,增強(qiáng)了網(wǎng)絡(luò)的表達(dá)能力,從而使得在有限資源的硬件平臺(tái)上實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)成為可能。通用處理器技術(shù)成熟、編程模型完善、人機(jī)接口友好,但隨著深度學(xué)習(xí)網(wǎng)絡(luò)模型的運(yùn)算量越來(lái)越大,通用處理器對(duì)向量運(yùn)算支持程度低、不支持張量運(yùn)算等不足,與深度學(xué)習(xí)在計(jì)算效率、能量消耗和響應(yīng)延遲上的需求日漸不相適應(yīng),執(zhí)行效率偏低,運(yùn)算功耗大。專用處理器在計(jì)算一些特定任務(wù)時(shí)很快,但是無(wú)法計(jì)算其之外的其它應(yīng)用?,F(xiàn)場(chǎng)可編程門(mén)陣列(field programmable gate array,F(xiàn)PGA)具有規(guī)則的并行結(jié)構(gòu)且可以靈活配置,十分利于CNN硬件加速的研究與開(kāi)發(fā)??芍貥?gòu)陣列處理器作為一種高效的體系結(jié)構(gòu),兼顧專用硬件的高效性和通用處理器的靈活性,本文基于項(xiàng)目團(tuán)隊(duì)提出的動(dòng)態(tài)可重構(gòu)陣列處理器(DPR-CODEC)來(lái)研究Inception網(wǎng)絡(luò)的并行重構(gòu)計(jì)算模型。通過(guò)分析網(wǎng)絡(luò)中潛在并行性,挖掘卷積、池化等操作之間的數(shù)據(jù)依賴關(guān)系,提出了一種重疊窗口的數(shù)據(jù)組織方案,從而降低了片外存儲(chǔ)訪問(wèn)開(kāi)銷。基于4×4 PE陣列,設(shè)計(jì)了同時(shí)支持1×1、3×3、5×5大小卷積核的28×28和32×32圖像的重構(gòu)并行計(jì)算方案。實(shí)驗(yàn)結(jié)果表明,在連接到BEE4平臺(tái)的Virtex-6現(xiàn)場(chǎng)可編程門(mén)陣列上,提出的可重構(gòu)方案在資源利用率和算法運(yùn)算效率上都有了很大的提高。
在Inception Module的多個(gè)版本中Incepetion V1是組成GoogLeNet[3]的主要模塊,如圖1所示。
圖1 Inception結(jié)構(gòu)
Inception結(jié)構(gòu)作為一個(gè)規(guī)格化的模塊網(wǎng)絡(luò),經(jīng)過(guò)反復(fù)堆疊構(gòu)建大規(guī)模網(wǎng)絡(luò),在該結(jié)構(gòu)中,不同大小的卷積核作用在同一輸入圖上。Inception V1使用較少的參數(shù)就可以達(dá)到傳統(tǒng)模型中更深層數(shù)、更強(qiáng)表達(dá)能力的效果。通過(guò)采用全局平均池化層來(lái)取代了全連接層,大大降低了中間計(jì)算的參數(shù)量(在傳統(tǒng)CNN網(wǎng)絡(luò)中全連接層參數(shù)量幾乎占到90%),使得模型訓(xùn)練更快并減輕了過(guò)擬合。此外,Inception Module提高了參數(shù)的利用效率,一方面使用1×1的卷積替換巧妙地實(shí)現(xiàn)了降維,另一方面可以在多個(gè)尺寸上同時(shí)進(jìn)行卷積及聚合。通過(guò)構(gòu)建密集的塊結(jié)構(gòu)來(lái)近似最優(yōu)的稀疏結(jié)構(gòu)達(dá)到了提高性能而又不大量增加計(jì)算量的目的。
由于FPGA的硬件資源有限,通常很難將整個(gè)DCNN映射到單個(gè)芯片上。因此大多數(shù)基于FPGA的實(shí)現(xiàn)都是采用基于層間串行執(zhí)行的逐層映射[1,4,5]方案。這類方案通常將FPGA資源劃分為多個(gè)層處理器(convolutional layer processors,CLPs),將不同卷積層進(jìn)行分組并使用CLP進(jìn)行加速。其主要問(wèn)題是所有層使用同一種計(jì)算模式進(jìn)行加速,如果網(wǎng)絡(luò)中不同卷積核的數(shù)據(jù)局部性差異較大,如Inception架構(gòu),它們的資源需求將不能同時(shí)得到滿足,導(dǎo)致資源利用不足以及訪存帶寬等問(wèn)題。為提高資源利用率,文獻(xiàn)[6]利用聚類思想將網(wǎng)絡(luò)層進(jìn)行分類并在FPGA不同分區(qū)中對(duì)不同類進(jìn)行加速。文獻(xiàn)[7]提出的Escher模型利用片上緩沖器最大程度地降低總體加速器帶寬需求,但增加了各層的資源消耗。文獻(xiàn)[8]使用高層次綜合進(jìn)行自定義DCNN模型加速,但其成本較高,不利于通用模型加速。文獻(xiàn)[9]針對(duì)傳統(tǒng)DCNN設(shè)計(jì)了一個(gè)可重構(gòu)通用體系架構(gòu)。盡管取得了進(jìn)步,但這些加速器仍然缺乏對(duì)全連接層和卷積層之間通信的優(yōu)化?;谒惴▋?yōu)化后設(shè)計(jì)的專用電路[10-12],雖然可以提高效率,但又會(huì)造成新的硬件開(kāi)銷并缺乏靈活性。因此,考慮到通用硬件及專用硬件的優(yōu)缺點(diǎn),采用項(xiàng)目組提供的可重構(gòu)陣列處理器作為開(kāi)發(fā)平臺(tái)對(duì)神經(jīng)網(wǎng)絡(luò)中的Inception架構(gòu)進(jìn)行加速。
卷積層的基本計(jì)算模式是圖像-內(nèi)核的卷積,計(jì)算公式請(qǐng)參見(jiàn)文獻(xiàn)[8]。卷積神經(jīng)網(wǎng)絡(luò)算法底層處理的數(shù)據(jù)量較大,但運(yùn)算過(guò)程相對(duì)簡(jiǎn)單。卷積操作會(huì)對(duì)輸入圖像進(jìn)行高度抽象以便提取出圖像特征,即特征圖(feature map)。對(duì)于卷積操作來(lái)說(shuō),原圖中所有像素點(diǎn)都進(jìn)行相同的卷積運(yùn)算,此過(guò)程會(huì)耗費(fèi)大量的資源。因此,結(jié)合可進(jìn)行同樣卷積運(yùn)算的像素點(diǎn)和卷積計(jì)算內(nèi)部具有的并行特性,卷積計(jì)算模式適用于硬件加速。例如,卷積層接收n個(gè)特征映射圖作為輸入,并生成m個(gè)輸出特征圖。如算法1所示,卷積層的運(yùn)算過(guò)程包含四層循環(huán)。神經(jīng)元所連接到的上層特征圖和大小為k×k的卷積核進(jìn)行卷積操作的過(guò)程中,由于多個(gè)無(wú)數(shù)據(jù)相關(guān)性的卷積核可以在同一幅特征圖中做卷積運(yùn)算,生成多個(gè)卷積輸出通道,因此可以分別采用卷積窗口內(nèi)部并行、輸入特征圖內(nèi)部卷積窗口間并行、輸入特征圖間并行和輸出特征圖間并行等設(shè)計(jì)對(duì)k×k個(gè)乘累加操作并行處理[13]。
算法1:卷積算法
輸出:卷積計(jì)算后的第l層網(wǎng)絡(luò):xl
(1)卷積計(jì)算
(2)whilei≤ndo
(3)LOOP1:遍歷m張輸出特征圖;
(4)LOOP2:遍歷n張輸入特征圖;
(5) LOOP3:卷積窗口在XI×YI大小的輸入特征圖中滑動(dòng);
(6) LOOP4:一個(gè)卷積窗口內(nèi)k×k次乘累加操作;
(7)endwhile
(8)returnxl
在卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行前向傳播時(shí),浮點(diǎn)乘累加運(yùn)算產(chǎn)生的中間結(jié)果需要耗費(fèi)大量?jī)?nèi)存,使用傳統(tǒng)的CPU或GPU加速時(shí)往往不能充分挖掘其內(nèi)部并行性。
具有規(guī)則結(jié)構(gòu)的FPGA由于其低能耗、高性能以及可編程的特性,有利于上述4種并行計(jì)算的硬件加速。然而,伴隨著對(duì)卷積層數(shù)和計(jì)算精度的支持,需要計(jì)算資源也會(huì)成倍增加,而且在加速過(guò)程中還會(huì)產(chǎn)生大量的中間數(shù)據(jù)。因此,在有限的資源中同時(shí)滿足計(jì)算和存儲(chǔ)的密集需求一直是AI芯片設(shè)計(jì)的痛點(diǎn)。可重構(gòu)陣列處理器使用重構(gòu)機(jī)制可以靈活配置PE(processing element)的邏輯功能和PE間的數(shù)據(jù)通路,既具有通用處理器的編程靈活性,又具有專用硬件的高效性。
本文基于項(xiàng)目組提出的一種可重構(gòu)陣列處理器[14],設(shè)計(jì)了一種可重構(gòu)的卷積神經(jīng)網(wǎng)絡(luò)陣列結(jié)構(gòu),如圖2所示。包括指令、全局控制器、分層編程網(wǎng)絡(luò)和PE陣列的一部分(僅顯示4×4PE)。預(yù)處理的圖像存儲(chǔ)在外部存儲(chǔ)器中。PE間通過(guò)4個(gè)共享寄存器(RE,RS,RW,RN)與相鄰東、南、西、北4個(gè)方向的PE通信。每個(gè)PE都可以直接訪問(wèn)相鄰PE的這些寄存器。PE陣列的可重構(gòu)功能通過(guò)加載預(yù)先存儲(chǔ)在指令RAM中固定指令或由全局控制器傳遞并存儲(chǔ)在RAM中的實(shí)時(shí)指令實(shí)現(xiàn)。在運(yùn)行時(shí),可以根據(jù)不同層的計(jì)算需求靈活調(diào)用相對(duì)應(yīng)的計(jì)算方式使PE陣列可以運(yùn)行在數(shù)據(jù)流模式下,從而使電路兼具靈活、硬件資源可復(fù)用、并行計(jì)算、低功耗等優(yōu)良性能。
全局控制器主要用于指令調(diào)用、指令廣播以及收集狀態(tài)信息。上層是指令存儲(chǔ)器,下層是陣列處理器。主要功能是在主機(jī)接口和陣列處理器之間形成H樹(shù)型的配置網(wǎng)絡(luò)HCN,如圖2中的加粗線所示。為了獲得簡(jiǎn)單的尋址,可以逐步減少尋址過(guò)程的位寬度,并確保每個(gè)指令同時(shí)到達(dá)PE。HCN旨在通過(guò)H樹(shù)網(wǎng)絡(luò)加載指令。主處理器負(fù)責(zé)將任務(wù)指令和待處理的數(shù)據(jù)地址發(fā)送到全局控制器,全局控制器通過(guò)HCN將接收到的指令分配給不同的計(jì)算PE。HCN是全局控制器和PE陣列之間的數(shù)據(jù)傳輸路徑。全局控制器從指令存儲(chǔ)器接收總線信息。PE通過(guò)數(shù)據(jù)輸入存儲(chǔ)器(DIM)將數(shù)據(jù)從外部存儲(chǔ)器DDR3加載到本地?cái)?shù)據(jù)存儲(chǔ)器中,計(jì)算掩碼的類型并將其反饋給全局控制器。
圖2 可重構(gòu)的卷積網(wǎng)絡(luò)陣列結(jié)構(gòu)
針對(duì)Inception模塊的特點(diǎn),在映射過(guò)程中利用重構(gòu)機(jī)制對(duì)不同大小的卷積操作和池化操作進(jìn)行計(jì)算。PE陣列的計(jì)算功能重構(gòu)切換設(shè)計(jì)如圖2所示,使用片外存儲(chǔ)DIM對(duì)原始數(shù)據(jù)進(jìn)行存儲(chǔ),DOM則對(duì)處理的中間結(jié)果數(shù)據(jù)進(jìn)行存儲(chǔ)。PE中事先存儲(chǔ)好不同操作的指令,控制器通過(guò)下發(fā)CALL指令對(duì)其功能進(jìn)行配置。首先分析算法,并對(duì)輸入數(shù)據(jù)進(jìn)行重新組織,減少對(duì)外存的訪問(wèn)次數(shù),以提高數(shù)據(jù)利用率;其次將不同的計(jì)算模式配置在計(jì)算單元的指令存儲(chǔ)中,在進(jìn)行計(jì)算的過(guò)程中,根據(jù)不同標(biāo)志位下發(fā)不同配置,執(zhí)行不同大小的卷積計(jì)算。當(dāng)一種配置完成計(jì)算時(shí),由存數(shù)PE發(fā)送握手信號(hào)給PE00,進(jìn)行下一塊數(shù)據(jù)下發(fā),其中每種配置模式內(nèi)部并行執(zhí)行。
使用該結(jié)構(gòu)就可以利用不同大小卷積操作的相似性和特征圖之間數(shù)據(jù)無(wú)關(guān)性把3×3和5×5大小的卷積核初始化在不同的配置存儲(chǔ)中,通過(guò)在同一個(gè)PEG中調(diào)用不同的配置,實(shí)現(xiàn)對(duì)不同大小的卷積核計(jì)算的切換,就可以大大減少卷積計(jì)算所占用的資源。圖3表示重構(gòu)切換流程圖,當(dāng)PE內(nèi)部在進(jìn)行功能重構(gòu)計(jì)算時(shí),控制器只需要發(fā)送任務(wù)指令和必要的數(shù)據(jù)或數(shù)據(jù)存儲(chǔ)地址,進(jìn)而控制指令傳輸網(wǎng)絡(luò)分配指令給不同PE執(zhí)行相應(yīng)的操作。針對(duì)不同的卷積核大小設(shè)置不同的計(jì)算配置,默認(rèn)配置為PC1,執(zhí)行3×3卷積計(jì)算,在計(jì)算過(guò)程中將PE進(jìn)行分組并行執(zhí)行。當(dāng)3×3卷積計(jì)算完成后,通過(guò)CALL調(diào)用指令將PE功能切換到PC2配置執(zhí)行5×5的卷積計(jì)算,此時(shí)的并行計(jì)算過(guò)程與3×3并行過(guò)程相同。等到所有卷積計(jì)算結(jié)束之后,將結(jié)果保存在DOM中。池化操作通過(guò)PE33從DOM中取出卷積計(jì)算的中間結(jié)果進(jìn)行池化計(jì)算。此時(shí),當(dāng)前簇中的PE13、PE23為空閑PE,可以解決PE01、PE10、PE11、PE12因重構(gòu)帶來(lái)的存儲(chǔ)溢出問(wèn)題。
圖3 卷積算法重構(gòu)切換流程
圖4給出了一個(gè)在4×4陣列上卷積算法的并行重構(gòu)映射方案。以3×3卷積的過(guò)程為例,首先將預(yù)處理后的數(shù)據(jù)存放在DIM中,PE00從DIM中加載數(shù)據(jù)并進(jìn)行下發(fā);其次,各計(jì)算PE在接到數(shù)據(jù)后進(jìn)行并行卷積計(jì)算,最終在DOM中保存結(jié)果,以便后續(xù)計(jì)算。具體算法執(zhí)行過(guò)程如下。
圖4 卷積并行重構(gòu)功能映射
算法2:卷積并行重構(gòu)算法
輸入:預(yù)處理數(shù)據(jù):conv_xl-1;卷積核:k
輸出:卷積計(jì)算結(jié)果:
(1)PE00從DIM中加載預(yù)處理數(shù)據(jù):將原始圖像分塊保存。
(2)whilei≤ndo
(3)LOOP:
(4) 數(shù)據(jù)下發(fā):當(dāng)PE00加載完數(shù)據(jù)后向PE01、PE10、PE11、PE12按塊下發(fā)數(shù)據(jù)。下發(fā)完數(shù)據(jù)后,PE00分別向各PE發(fā)送握手信號(hào)。
(5) 乘/加法計(jì)算過(guò)程:當(dāng)PE00接收到握手信號(hào)后,各PE同時(shí)開(kāi)始計(jì)算。通過(guò)左移加操作實(shí)現(xiàn)兩數(shù)據(jù)相乘,計(jì)算出最終的結(jié)果。
(6) 結(jié)果保存過(guò)程:當(dāng)所有卷積操作結(jié)束之后,PE02、PE20、PE21、PE22將計(jì)算結(jié)果傳入PE33中,最后PE33將所有結(jié)果寫(xiě)入DOM中。
(7)指令調(diào)用進(jìn)行卷積計(jì)算重構(gòu)切換。
(8)endLOOP
(9)endwhile
(10)return在DOM中存儲(chǔ)卷積計(jì)算結(jié)果
池化操作在卷積操作之后,主要作用是對(duì)特征圖進(jìn)行降維,以減少網(wǎng)絡(luò)中的參數(shù)和計(jì)算量,同時(shí)會(huì)保留特征圖中的重要信息,防止在后續(xù)的計(jì)算中出現(xiàn)信息丟失。池化操作通過(guò)對(duì)特征的二次提取來(lái)控制過(guò)擬合,使模型具有較高的容錯(cuò)能力,但不改變特征圖的數(shù)目。輸出圖像的每個(gè)元素由池化公式計(jì)算得出,計(jì)算公式請(qǐng)參見(jiàn)文獻(xiàn)[8]。池化操作主要用于減少網(wǎng)絡(luò)計(jì)算量并且在不改變特征的前提下轉(zhuǎn)發(fā)卷積操作提取的與分類特征相關(guān)的特征。
池化操作的功能指令預(yù)先通過(guò)配置指令在PE的存儲(chǔ)中,待卷積操作完成后通過(guò)PE33從DOM中取出卷積計(jì)算的中間結(jié)果進(jìn)行計(jì)算。PE13、PE23為空閑PE,其共享存儲(chǔ)可以解決PE01、PE10、PE11、PE12因重構(gòu)帶來(lái)的存儲(chǔ)溢出問(wèn)題。具體算法執(zhí)行過(guò)程如下。
算法3:池化并行算法
輸入:預(yù)處理數(shù)據(jù):conv_xl;池化核:k=2×2;塊總數(shù):n
輸出:卷積計(jì)算結(jié)果:
(1)PE33從DOM中加載卷積結(jié)果數(shù)據(jù):并對(duì)該結(jié)果進(jìn)行分塊。
(2)whilei≤ndo
(3)LOOP:
(4) 數(shù)據(jù)下發(fā):當(dāng)PE33加載完數(shù)據(jù)后向PE11、PE12、PE13、PE31按塊下發(fā)數(shù)據(jù)。下發(fā)完數(shù)據(jù)后,PE33分別向各PE發(fā)送握手信號(hào)。
(4)通過(guò)對(duì)過(guò)程數(shù)據(jù)及結(jié)果的分析,發(fā)現(xiàn)該地下水源熱泵系統(tǒng)在節(jié)能上和實(shí)際使用中存在著節(jié)能效果不足,故需要通過(guò)進(jìn)一步的研究使節(jié)能效果有所改善。
(5) 池化計(jì)算過(guò)程:PE13加載0號(hào)、1號(hào)、27號(hào)、28號(hào)地址通過(guò)比較操作實(shí)現(xiàn)數(shù)據(jù)最大池化計(jì)算,將最終的結(jié)果存放PE13的100號(hào)地址。PE31、PE11、PE12也是同樣操作。
(6) 結(jié)果保存過(guò)程:當(dāng)所有池化操作結(jié)束之后,將PE21、PE22、PE23、PE32的計(jì)算結(jié)果重新傳入PE33中,最后PE33將所有結(jié)果寫(xiě)入DOM中。
(7)endLOOP
(8)endwhile
(9)return在DOM中存儲(chǔ)池化計(jì)算結(jié)果
在卷積核進(jìn)行計(jì)算的過(guò)程中,由于卷積核是按照縱向或橫向順序移動(dòng),因此卷積核與輸入圖像的像素點(diǎn)會(huì)出現(xiàn)一個(gè)高度重合的區(qū)域,稱為像素重疊窗口。如圖5所示,以3×3卷積核為例,在像素窗口以步長(zhǎng)S=1水平移動(dòng)的過(guò)程中,由黑色框線標(biāo)出的重疊區(qū)域共兩列,每列包含3個(gè)像素點(diǎn),這會(huì)導(dǎo)致兩次卷積運(yùn)算對(duì)應(yīng)的像素窗口中有2/3的重疊區(qū)域,意味著每次卷積計(jì)算過(guò)程中的數(shù)據(jù)重疊率超過(guò)65%。當(dāng)卷積核為5×5運(yùn)算且步長(zhǎng)S=1時(shí),重疊區(qū)域共有4列,每列包含5個(gè)像素點(diǎn),這會(huì)導(dǎo)致兩次卷積運(yùn)算對(duì)應(yīng)的像素窗口中有4/5的重疊區(qū)域,即兩次卷積運(yùn)算數(shù)據(jù)重疊率高達(dá)80%。在進(jìn)行卷積操作的過(guò)程中,由于片上存儲(chǔ)資源的限制,這些重疊部分的數(shù)據(jù)需要反復(fù)從外存加載,帶來(lái)很大的訪問(wèn)延遲,影響計(jì)算效率。并且在進(jìn)行卷積操作的過(guò)程中,由于輸入圖像是二維矩陣,很難直接在硬件上對(duì)其進(jìn)行數(shù)據(jù)復(fù)用。因此,對(duì)輸入圖像及卷積核進(jìn)行預(yù)處理是十分必要的。首先將原始圖像按照卷積核的大小分塊并按列存儲(chǔ)在一維數(shù)組中,同時(shí)將卷積核也按列存儲(chǔ)在一維數(shù)組中。經(jīng)過(guò)這樣的預(yù)處理后,卷積核在原始輸入圖像上進(jìn)行卷積的計(jì)算過(guò)程就被簡(jiǎn)化為兩列對(duì)應(yīng)位置相乘并相加的過(guò)程。進(jìn)行下一次卷積時(shí),也只需要將卷積核列向量向后滑動(dòng)k個(gè)元素。這樣就避免了多次訪問(wèn)相同的輸入,從而降低了訪存開(kāi)銷。
圖5 數(shù)據(jù)組織
本文在可重構(gòu)陣列處理器上驗(yàn)證該并行方案的可行性。首先將測(cè)試圖片轉(zhuǎn)換成陣列可以識(shí)別的二進(jìn)制序列,然后將其存儲(chǔ)到片外存儲(chǔ)DIM中,其次將并行方案的指令初始化到對(duì)應(yīng)PE指令存儲(chǔ)其中,最后在ModelSim上進(jìn)行仿真驗(yàn)證。FPGA使用Vertex-6系列XC6VLX760器件,工作頻率可以達(dá)到123 MHz。實(shí)驗(yàn)基于4×4陣列結(jié)構(gòu)實(shí)現(xiàn)了Inception模塊中1×1、3×3和5×5大小卷積運(yùn)算的并行重構(gòu)映射方案。功能評(píng)測(cè)數(shù)據(jù)集選擇Minist(28×28像素的灰度手寫(xiě)數(shù)字圖片),該數(shù)據(jù)集包含60 000個(gè)用于訓(xùn)練的示例和10 000個(gè)用于測(cè)試的示例和Cifar-10數(shù)據(jù)集(32×32的彩色圖像),其中包含10個(gè)類別的RGB彩色圖片。相比于手寫(xiě)字符,Cifar-10含有的是現(xiàn)實(shí)世界中真實(shí)的物體,不僅噪聲很大,而且物體的比例、特征都不盡相同,這為識(shí)別帶來(lái)很大困難。Minist數(shù)據(jù)集中的數(shù)據(jù)做了預(yù)處理,將其變?yōu)?9×29大小的灰度圖像,對(duì)Cifar-10將按照原始數(shù)據(jù)進(jìn)行處理。表1給出了使用本文設(shè)計(jì)方案對(duì)兩個(gè)數(shù)據(jù)集的識(shí)別的結(jié)果??梢钥闯霰疚牡脑O(shè)計(jì)方案達(dá)到了Inception網(wǎng)絡(luò)的功能要求,且識(shí)別率達(dá)到99%左右。
表1 數(shù)據(jù)集
表2給出了本文和文獻(xiàn)[5,9]的處理時(shí)間對(duì)比。本文和文獻(xiàn)[5,9]都是基于FPGA實(shí)現(xiàn),本文的Inception V1輸入3張?zhí)卣鲌D,3×3卷積輸入96張?zhí)卣鲌D,輸出128張?zhí)卣鲌D;5×5卷積輸入16張?zhí)卣鲌D,輸出32張?zhí)卣鲌D。而文獻(xiàn)[5]第一層輸入7張?zhí)卣鲌D,輸出64張?zhí)卣鲌D,第二層輸入8張?zhí)卣鲌D,輸出19張?zhí)卣鲌D。如表2所示,文獻(xiàn)[5]的處理速度比本文方法快,但是處理的數(shù)據(jù)量只有本文的60%。文獻(xiàn)[9]與本文網(wǎng)絡(luò)模型相同,但本文的處理速度是它的0.76倍。相比之下,本文提出的可重構(gòu)方法能夠支持不同大小的卷積核計(jì)算,結(jié)構(gòu)更靈活,計(jì)算速度有了明顯提升。
表2 卷積層計(jì)算時(shí)間
表3給出了本文的FPGA芯片資源使用情況??梢钥闯?,與文獻(xiàn)[7、9]相比,本文提出的方法使用的資源更少。綜合結(jié)果顯示本文方法的綜合頻率為125 MHz,運(yùn)行功耗只有6.395 W。開(kāi)發(fā)板上的資源足夠充足,僅從硬件資源消耗比率來(lái)看,本文相比于文獻(xiàn)[7、9]有明顯的進(jìn)步。但由于不同方法使用了不同并行策略和FPGA平臺(tái),考慮硬件和便攜性方面的差異,文獻(xiàn)[8、12]指出使用能效比(Efficiency)等指標(biāo)可以提供一個(gè)有效的對(duì)比,該值由式(1)得出
表3 FPGA邏輯資源利用統(tǒng)計(jì)
(1)
其中,Performance per Watt指能效比,Operations為操作數(shù),Time和Power分別代表時(shí)間和功耗。
根據(jù)式(1),表4對(duì)能效比和每秒操作數(shù)進(jìn)行了對(duì)比。在功耗方面,相比于文獻(xiàn)[1]和文獻(xiàn)[12]來(lái)說(shuō),本方法功耗僅占其6%和36%。雖然文獻(xiàn)[8]功耗低于本方法,但其使用高層次綜合進(jìn)行自定義DCNN模型加速,成本較高,不利于通用模型加速。文獻(xiàn)[1]通過(guò)CPU優(yōu)化CNN代碼得到的結(jié)果,能效比可以達(dá)到0.037,與文獻(xiàn)[1]的CPU實(shí)現(xiàn)相比,本方法能效比是其4.75倍。文獻(xiàn)[8、12]都是基于FPGA實(shí)現(xiàn),與本文設(shè)計(jì)相比,文獻(xiàn)[12]具有更高的每秒操作數(shù)和功耗,但在能效比上本文是其2.2倍,在每秒操作數(shù)是文獻(xiàn)[8]的1.5倍,能效比是其1.3倍。由此可知,本方法在加速CNN方面具有一定優(yōu)勢(shì)。
表4 性能對(duì)比
本文針對(duì)卷積神經(jīng)網(wǎng)絡(luò)在硬件加速中面臨的訪存和功耗問(wèn)題,提出了一種兼顧計(jì)算高并行性和片上資源占用開(kāi)銷的可重構(gòu)陣列實(shí)現(xiàn)方案,通過(guò)可重構(gòu)機(jī)制在相同陣列上完成不同卷積核大小以及池化操作的計(jì)算,提高了片上資源的利用率。通過(guò)分析網(wǎng)絡(luò)中卷積、池化等操作間的數(shù)據(jù)依賴關(guān)系,將輸入圖像轉(zhuǎn)換成一維數(shù)組進(jìn)行存儲(chǔ),減少了卷積計(jì)算過(guò)程中外部存儲(chǔ)訪問(wèn)頻次,并提出了一種重疊窗口的數(shù)據(jù)組織方案,將外存加載的像素?cái)?shù)減少了30%。該方案在Minist和Cifar-10測(cè)試集中進(jìn)行測(cè)試,結(jié)果表明在123 MHz的工作頻率下,F(xiàn)PGA的運(yùn)行功耗為6.395 W,性能是CPU版本的4.75倍;相比于其它FPGA平臺(tái)實(shí)現(xiàn),所提出的可重構(gòu)實(shí)現(xiàn)方式具有明顯優(yōu)勢(shì)。該方案也可以用來(lái)實(shí)現(xiàn)同類計(jì)算架構(gòu)的神經(jīng)網(wǎng)絡(luò)。