楊博文 楊海濤 高浩浩
摘要:卷積神經(jīng)網(wǎng)絡(luò)(CNN)所有子層中卷積層的計(jì)算是整個(gè)網(wǎng)絡(luò)計(jì)算中最耗費(fèi)計(jì)算資源的問題,本文提出了一種對(duì)卷積神經(jīng)網(wǎng)絡(luò)的卷積層并行化實(shí)現(xiàn)方案。首先對(duì)系統(tǒng)的整體處理結(jié)構(gòu)進(jìn)行分析,然后對(duì)計(jì)算核的結(jié)構(gòu)進(jìn)行詳細(xì)討論,最后將卷積層中卷積運(yùn)算并行映射到陣列處理器上。實(shí)驗(yàn)結(jié)果表明,在250Mhz的工作頻率下,該結(jié)構(gòu)可使FPGA(Field Programmable Gate Array,F(xiàn)PGA)提高峰值運(yùn)算速度。
關(guān)鍵詞:卷積神經(jīng)網(wǎng)絡(luò);現(xiàn)場(chǎng)可編程門陣列;卷積層
中圖分類號(hào):TP391.4 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9416(2019)10-0136-02
CNN是著名的深度學(xué)習(xí)架構(gòu),從人工神經(jīng)網(wǎng)絡(luò)擴(kuò)展而來(lái),它已經(jīng)大量用于不同應(yīng)用,包括視頻監(jiān)控,移動(dòng)機(jī)器人視覺,數(shù)據(jù)中心的圖像搜索引擎等[1-2]。由于CNN的特殊計(jì)算模式,通用處理器實(shí)現(xiàn)CNN并不高效,所以很難滿足性能需求[4]。于是,基于FPGA,GPU甚至ASIC的不同加速器被相繼提出以提升CNN設(shè)計(jì)性能[5-6]。卷積神經(jīng)網(wǎng)絡(luò)加速器主要由卷積、池化、數(shù)據(jù)選擇、輸入輸出緩存等單元組成,其中卷積模塊根據(jù)多個(gè)一定的權(quán)重(即卷積核),對(duì)一個(gè)塊的像素進(jìn)行內(nèi)積運(yùn)算,它的輸出就是提取的特征之一,但因?yàn)榫矸e核的大小一般小于輸入圖像的大小,因此卷積提取出的特征更多的關(guān)注的是局部信息[3]。卷積計(jì)算單元是計(jì)算核的主要模塊,主要的功能是對(duì)輸入數(shù)據(jù)進(jìn)行特征提取,其內(nèi)部包含多個(gè)卷積核,組成卷積核的每個(gè)元素都對(duì)應(yīng)一個(gè)權(quán)重系數(shù)和一個(gè)偏差量。
1 卷積計(jì)算模塊設(shè)計(jì)
卷積運(yùn)算是兩個(gè)卷積核大小的矩陣的內(nèi)積運(yùn)算,即相同位置的數(shù)字相乘再相加求和。通常情況下,靠近輸入的卷積層,譬如第一層卷積層,會(huì)找出一些共性的特征,如手寫數(shù)字識(shí)別中第一層一般是找出諸如“橫線”、“豎線”、“斜線”等共同特征,稱之為基本特征,經(jīng)過(guò)池化操作后,在第二層卷積層,可以找出一些相對(duì)復(fù)雜的特征,如“橫折”、“左半圓”、“右半圓”等特征,越往后,卷積核設(shè)定的數(shù)目越多,體現(xiàn)出的特征越細(xì)致。
卷積計(jì)算單元的結(jié)構(gòu)框圖如圖1所示,主要由數(shù)據(jù)輸入信號(hào)data_in和權(quán)重輸入信號(hào)weight_in進(jìn)行卷積計(jì)算,當(dāng)信號(hào)data_in_sop為1時(shí),則判斷信號(hào)data_in_valid為高,即輸入數(shù)據(jù)有效,當(dāng)data_in_eop信號(hào)為1時(shí),則數(shù)據(jù)有效信號(hào)為低,讀入數(shù)據(jù)結(jié)束。當(dāng)復(fù)位信號(hào)為低時(shí),輸入原始數(shù)據(jù)的中間寄存器data_in_temp和weight_in_temp為0,當(dāng)復(fù)位信號(hào)拉高時(shí),中間寄存器data_in_temp和weight_in_temp分別等于輸入的信號(hào)data_in和weight_in。因?yàn)榫W(wǎng)絡(luò)中存在不同大小的卷積操作,通過(guò)全局控制器counter_control信號(hào)對(duì)網(wǎng)絡(luò)的計(jì)算進(jìn)行控制,當(dāng)counter_control為0時(shí),表示網(wǎng)絡(luò)的第一層計(jì)算,則控制不同大小計(jì)算的寄存器max為121,支持網(wǎng)絡(luò)中的11×11塊大小的卷積運(yùn)算;當(dāng)counter_control大于1小于105時(shí),表示網(wǎng)絡(luò)的第二層計(jì)算,則控制不同大小計(jì)算的寄存器max為25,支持網(wǎng)絡(luò)中的5×5塊大小的卷積運(yùn)算;當(dāng)counter_control大于106小于419時(shí),表示網(wǎng)絡(luò)的第三、四、五層計(jì)算,則控制不同大小計(jì)算的寄存器max為9,支持網(wǎng)絡(luò)中的3×3塊大小的卷積運(yùn)算。在計(jì)算卷積操作之前,定義寄存器counter用于計(jì)數(shù),當(dāng)data_in_valid為高,counter等于max時(shí),則計(jì)數(shù)器歸1,重新開始計(jì)數(shù);當(dāng)counter不等于max時(shí),則計(jì)數(shù)器counter自加1,否則為0,依次循環(huán)。
執(zhí)行卷積操作時(shí),當(dāng)計(jì)算器counter等于1時(shí),中間結(jié)果信號(hào)data_temp等于輸入原始數(shù)據(jù)和權(quán)重乘積;當(dāng)計(jì)算器counter大于2小于max時(shí),中間結(jié)果信號(hào)data_temp等于輸入原始數(shù)據(jù)和權(quán)重乘積加前面的中間結(jié)果。當(dāng)counter等于max時(shí),執(zhí)行ReLU操作,對(duì)得到的最終結(jié)果進(jìn)行判斷,當(dāng)data_temp大于等于0,則輸出信號(hào)data_out等于data_temp,否則置為0。其中,當(dāng)data_in_valid為高且counter與max相等,則輸出有效信號(hào)data_out_valid為1,否則為0;當(dāng)data_in_valid為高且counter_sop與max相等,則輸出開始信號(hào)為1,否則為0;數(shù)據(jù)輸出結(jié)束信號(hào)data_out_eop比輸入結(jié)束信號(hào)延兩拍。
2 實(shí)驗(yàn)結(jié)果
在Zynq-7000 XC7Z045-2FFG900CFPGA上電路綜合成功后生成的全局時(shí)序報(bào)告,工作頻率為250Mhz。如表1所示芯片資源利用率情況,開發(fā)板上的資源足夠充足,可以滿足工程實(shí)現(xiàn)需要的資源,符合設(shè)計(jì)的要求。
參考文獻(xiàn)
[1] 雷杰,高鑫,宋杰,etal.深度網(wǎng)絡(luò)模型壓縮綜述[J].軟件學(xué)報(bào),2018,29(2):251-266.
[2] 王磊,趙英海,楊國(guó)順,etal.面向嵌入式應(yīng)用的深度神經(jīng)網(wǎng)絡(luò)模型壓縮技術(shù)綜述[J].北京交通大學(xué)學(xué)報(bào):自然科學(xué)版,2017,41(06):34-41.
[3] 蹇強(qiáng),張培勇,王雪潔.一種可配置的CNN協(xié)加速器的FPGA實(shí)現(xiàn)方法[J].電子學(xué)報(bào),2019,47(7):1525-1531.
[4] 趙彤,喬廬峰,陳慶華.一種基于FPGA的CNN加速器設(shè)計(jì)[J].通信技術(shù),2019(5):1242-1248.
[5] 趙博然.FPGA實(shí)現(xiàn)的可編程神經(jīng)網(wǎng)絡(luò)處理器[D].西安電子科技大學(xué),2018.
[6] 周飛燕,金林鵬,董軍.卷積神經(jīng)網(wǎng)絡(luò)研究綜述[J].計(jì)算機(jī)學(xué)報(bào),2017,40(6):1229-1251.