彭東
摘 要 在很多研究與設(shè)計(jì)中,F(xiàn)PGA可以應(yīng)用于卷積神經(jīng)網(wǎng)絡(luò)加速器的設(shè)計(jì)當(dāng)中。在這篇文章當(dāng)中將基于FPGA設(shè)計(jì)卷積神經(jīng)網(wǎng)絡(luò)的硬件加速器,在此設(shè)計(jì)中,核心技術(shù)是利用卷積神經(jīng)網(wǎng)絡(luò)的并行性這一特征,降低實(shí)施嵌入式帶來的資源利用的需求,從而使得加速器可在資源有限的開發(fā)板上得以實(shí)現(xiàn)。
關(guān)鍵詞 卷積神經(jīng)網(wǎng)絡(luò);FPGA;設(shè)計(jì);硬件加速器
前言
卷積神經(jīng)網(wǎng)絡(luò),英文全稱Convolutional Neural Networks,簡稱CNN,是一類前饋神經(jīng)網(wǎng)絡(luò),其內(nèi)包含有卷積計(jì)算,具備著深度結(jié)構(gòu)。該神經(jīng)網(wǎng)絡(luò)是有著一定的學(xué)習(xí)能力的,對于給定的階層結(jié)構(gòu),可以平移不變地對于后續(xù)輸入的信息進(jìn)行分類。FPGA,全稱Field Programmable Gate Array,專用集成電路領(lǐng)域中的一種半定制電路。本文首先介紹卷積神經(jīng)網(wǎng)絡(luò)CNN以及FPGA基本原理,然后根據(jù)CNN的特點(diǎn),通過合適的并行處理與流水線結(jié)構(gòu)在FPGA上設(shè)計(jì)一個(gè)CNN系統(tǒng),有效提高其性能。
1基本原理
1.1 CNN基本原理
卷積神經(jīng)網(wǎng)絡(luò)通過共享權(quán)重值以及局部連接的方式大大降低了網(wǎng)絡(luò)的整體復(fù)雜度,并且避免了傳統(tǒng)網(wǎng)絡(luò)需要對輸入數(shù)據(jù)進(jìn)行復(fù)雜的預(yù)處理工作,直接將原始數(shù)據(jù)輸入卷積神經(jīng)網(wǎng)絡(luò)經(jīng)過多次卷積抽樣,提取關(guān)鍵特征即可完成模式識別,并且卷積神經(jīng)網(wǎng)絡(luò)對物體的形變有著極高的適應(yīng)性。
卷積神經(jīng)網(wǎng)絡(luò)可應(yīng)用于語言與識別圖像處理方面,且應(yīng)用廣泛。在卷積神經(jīng)網(wǎng)絡(luò)中,對輸入數(shù)據(jù)的處理總共分為三種:卷積(Convolution)、池化(Pooling)、全連接 (Fully Connected) [1]。這些操作在卷積神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)中以層的形式存在,在進(jìn)行圖像識別時(shí),卷積神經(jīng)網(wǎng)絡(luò)的初始輸入數(shù)據(jù)一般為原始圖像,在卷積神經(jīng)網(wǎng)絡(luò)中經(jīng)過多次交替執(zhí)行卷積和池化后得到多個(gè)特征圖,再通過全連接將這些特征圖計(jì)算得到識別結(jié)果。
1.2 FPGA基本原理
FPGA,即現(xiàn)場可編程邏輯門陣列,該可編程器件具有與傳統(tǒng)的可編程器件不同的結(jié)構(gòu),其采用的是小型查找表完成組合邏輯,這樣方便于每一個(gè)查找表可以連接到一個(gè)D觸發(fā)器的輸入端,再由觸發(fā)器驅(qū)動輸入輸出接口或者繼續(xù)驅(qū)動其他的觸發(fā)器,從而實(shí)現(xiàn)了組合邏輯和時(shí)序邏輯。各個(gè)模塊之間通過金屬連線,相互溝通與聯(lián)系,最終聯(lián)系到輸入輸出接口。通過向內(nèi)部靜態(tài)存儲單元加載數(shù)據(jù),來實(shí)現(xiàn)FPGA的邏輯。
2CNN設(shè)計(jì)
2.1 整體結(jié)構(gòu)
由于FPGA內(nèi)部存儲資源有限,而卷積神經(jīng)網(wǎng)絡(luò)一般消耗的內(nèi)存較多,所以可編程器件便會不斷的訪問外部存儲器從而讀取數(shù)據(jù),從而使網(wǎng)絡(luò)效率很大程度的下降。故此次設(shè)計(jì)的目的為降低訪問外部存儲器的次數(shù),提高網(wǎng)絡(luò)效率。則要通過設(shè)計(jì)使得輸入圖像以及卷積核權(quán)值只需要加載一次,就存儲在片上存儲器中,此過程執(zhí)行到操作結(jié)束方可停止。本文提出如圖3-1所示的結(jié)構(gòu),其中,ARM是該結(jié)構(gòu)的最主要的控制器部分,具體連接如圖,控制器與存儲器相連接,便可以將輸入圖像傳輸?shù)骄矸e模塊當(dāng)中,再進(jìn)行卷積運(yùn)算。存儲器中存在四個(gè)卷積核,所以在每次計(jì)算過程當(dāng)中都可以生成四個(gè)輸出部分,數(shù)據(jù)存儲器和系數(shù)存儲器的端口均可以被多路重復(fù)使用[2] ,發(fā)送輸入數(shù)據(jù)與存儲輸出數(shù)據(jù)幾乎同步進(jìn)行,并且循環(huán)過程不會產(chǎn)生中斷。
3-1加速器整體架構(gòu)
2.2 卷積運(yùn)算單元
對于硬件設(shè)計(jì)而言,不同的卷積層之間的計(jì)算是可以并行的,然而在運(yùn)算過程當(dāng)中,會存在著非常高的數(shù)據(jù)重復(fù)性,可能會導(dǎo)致數(shù)據(jù)的不相關(guān)性。因此想要提高運(yùn)算性能,就要增加數(shù)據(jù)利用率和運(yùn)算并行性,本文提出了一個(gè)流水線并行乘加結(jié)構(gòu),一次完整的乘加結(jié)構(gòu)可在一個(gè)時(shí)鐘周期內(nèi)結(jié)束,為3×3的卷積運(yùn)算單元,周期內(nèi)完成計(jì)算次數(shù)為9次,均為乘法計(jì)算,最終通過加法計(jì)算輸出最終特征像素。在內(nèi)部存儲器獲取的圖像信息在REG中存放,而存儲器中的卷積核權(quán)值存放在W中,當(dāng)卷積運(yùn)算需要更新卷積核時(shí)才能進(jìn)行修改操作。對于卷積神經(jīng)網(wǎng)絡(luò)而言,需要對輸入圖像的邊緣位置填充0方,為了保證流水線結(jié)構(gòu)不會因?yàn)樘卣鲌D切換或者數(shù)據(jù)的填充問題而發(fā)生中斷,確保卷積計(jì)算的并行性,可以在卷積器中加入屏蔽器,將輸出邊緣位置0。
3結(jié)束語
本文提出的一種卷積神經(jīng)網(wǎng)絡(luò)設(shè)計(jì)是基于FPGA進(jìn)行研究與分析的,主要是利用其內(nèi)部資源,通過提高數(shù)據(jù)的獲取效率,應(yīng)用流水線結(jié)構(gòu),提升卷積運(yùn)算的并行性從而提高運(yùn)算速度,得到一種高效率的卷積神經(jīng)網(wǎng)絡(luò)加速器結(jié)構(gòu)。對于開發(fā)板而言,即使資源有限,也可以通過本文提供的設(shè)計(jì)實(shí)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)與可編程器件的優(yōu)勢最大化。
參考文獻(xiàn)
[1] 余子健,馬德,嚴(yán)曉浪,等.基于FPGA的卷積神經(jīng)網(wǎng)絡(luò)加速器[J].計(jì)算機(jī)工程,2017,43(1):109-114.
[2] 楊薇.卷積神經(jīng)網(wǎng)絡(luò)的FPGA并行結(jié)構(gòu)研究[J].數(shù)字技術(shù)與應(yīng)用,2015(12):61.