徐 欣,劉 強(qiáng),王少軍
(1.天津市成像與感知微電子技術(shù)重點(diǎn)實(shí)驗(yàn)室(天津大學(xué)),天津 300072;2.哈爾濱工業(yè)大學(xué) 電子與信息工程學(xué)院,哈爾濱 150001)
卷積神經(jīng)網(wǎng)絡(luò)近年來(lái)在目標(biāo)檢測(cè)[1]、圖像修復(fù)[2]、自然語(yǔ)言處理、機(jī)器視覺(jué)等應(yīng)用領(lǐng)域獲得了巨大突破.面對(duì)這些復(fù)雜任務(wù),神經(jīng)網(wǎng)絡(luò)系統(tǒng)需要強(qiáng)大的數(shù)據(jù)存儲(chǔ)以及數(shù)據(jù)處理能力.高速定制化的硬件處理器為處理能力的提高提供了一個(gè)可行的途徑[3-6].相比于其他硬件處理器,F(xiàn)PGA擁有良好的性能、較短的開(kāi)發(fā)周期、更高的能源利用率及重配置功能,因此越來(lái)越多的開(kāi)發(fā)者選擇基于FPGA設(shè)計(jì)卷積神經(jīng)網(wǎng)絡(luò)硬件加速器[3,7-8].
目前,基于FPGA的卷積神經(jīng)網(wǎng)絡(luò)硬件加速器仍面臨諸多挑戰(zhàn). 1)卷積硬件加速器具有較高的并行計(jì)算特性,因此數(shù)據(jù)傳輸速度往往成為性能繼續(xù)提升的瓶頸,例如Qiu等[9]設(shè)計(jì)提出的采用多個(gè)卷積處理單元并行計(jì)算的方法,其較低的片上數(shù)據(jù)傳輸速度就限制了整體系統(tǒng)的計(jì)算性能;2)硬件設(shè)計(jì)空間巨大,不同的硬件并行設(shè)計(jì)方法將影響加速器性能與資源使用率,例如端到端的設(shè)計(jì)[10-11]的方法把所有卷積層的計(jì)算引擎都放置到片上.這種方法對(duì)片上資源和帶寬要求較高,并且只適用于較小網(wǎng)絡(luò)模型.如何設(shè)計(jì)加速器的高度并行傳輸與計(jì)算架構(gòu)以及如何在有限的硬件資源下選擇出最佳并行方案以實(shí)現(xiàn)加速器的高性能是目前亟需解決的問(wèn)題.
針對(duì)上述問(wèn)題,本文首先提出了數(shù)據(jù)對(duì)齊并行處理的方法以實(shí)現(xiàn)數(shù)據(jù)層面的高速并行傳輸與計(jì)算,采用多卷積核并行處理的方法實(shí)現(xiàn)同一卷積層的多個(gè)卷積核并行計(jì)算,并通過(guò)建立性能與資源評(píng)估模型,生成性能與資源協(xié)同優(yōu)化的并行方案.最終在Xilinx Zynq XC7Z045上的SSD網(wǎng)絡(luò)模型測(cè)試結(jié)果表明,該加速器在175 MHz時(shí)鐘下可以達(dá)到44.59 FPS與306.6 GOP·s-1.
卷積神經(jīng)網(wǎng)絡(luò)是一種具有共享權(quán)重結(jié)構(gòu)、平移不變性特征的人工神經(jīng)網(wǎng)絡(luò),其主要由卷積層、下采樣層和全連接層組成.卷積層的作用是通過(guò)權(quán)值共享來(lái)提取特征,下采樣層則主要是為了降低數(shù)據(jù)維度與防止圖像過(guò)擬合,全連接層的作用是把最后一層卷積的輸出圖像由高維變成低維,并且把輸入的信息進(jìn)行提取整合,再經(jīng)過(guò)激活函數(shù)的映射,以實(shí)現(xiàn)特征到標(biāo)簽的映射.
卷積層從上層局部鄰域特征圖中提取特征,然后施加一個(gè)加性偏差,其結(jié)果如下:
gj(x+p,y+q).
(1)
式中:Qi(x,y)為第i張輸出圖像上的(x,y)處的輸出特征;bi為第i張輸出特征的偏差;gj(x+p,y+q)為第j張輸入圖像在(x+p,y+q)處特征值;Wij(p,q)為卷積核(p,q)處的權(quán)重值;Mi為輸入圖像的通道數(shù);Pi、Qi分別為卷積核長(zhǎng)寬.
除此之外,卷積層的輸出還要經(jīng)過(guò)激活函數(shù)和批量歸一化處理.激活函數(shù)可以把特征保留并映射出來(lái),以增強(qiáng)卷積神經(jīng)網(wǎng)絡(luò)系統(tǒng)的非線性,常用的激活函數(shù)有tanh,sigmoid,ReLU,PReLU等.本文選擇下式所示ReLU函數(shù)[12]作為非線性激活函數(shù).
ReLU(x)=Max(x,0),
式中x為輸入像素.
經(jīng)過(guò)卷積層權(quán)值共享和局部連接后,圖像權(quán)值參數(shù)已經(jīng)大大減少,但是對(duì)于全連接層來(lái)說(shuō)仍有著計(jì)算量方面的挑戰(zhàn),并且還會(huì)出現(xiàn)過(guò)擬合現(xiàn)象.為了解決這些問(wèn)題,可按著一定的方法對(duì)特征圖進(jìn)行下采樣操作,提升整個(gè)網(wǎng)絡(luò)模型的性能.
全連接層是將特征圖進(jìn)行整合和分類的高層,以得到整個(gè)圖像的信息.該層的每一個(gè)神經(jīng)元都與上一層的所有神經(jīng)元相連,簡(jiǎn)單來(lái)說(shuō)全連接層就是矩陣向量乘法過(guò)程,輸入向量與權(quán)重矩陣相乘,以實(shí)現(xiàn)特征的分類.
為了兼顧目標(biāo)檢測(cè)的時(shí)效性和不變性,SSD算法在2016年被Liu等[13]提出.SSD算法的網(wǎng)絡(luò)模型是一個(gè)基于VGG16結(jié)構(gòu)的卷積神經(jīng)網(wǎng)絡(luò),其核心是利用小型卷積濾波器來(lái)預(yù)測(cè)目標(biāo)類別與邊界框,并達(dá)到速度與精確度的平衡.如圖1所示為一個(gè)基本的SSD網(wǎng)絡(luò)架構(gòu).
圖1 基本SSD網(wǎng)絡(luò)模型
本文所提出的系統(tǒng)整體架構(gòu)如圖2所示,主要包含:片外雙倍速率同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器(double data rate synchronous dynamic random access memory, DDR SDRAM)、ARM(advanced risc machine)處理器、直接內(nèi)存存取單元(direct memory access, DMA)、片上緩沖器、控制器以及卷積計(jì)算單元.片外DDR將儲(chǔ)存外設(shè)獲取的輸入圖像數(shù)據(jù)以及網(wǎng)絡(luò)的權(quán)值系數(shù);ARM處理器對(duì)整體系統(tǒng)進(jìn)行控制;卷積計(jì)算單元主要完成卷積神經(jīng)網(wǎng)絡(luò)的卷積計(jì)算,還包括池化、激活等操作;片上緩沖器用于緩存計(jì)算所需圖像數(shù)據(jù),權(quán)值系數(shù)以及計(jì)算結(jié)果;DMA用于片外儲(chǔ)存器與片上緩沖器之間的數(shù)據(jù)傳輸;控制器從外部獲取指令并對(duì)其進(jìn)行解碼,以控制可編程邏輯端的所有模塊.
圖2 系統(tǒng)整體硬件架構(gòu)圖
本文首先提出了一種數(shù)據(jù)對(duì)齊并行預(yù)處理的方法實(shí)現(xiàn)數(shù)據(jù)層面的高度并行傳輸與計(jì)算,以提高數(shù)據(jù)傳輸、并行計(jì)算速度和硬件設(shè)計(jì)的通用性.文中用PD表示數(shù)據(jù)傳輸?shù)牟⑿卸?,即一個(gè)時(shí)鐘周期內(nèi)并行傳輸?shù)臄?shù)據(jù)個(gè)數(shù).PV表示數(shù)據(jù)計(jì)算的并行度,為一個(gè)卷積核在圖像上可同時(shí)計(jì)算的結(jié)果個(gè)數(shù),K為卷積核大小.預(yù)處理單元由兩部分組成:移位寄存器與先進(jìn)先出(first input first output,FIFO)線性緩沖器.根據(jù)式(1),卷積運(yùn)算要求數(shù)據(jù)按照行對(duì)齊輸出,所以首先要對(duì)圖像數(shù)據(jù)進(jìn)行行緩存.由于一個(gè)時(shí)鐘內(nèi)數(shù)據(jù)傳輸?shù)膫€(gè)數(shù)為PD,當(dāng)圖像邊長(zhǎng)不能被數(shù)據(jù)傳輸并行度PD整除,需要對(duì)輸入圖像添加無(wú)效數(shù)據(jù)以使邊長(zhǎng)為PD的整數(shù)倍,保證圖像的每行像素以每個(gè)時(shí)鐘周期傳輸PD個(gè)數(shù)據(jù)的方式經(jīng)過(guò)N個(gè)時(shí)鐘周期傳輸完畢.這樣,圖像數(shù)據(jù)就可以以行對(duì)齊的方式存儲(chǔ)在線性FIFO中,不會(huì)產(chǎn)生行錯(cuò)位.其次,行對(duì)齊輸出要求對(duì)線性緩沖器FIFO進(jìn)行同時(shí)讀取,使不同行的相同位置的數(shù)據(jù)一起輸出(如圖3中的Xp0,Xp6,Xp8同時(shí)輸出).最后將讀取到的圖像數(shù)據(jù)組合成卷積矩陣,輸入到計(jì)算模塊中與系數(shù)進(jìn)行卷積運(yùn)算.
圖3 輸入數(shù)據(jù)對(duì)齊并行處理
圖3所示為一個(gè)3×3大小的卷積核在6×6輸入圖像上滑動(dòng)的過(guò)程.其中藍(lán)色表示原始圖像大小為4×4.由于應(yīng)用需要,原始圖像進(jìn)行了像素填充,因此實(shí)際輸入圖像變成6×6(這里填充像素層數(shù)設(shè)置為1).輸入圖像數(shù)據(jù)將按行依次讀取.數(shù)據(jù)并行傳輸個(gè)數(shù)PD設(shè)置為4,數(shù)據(jù)計(jì)算并行度PV為4,卷積核尺寸K為3,滑動(dòng)步長(zhǎng)為1.由于此時(shí)圖像邊長(zhǎng)6不為數(shù)據(jù)傳輸并行度4的整數(shù)倍,需要在每行的左側(cè)添加2個(gè)無(wú)效數(shù)據(jù)(圖中的紅色像素)存入寄存器中補(bǔ)充成8個(gè)數(shù)據(jù),以保證每行數(shù)據(jù)正好可以經(jīng)過(guò)2個(gè)時(shí)鐘周期傳完.該例中實(shí)現(xiàn)的3×3的卷積核計(jì)算需要對(duì)3行的數(shù)據(jù)進(jìn)行行對(duì)齊讀取以組成卷積矩陣.因此使用2個(gè)FIFO緩存前兩行輸入數(shù)據(jù),在第3個(gè)周期時(shí)便可與移位寄存器中的第3行數(shù)據(jù)實(shí)現(xiàn)行對(duì)齊輸出,其結(jié)構(gòu)如圖3(b)所示.由于數(shù)據(jù)傳輸并行度為PD,一個(gè)時(shí)鐘周期便可得到3×PD個(gè)數(shù)據(jù).根據(jù)式(1)可知當(dāng)卷積核滑動(dòng)步長(zhǎng)為1時(shí),每個(gè)卷積操作的輸入矩陣之間有重疊,按照?qǐng)D3(c)中的方式進(jìn)行組合可得到PV個(gè)卷積矩陣.然后將這PV個(gè)矩陣按所標(biāo)順序分別輸入到PV個(gè)K×K卷積核計(jì)算單元的中與系數(shù)進(jìn)行卷積運(yùn)算,這樣一個(gè)周期內(nèi)就可以得到PV個(gè)卷積結(jié)果.邊長(zhǎng)為6的圖像,經(jīng)過(guò)卷積操作后輸出圖像邊長(zhǎng)為4.如圖3(d)所示,輸出圖像的一行像素可經(jīng)過(guò)一次數(shù)據(jù)并行計(jì)算同時(shí)得到.
綜上所述,PD、PV的選擇主要受到輸出圖像尺寸的限制. 本文要實(shí)現(xiàn)一個(gè)完整的網(wǎng)絡(luò)模型,因此硬件加速器的PD與PV的大小最終將需要考慮網(wǎng)絡(luò)的所有卷積層的尺寸來(lái)確定.
經(jīng)過(guò)對(duì)卷積層的分析發(fā)現(xiàn),網(wǎng)絡(luò)的每層卷積層都是用不同數(shù)量的卷積核在同一個(gè)輸入圖像上不斷滑動(dòng)進(jìn)行卷積.因此,可以在硬件上實(shí)現(xiàn)PF個(gè)卷積核運(yùn)算單元,使PF個(gè)不同的卷積核同時(shí)與圖像數(shù)據(jù)進(jìn)行卷積運(yùn)算.圖4是一個(gè)多卷積核并行計(jì)算的硬件結(jié)構(gòu).其中數(shù)據(jù)預(yù)處理單元表示數(shù)據(jù)對(duì)齊并行處理的移位寄存器與FIFO線性緩沖器組成的預(yù)處理單元.權(quán)值系數(shù)緩沖器緩存計(jì)算所需的權(quán)值系數(shù).KCU為一個(gè)K×K卷積核計(jì)算單元.這里假設(shè)卷積核的并行度PF為3,即可同時(shí)進(jìn)行3個(gè)不同卷積核的卷積運(yùn)算.依上文所述,每一層卷積層的所有卷積核處理的為同一張圖像,所以其輸入圖像數(shù)據(jù)是同時(shí)讀取的,只是被映射到不同的卷積核的卷積單元.假設(shè)輸入圖像為RGB三通道圖像,圖像將依照通道順序依次進(jìn)入預(yù)處理單元.一個(gè)通道的圖像經(jīng)過(guò)數(shù)據(jù)預(yù)處理單元處理后得到的PV個(gè)卷積矩陣將會(huì)被同時(shí)輸送到每個(gè)卷積核的CCU卷積單元,然后再對(duì)應(yīng)輸入到CCU的PV個(gè)K×K卷積核計(jì)算單元當(dāng)中與卷積系數(shù)進(jìn)行乘累加操作.由于有PF個(gè)卷積核,每個(gè)卷積核的CCU單元可同時(shí)進(jìn)行一個(gè)卷積核的PV個(gè)卷積結(jié)果的計(jì)算,因此一個(gè)周期內(nèi)可以得到PF×PV個(gè)卷積運(yùn)算結(jié)果.每個(gè)卷積核的卷積單元計(jì)算完輸入圖像的一個(gè)通道后,把結(jié)果暫時(shí)存放在FIFO當(dāng)中,等待下一個(gè)通道計(jì)算結(jié)果的到來(lái)再進(jìn)行累加.最終,輸入圖像的所有通道計(jì)算完后,存放在FIFO中的結(jié)果依次輸出.多卷積核并行計(jì)算單元的計(jì)算速度快于暫存結(jié)果的FIFO的數(shù)據(jù)輸出速度.為了減少計(jì)算等待時(shí)間,使上一周期的PF個(gè)卷積核的結(jié)果計(jì)算完后,無(wú)需等待FIFO中的數(shù)據(jù)全部取出,即可開(kāi)始下一周期PF個(gè)卷積計(jì)算,在最后的通道累加單元中,使用了乒乓結(jié)構(gòu),使兩個(gè)FIFO交替存取并行計(jì)算單元的卷積結(jié)果.
圖4 多卷積核并行計(jì)算單元
根據(jù)多卷積核并行計(jì)算,加速器的PV大小將由輸出圖像確定,而卷積核并行度PF則主要受到片上資源的限制.卷積模塊中的乘法全部利用FPGA的數(shù)字信號(hào)處理資源(digital signal processing,DSP)實(shí)現(xiàn).采用圖4所示多卷積核并行策略后,所用的乘法器總數(shù)應(yīng)該小于總的DSP資源為
PV×PF×Kernelk≤DSPsum.
(2)
式中:Kernelk為計(jì)算一個(gè)K×K大小卷積所需乘法器個(gè)數(shù);DSPsum為FPGA片上DSP資源總數(shù).
除此之外,還需要使用隨機(jī)存取存儲(chǔ)器塊(block random access memory, BRAM)存儲(chǔ)卷積計(jì)算所需的臨時(shí)數(shù)據(jù),因此需要考慮片上的存儲(chǔ)資源.片上存儲(chǔ)主要包括:輸入緩沖區(qū)、線性緩沖區(qū)以及臨時(shí)計(jì)算結(jié)果存儲(chǔ)區(qū).每層卷積層的輸出圖像大小公式如下:
(3)
(4)
PF×2≤BRAMsum.
(5)
除資源限制之外,為了保證數(shù)據(jù)并行傳輸速度與計(jì)算速度匹配,PD應(yīng)盡量大于等于PV;同時(shí)為了減少再對(duì)輸出結(jié)果的處理,PV應(yīng)盡量能被輸出圖像邊長(zhǎng)整除,即:
(6)
PD≥PV,
(7)
(8)
Tdata=Hin×Win×Cin×δ×tclk,
(9)
(10)
(11)
(12)
式中:K為卷積核大小;Win、Hin分別為該次卷積計(jì)算的輸入圖像尺寸;Wout、Hout分別為輸出圖像尺寸;Cin為輸入圖像通道數(shù);Fout為卷積核個(gè)數(shù);δ、θ分別為架構(gòu)所決定的傳輸與計(jì)算效率;tclk為時(shí)鐘周期.
網(wǎng)絡(luò)硬件執(zhí)行時(shí)間為所有卷積層的執(zhí)行時(shí)間總和.每層卷積層的執(zhí)行時(shí)間則為該層所有的分割塊的執(zhí)行時(shí)間總和,即
(13)
圖5 卷積層硬件執(zhí)行時(shí)間
本文將根據(jù)上述硬件架構(gòu)分析對(duì)設(shè)計(jì)架構(gòu)進(jìn)行評(píng)估,以確定出最佳的并行方案.
表1為本文所實(shí)現(xiàn)的SSD網(wǎng)絡(luò)模型所包含的卷積層,加速器需要將每層卷積層的圖像數(shù)據(jù)與權(quán)值系數(shù)從片外DDR讀取到片上進(jìn)行臨時(shí)儲(chǔ)存.當(dāng)圖像數(shù)據(jù)和系數(shù)的數(shù)量較為龐大時(shí),由于片上資源有限,無(wú)法將完整一層的數(shù)據(jù)和參數(shù)全部?jī)?chǔ)存到片上存儲(chǔ)器中.這時(shí),需要對(duì)圖像進(jìn)行分割,以分塊的方式進(jìn)行處理.表1中列出了對(duì)于較大的卷積層所需進(jìn)行的分割尺寸.這里相同輸入圖像大小的卷積層只列舉了一個(gè).為了降低加速器的資源與功耗,本文采用16位定點(diǎn)實(shí)現(xiàn)SSD網(wǎng)絡(luò)模型,相比于單浮點(diǎn)數(shù),其mAP僅下降了0.8%.
表1 SSD網(wǎng)絡(luò)模型卷積層
圖6是根據(jù)硬件架構(gòu)分析式(2)~(13)所繪制的資源與性能評(píng)估模型圖.在充分利用實(shí)驗(yàn)所用Xilinx Zynq XC7Z045片上DSP資源的情況下,理論執(zhí)行時(shí)間與存儲(chǔ)資源都與PV成反比.由于PV需滿足式(6)的限制,因此根據(jù)表1中的輸出尺寸分別對(duì)PV=2、4、8、16、32這5種可選方案進(jìn)行取點(diǎn).可以看出當(dāng)PV小于8時(shí),硬件執(zhí)行時(shí)間明顯增加,并且需要的存儲(chǔ)資源大于實(shí)際片上存儲(chǔ)資源.網(wǎng)絡(luò)中最小的輸出圖像大小邊長(zhǎng)為8,因此最終根據(jù)式(2)~(7)選擇PD=8、PV=8、PF=12的并行方案.對(duì)該方案進(jìn)行實(shí)際綜合,DSP、BRAM、查找表單元(look-up-table, LUT)以及觸發(fā)器(flip-flop, FF)的使用率見(jiàn)表2.
表3列出了將同一SSD網(wǎng)絡(luò)分別在CPU、GPU、FPGA32和FPGA16上實(shí)現(xiàn)的結(jié)果對(duì)比.從表3中可以看出,本文基于16位定點(diǎn)數(shù)實(shí)現(xiàn)的SSD網(wǎng)絡(luò)模型在175 MHz的時(shí)鐘頻率下,可以達(dá)到44.59幀/s,比基于32位定點(diǎn)數(shù)的硬件設(shè)計(jì)快4.99倍,分別是CPU與GPU的1.39倍與0.41倍.動(dòng)態(tài)功耗為3.72 W,相比CPU與GPU分別降低85.1%與93.9%,是FPGA32的1.04倍.綜上所述,本文所提出的16位卷積神經(jīng)網(wǎng)絡(luò)加速器與CPU、GPU相比,具有較低的功耗,與32位的加速器相比,具有較高性能的優(yōu)勢(shì),因此更適用于移動(dòng)設(shè)備上.
圖6 性能與資源評(píng)估
表2 硬件實(shí)現(xiàn)資源使用情況
表4列出了3種基于Xilinx Zynq XC7Z045實(shí)現(xiàn)的卷積神經(jīng)網(wǎng)絡(luò)加速器[9,14-15].可以看出,相比于其他設(shè)計(jì),本設(shè)計(jì)采用數(shù)據(jù)對(duì)齊并行處理、多卷積核并行計(jì)算等方法能夠充分利用片上資源,實(shí)現(xiàn)高度并行計(jì)算,使加速器的能效達(dá)到31.54 GOP/(s·W),比文獻(xiàn)[9,14-15]有較大性能提升.
1)本文所提出的卷積神經(jīng)網(wǎng)絡(luò)加速器采用數(shù)據(jù)對(duì)齊并行處理與多卷積核并行計(jì)算的方法,實(shí)現(xiàn)了數(shù)據(jù)的高速并行傳輸,與多個(gè)層面的并行計(jì)算,并根據(jù)該設(shè)計(jì)方法建立了資源與性能模型,找出最佳并行方案,實(shí)現(xiàn)了加速器整體硬件架構(gòu)的高能效.
2)實(shí)驗(yàn)結(jié)果表明,加速器在175 MHz時(shí)鐘頻率下實(shí)現(xiàn)的SSD網(wǎng)絡(luò)模型,其速度可以達(dá)到44.59 FPS,功耗為9.72 W,整體能效達(dá)到31.54 GOP/(s·W).