• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      卷積神經(jīng)網(wǎng)絡(luò)RLeNet加速器設(shè)計

      2021-03-22 02:56:46康磊李慧鄭豪威李鑫
      電腦知識與技術(shù) 2021年6期

      康磊 李慧 鄭豪威 李鑫

      摘要:針對卷積神經(jīng)網(wǎng)絡(luò)(CNN)對運算的需求,現(xiàn)場可編程邏輯門陣列(FPGA)可以充分挖掘CNN內(nèi)部并行計算的特性,提高運算速度。因此,本文基于FPGA開發(fā)平臺,從模型優(yōu)化、參數(shù)優(yōu)化,硬件加速以及手寫體數(shù)字識別四個方面對CNN的FPGA加速及應(yīng)用進(jìn)行研究。提出一種數(shù)字識別網(wǎng)絡(luò)RLeNet,并對網(wǎng)絡(luò)進(jìn)行參數(shù)優(yōu)化,卷積運算加速采用脈沖陣列與加法樹結(jié)合的硬件結(jié)構(gòu)實現(xiàn),同時使用并行技術(shù)和流水線技術(shù)優(yōu)化加速,并使用microblaze IP通過中斷控制CNN加速器IP接收串口發(fā)送的圖片數(shù)據(jù)進(jìn)行預(yù)測,輸出結(jié)果。最后在Xilinx Nexys 4 DDR:Artix-7開發(fā)板上實現(xiàn)了MNIST數(shù)據(jù)集手寫體數(shù)字識別預(yù)測過程,當(dāng)系統(tǒng)時鐘為200MHz時,預(yù)測一張圖片的時間為36.47us。

      關(guān)鍵詞:CNN;FPGA;RLeNet;MNIST;手寫體數(shù)字識別

      中圖分類號:TP389.1? ? ?文獻(xiàn)標(biāo)識碼: A

      文章編號:1009-3044(2021)06-0016-04

      Abstract: In response to the requirement of convolutional neural network (CNN) for multiplication and accu-mulation operations, Field Programmable Logic Gate Array (FPGA) can fully tap the characteristics of parallel computing within CNN and increase the speed of operation. Therefore, based on the FPGA development platform, this article studies the FPGA acceleration and application of CNN from four aspects: model optimization, parameter optimization, hardware acceleration, and handwritten digit recognition. Propose a digital recognition network RLeNet, and optimize the parameters of the network. Convolution operation acceleration use a hardware structure combining pulse array and addition tree,parallel technology,pipeline technology, and microblaze IP is used to control the CNN accelerator through interrupts. The IP receives the picture data sent by the serial port for prediction and outputs the result. Finally, on the Xilinx Nexys 4 DDR: Artix-7 development board, the MNIST data set handwritten digit recognition and prediction process is implemented. When the system clock is 200MHz, the time to predict a picture is 36.47us.

      Key words: CNN; FPGA; RLeNet; MNIST; handwritten digit recognition

      1 引言

      CNN作為一種典型的深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),受到自然視覺認(rèn)知機(jī)制啟發(fā)而來[1],在視頻處理、人臉識別、語音識別和自然語言處理等很多方面都表現(xiàn)得非常出色[2-3]。但CNN需要大量的計算,在這樣的背景下,F(xiàn)PGA 似乎是一種非常理想的選擇,同GPU相比,F(xiàn)PGA 不僅擁有數(shù)據(jù)并行的特點,還擁有流水線并行的特點[4]。目前很多研究者對FPGA加速進(jìn)行了研究,例如Yu-Hsin Chen提出的Eyeriss高效可配置卷積神經(jīng)網(wǎng)絡(luò)[5],中科院Temam教授和陳教授合作的機(jī)器學(xué)習(xí)加速器DianNao[6],以及google的TPU[7]等。本文在已有加速器的基礎(chǔ)上,進(jìn)行了數(shù)據(jù)優(yōu)化、加入流水線技術(shù)實現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)的加速,并使用開發(fā)板自帶microblaze通過中斷控制CNN加速IP輸出預(yù)測結(jié)果。

      2 系統(tǒng)總體介紹

      2.1 RLeNet模型結(jié)構(gòu)

      RLeNet模型是在LeNet-5[8]模型的基礎(chǔ)上進(jìn)行改進(jìn)得到的,LeNet-5模型共8層,包括卷積層1(C1),池化層1(P1),卷積層2(C2),池化層2(P2),平壓層(F1),全連接層1(D1),全連接層2(D2),輸出層(Output)。本文對模型進(jìn)行如下改進(jìn):將LeNet-5的D1層,D2層刪除,只保留Output輸出層,改進(jìn)后的模型命名為RLeNet(Reduced LeNet-5),改進(jìn)后的模型共有6層,包括卷積層1(C1),池化層1(P1),卷積層2(C2),池化層2(P2),平壓層(F1),輸出層(Output)。RLeNet的模型結(jié)構(gòu)如圖1所示。

      表1為LeNet-5、RLeNet模型各層參數(shù)量對比。其中,LeNet-5的D1層、D2層共有41004個float32數(shù)據(jù),約占總數(shù)據(jù)44426個float32(177.8KB)的92.3%。改進(jìn)后的模型RLeNet共有5142個float32數(shù)據(jù)(20.6KB),模型參數(shù)數(shù)據(jù)量由原來的177.8KB降低到20.6KB。模型使用Keras框架 [9],模型訓(xùn)練完成后,準(zhǔn)確率為98.5%,和LeNet-5的精確度98.7%相比,模型精確度幾乎沒有降低,但是模型參數(shù)數(shù)據(jù)量減少為原來的11.6%。

      2.2 系統(tǒng)硬件結(jié)構(gòu)

      CNN加速器IP的硬件結(jié)構(gòu)如圖2所示。整個系統(tǒng)由CPU,中斷,CNN加速器IP和UART串口模塊組成。系統(tǒng)工作流程為:CPU通過按鍵中斷接收CNN加速器IP使信號,當(dāng)CPU接收到該使能信號后,等待串口發(fā)送的圖片數(shù)據(jù),然后將接收到的圖片數(shù)據(jù)送入Block_ram,CNN加速器IP從Block_ram中讀取圖片,進(jìn)行卷積運算。運算完成后,將運算結(jié)果返回給CPU,CPU將結(jié)果通過LED燈顯示。其中,CNN加速器IP完成圖片的預(yù)測,它主要包括卷積模塊,池化模塊,全連接模塊,輸入輸出模塊。CNN加速器IP工作流程是:首先由控制器發(fā)出控制信號,從數(shù)據(jù)寄存器讀取輸入和權(quán)重數(shù)據(jù)分別放入移位寄存器和權(quán)重Buffer,將數(shù)據(jù)和權(quán)重分別從移位寄存器和權(quán)重Buffer讀出,送入乘加模塊進(jìn)行卷積運算。卷積運算完成之后,將卷積結(jié)果送入池化層進(jìn)行池化運算,池化運算的結(jié)果送入特征圖Buffer,兩次卷積池化后,將數(shù)據(jù)進(jìn)行平壓,最后進(jìn)行全連接運算,輸出圖片的預(yù)測結(jié)果。

      3 數(shù)據(jù)輸入

      3.1 數(shù)據(jù)類型轉(zhuǎn)換

      相比于浮點運算,F(xiàn)PGA在做定點運算會消耗更少的資源,同時有更高的性能[10]。因此,本文將RLeNet模型參數(shù)將float32的模型參數(shù)左移13位并保存為int16類型參數(shù),存入.coe格式文件中。輸入數(shù)據(jù)為28*28的灰度圖片,將輸入數(shù)據(jù)轉(zhuǎn)為uint8并保存為.txt格式文件。

      3.2 串口數(shù)據(jù)輸入

      數(shù)據(jù)輸入分為兩部分,圖片數(shù)據(jù)輸入和權(quán)重數(shù)據(jù)輸入。權(quán)重數(shù)據(jù)輸入直接存入片上的block_ram中,圖片數(shù)據(jù)通過uart_ctrl模塊控制串口將上位機(jī)發(fā)送的數(shù)據(jù)存儲到片上的block_ram中。圖片數(shù)據(jù)發(fā)送主要包括uart和uart_ctrl以及數(shù)據(jù)存儲三個模塊。圖片數(shù)據(jù)發(fā)送模塊結(jié)構(gòu)如圖3所示:

      3.3 數(shù)據(jù)處理

      圖片數(shù)據(jù)通過串口發(fā)送到block_ram中后,CNN IP將數(shù)據(jù)從block_ram中讀入shift_ram,將串行輸入轉(zhuǎn)為并行輸出,獲取卷積運算的輸入滑窗。

      卷積運算的輸入滑窗大小和卷積核大小相同,滑動順序是:從圖像左上角開始,從左到右每次滑動一個單元,在滑窗到達(dá)輸入的最右端時,滑窗從上到下滑動一個單元,再次從最左端開始,每次向右滑動一個單元,最后滑動窗后到達(dá)圖像右下角結(jié)束[11]。圖4為本文卷積運算的輸入,其中灰色部分是第一個5*5輸入滑窗。黑色箭頭表示滑窗滑動順序。

      為了硬件實現(xiàn)卷積運算的滑動窗口,本文使用shift_ram生成卷積滑窗像素矩陣。將存放圖片數(shù)據(jù)的block_ram和4個28*9bit的Shift_ram (Shift_ram1、Shift_ram2、Shift_ram3、Shift_ram4)以圖5方式連接。從block_ram中讀圖片數(shù)據(jù)進(jìn)入Shift_ram,裝滿后,輸出Out_0,Out_1,Out_2,Out_3,Out_4的值為1、29、57、85、113和圖5中灰色卷積滑窗的第一列數(shù)據(jù)相同(粗黑框圈出),然后將這五個數(shù)據(jù)存儲到5*5寄存器中的最右邊一列。

      下個CLK,Shift_ram4移除數(shù)據(jù)1,數(shù)據(jù)逐個移動后,得到圖6中的Out1_0,Out1_1,Out1_2,Out1_3,Out1_4的值為2、30、58、86、114和圖5中灰色卷積滑窗的第二列數(shù)據(jù)相同(虛線框圈出)。將上一個CLK獲取的存在5*5寄存器中的五個輸出左移,再將當(dāng)前CLK五個輸出存儲到5*5寄存器中的最右邊一列。五個時鐘周期后,得到5*5的卷積輸入窗口。之后每個CLK,移除5*5寄存器最左邊一列數(shù)據(jù),獲得下一個卷積輸入滑窗。

      這樣獲取輸入滑窗會產(chǎn)生無用的滑窗,在移除數(shù)據(jù)為25至30時,五個ClK內(nèi)讀取的分別是序號為26,27,28,29,30為首地址的列,但在實際卷積過程中,滑窗右端到達(dá)序號為28的列時,滑窗會向下移動,直接讀取以29,30,31,32,33為首的列。在卷積完成后,需要將這些無用數(shù)據(jù)刪除。

      4 卷積模塊實現(xiàn)

      4.1 單個乘單元(Mul)硬件實現(xiàn)

      卷積運算的單個乘法模塊Mul如圖7所示,將輸入數(shù)據(jù)Input_x和權(quán)重Weight進(jìn)行乘運算,運算結(jié)果Output_y保存在寄存器中,同時,輸入數(shù)據(jù)Intput_x向下傳輸。

      4.2 卷積運算(Conv)硬件實現(xiàn)

      本文卷積運算模塊如圖8所示,首先將Weight數(shù)據(jù)放入Mul單元,然后將5*5的輸入數(shù)據(jù)Input_x送入25個并行Mul單元,下一個CLK,將運算結(jié)果送入加法樹,一個CLK后輸出加法器運算結(jié)果。加法樹共分為五級,第1級共有13個加法器,將25個乘法器結(jié)果和一個bias分別送入13個加法器。第2級將第1級計算結(jié)果送入6個加法器(余下1個后面算),以此類推,第5級將第4級結(jié)果送入加法器,得到最后的結(jié)果。

      4.3 乘加模塊并行運算設(shè)計

      本文乘加模塊并行運算設(shè)計是同一個輸入滑窗和多個卷積核進(jìn)行并行計算,輸出多個卷積運算結(jié)果。本文卷積層2將12*12輸入和16個卷積核同時進(jìn)行并行運算,輸出運算結(jié)果,卷積模塊并行設(shè)計硬件結(jié)構(gòu)如圖9所示。

      5 池化模塊設(shè)計

      5.1 池化模塊輸入

      卷積運算完成后,將其運算結(jié)果保存到存儲器中。由于卷積運算的卷積核有多個channel,需要將卷積運算多個channel的結(jié)果進(jìn)行累加求和,作為池化模塊的輸入。

      5.2 池化運算硬件實現(xiàn)

      在得到池化運算輸入后,進(jìn)行池化運算。本文采用步長為2的最大池化。在2*2的滑窗內(nèi)獲取最大值。首先,通過地址獲取池化窗口的輸入,以池化1為例,卷積運算可以獲得24*28的卷積結(jié)果并存儲在寄存器中。那么第一次池化運算的輸入的窗口為地址0,地址1(0+1),地址28(0+28),地址29(0+29)中的數(shù)據(jù)。第二次卷積運算輸入滑窗數(shù)據(jù)為存儲器中數(shù)據(jù)地址2,地址3(2+1),地址30(2+28),地址31(2+29)中的數(shù)據(jù)。另外,由于卷積運算輸出為24*28,實際卷積層1的輸出應(yīng)為24*24,在池化運算時,無用數(shù)據(jù)不需要進(jìn)行池化運算,在輸入行地址大于24時,行地址等于0,列地址加56(向下移兩列)。

      在獲取輸入滑窗后,通過三次兩兩比較得到2*2滑窗內(nèi)的最大值。如圖10所示,首先比較din_x和din_y,得到max1和max2,之后比較max1和max2大小,輸出較大數(shù)max。之后,滑窗向右移動兩個單元,獲取下個滑窗中的最大值。

      池化運算并行接收多個卷積運算的結(jié)果,將結(jié)果累加,之后并行進(jìn)行池化運算。

      6 全連接模塊設(shè)計

      全連接模塊的實現(xiàn)采用乘加運算,全連接模塊輸入為平壓層的輸出,輸出為10個數(shù)字的預(yù)測結(jié)果。全連接模塊的運算是輸入和權(quán)重進(jìn)行乘累加運算,獲取一個數(shù)字預(yù)測結(jié)果的輸出,循環(huán)十次之后,輸出十個手寫體數(shù)字的預(yù)測結(jié)果。硬件設(shè)計將輸入數(shù)據(jù)和權(quán)重數(shù)據(jù)放入乘法器,獲取乘運算結(jié)果,然后和之前的結(jié)果進(jìn)行累加,獲取數(shù)字預(yù)測結(jié)果。

      7 實驗結(jié)果

      本設(shè)計是在Vivado ISE下使用Verilog HDL進(jìn)行開發(fā),使用Xilinx公司的Nexys 4 DDR : Artix-7開發(fā)板進(jìn)行測試,主頻為0.2GHz。CPU環(huán)境為CORE i7 10th四核處理器,主頻為3.9GHz。 GPU型號為Tesla P 100,主頻為1.4GHz。本文采用MNIST數(shù)據(jù)集手寫體數(shù)字為輸入數(shù)據(jù),數(shù)據(jù)為28*28的單通道灰度圖片。

      本文將浮點輸入和權(quán)重改為9位定點后,模型用1000張圖片進(jìn)行測試,檢驗?zāi)P蜏?zhǔn)確度,最終測試結(jié)果,共有5張數(shù)據(jù)預(yù)測不正確,準(zhǔn)確率達(dá)到99.5%。在200MHz的CLK下,一張圖片在卷積層1做浮點運算的時間為9.1us做定點運算的時間為1.58us,速度提高了約6倍。

      表2為不同平臺下,CNN運行的時間及能耗對比[12]。CPU運算時間是在python環(huán)境下執(zhí)行模型預(yù)測函數(shù),得到預(yù)測12000張圖片的時間,再算出預(yù)測一張圖片時間,同理得GPU平臺圖片預(yù)測時間。FPGA平臺上的運算時間是采用CNN加速器IP運算得到的預(yù)測時間,由表2可知,在CPU平臺上,卷積網(wǎng)絡(luò)運行時間約為在FPGA平臺運行時間的2倍。而在GPU平臺上,卷積網(wǎng)絡(luò)的功耗比在FPGA平臺多4倍。

      CNN IP加速后,片上寄存器使用了20974個,LUT as logic使用了53123個,LUT as memory使用了2742個,block_ram使用了48.5個。系統(tǒng)資源消耗較高。

      8 結(jié)語

      研究了手寫體數(shù)字識別的CNN的FPGA實現(xiàn),提出了一種基于數(shù)據(jù)優(yōu)化及多級并行流水結(jié)構(gòu)的CNN加速器,并將其作為外設(shè),將數(shù)據(jù)。通過資源復(fù)用、并行計算和流水線技術(shù),來對卷積運算進(jìn)行加速。最后實驗結(jié)果表明,系統(tǒng)的運算速度以及資源利用率得到提高,系統(tǒng)預(yù)測一張圖片約為36us,其計算速度是CPU的2倍,而系統(tǒng)的能耗是GPU的1/4。但系統(tǒng)的LUTs資源占用較多,可以通過其他優(yōu)化方式降低系統(tǒng)資源占用率。

      參考文獻(xiàn):

      [1] Gu, J., Wang, Z., Kuen, J., Ma, L., Shahroudy, A., Shuai, B., Liu, T., Wang, X., Wang, L., Wang, G. and Cai, J., [J].2015. Re-cent advances in convolutional neural networks. arXiv preprint arXiv:1512.07108.

      [2] Chen Y H , Emer J , Sze V . Eyeriss: A Spatial Architecture for Energy-Efficient Dataflow for Convolutional Neural Networks[C]// International Symposium on Computer Architecture (ISCA). IEEE Computer Society, 2016..

      [3] Chen T , Du Z , Sun N , et al. DianNao: a small-footprint high-throughput accelerator for ubiquitous ma-chine-learning[C]// International Conference on Architectural Support for Programming Languages & Operating Systems. ACM, 2014.

      [4] MONREALE A, PINELLI F, TRASARTI R, et al. WhereN-ext: a location predictor on trajectory pattern min-ing[C]//Proceedings of the 15th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining, Paris, Jun 28-Jul 1, 2009. New York: ACM, 2009: 637-646.

      [5] Kumar S , Bitorff V , Chen D , et al. Scale MLPerf-0.6 models on Google TPU-v3 Pods[J]. 2019.

      [6] 蹇強,張培勇,王雪潔.一種可配置的CNN協(xié)加速器的FPGA實現(xiàn)方法[J].電子學(xué)報,2019,47(7):1525-1531.

      [7] Han X , Zhou D , Wang S , et al. CNN-MERP: An FPGA-based memory-efficient reconfigurable processor for forward and backward propagation of convolutional neural networks[C]// 2016 IEEE 34th International Conference on Computer Design (ICCD). IEEE, 2016.

      [8] Zhang C, Li P, Sun G, et al. Optimizing fpga-based accelerator design for deep convolutional neural networks[C] Proceedings of the 2015 ACM/SIGDA International Symposium on Field-Programmable Gate Arrays. ACM, 2015: 161-170.

      [9] Cavigelli L , Magno M , Benini L . Accelerating real-time embedded scene labeling with convolutional networks[J]. 2015:1-6.

      [10] Chen Y H , Krishna T , Emer J S , et al. Eyeriss: An Ener-gy-Efficient Reconfigurable Accelerator for Deep Convolu-tional Neural Networks[C]// Solid-state Circuits Conference. IEEE, 2016.

      [11] Qiu J , Wang J , Yao S , et al. Going Deeper with Embedded FPGA Platform for Convolutional Neural Network[C]// Pro-ceedings of the 2016 ACM/SIGDA International Symposium on Field-Programmable Gate Arrays. ACM, 2016.2001 March.

      [12] 傅思揚,陳華,郁發(fā)新.基于RISC-V的卷積神經(jīng)網(wǎng)絡(luò)處理器設(shè)計與實現(xiàn)[J].微電子學(xué)與計算機(jī),2020,37(4):49-54.

      【通聯(lián)編輯:梁書】

      金塔县| 凯里市| 汝阳县| 通许县| 化德县| 清河县| 建水县| 林甸县| 乌鲁木齐县| 澄城县| 仁化县| 潞城市| 富顺县| 辰溪县| 平顶山市| 广安市| 广平县| 浦北县| 房产| 慈溪市| 邛崃市| 卓尼县| 乌鲁木齐市| 龙井市| 高要市| 美姑县| 大余县| 清水县| 屯留县| 东方市| 白沙| 奉贤区| 监利县| 金山区| 博湖县| 安泽县| 镇沅| 兰西县| 新安县| 青铜峡市| 石嘴山市|