亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于FPGA的卷積神經(jīng)網(wǎng)絡(luò)的實(shí)現(xiàn)*

        2018-04-18 07:00:26李嘉輝蔡述庭陳學(xué)松熊曉明
        自動(dòng)化與信息工程 2018年1期
        關(guān)鍵詞:流水線卷積神經(jīng)網(wǎng)絡(luò)

        李嘉輝 蔡述庭 陳學(xué)松 熊曉明

        ?

        基于FPGA的卷積神經(jīng)網(wǎng)絡(luò)的實(shí)現(xiàn)*

        李嘉輝 蔡述庭 陳學(xué)松 熊曉明

        (廣東工業(yè)大學(xué)自動(dòng)化學(xué)院)

        現(xiàn)有基于CPU或GPU的卷積神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)方案,無(wú)法兼顧實(shí)時(shí)性、功耗以及便攜性的要求?;贔PGA強(qiáng)大的并行處理能力和超低功耗,在DE1-Soc開(kāi)發(fā)板上采用Verilog HDL實(shí)現(xiàn)了使用MNIST數(shù)據(jù)集的阿拉伯?dāng)?shù)字手寫(xiě)體識(shí)別卷積神經(jīng)網(wǎng)絡(luò)。網(wǎng)絡(luò)的每一層采用流水線和時(shí)分復(fù)用方法;單個(gè)時(shí)鐘周期能完成72次乘累加操作,在100 MHz的工作頻率下,加速器峰值運(yùn)算速度可達(dá)7.2 GMAC/s。與PC上運(yùn)行的定點(diǎn)數(shù)版本的C語(yǔ)言程序相比,在相同錯(cuò)誤率6.43%的情況下,速度是其5.2倍。

        卷積神經(jīng)網(wǎng)絡(luò);FPGA;性能加速

        0 引言

        目前卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)的實(shí)現(xiàn)方案有基于CPU、GPU和FPGA三大類(lèi)。因CPU的結(jié)構(gòu)特點(diǎn)以及通用計(jì)算機(jī)的架構(gòu)限制,導(dǎo)致基于CPU的方案功耗、便攜性和實(shí)時(shí)性不可兼得。雖然GPU具有強(qiáng)大的浮點(diǎn)運(yùn)算和并行處理能力,但基于GPU的方案,存在功耗過(guò)高,移動(dòng)性能也不足的弱點(diǎn)[1-3]。因此,基于CPU或者GPU的實(shí)現(xiàn)方案在追求移動(dòng)性能的場(chǎng)景下均不可取。FPGA具有強(qiáng)大的并行處理能力、靈活的可配置特性和超低功耗,可以考慮作為CNN的實(shí)現(xiàn)平臺(tái)。

        目前,F(xiàn)PGA開(kāi)發(fā)有2種途徑:一種是基于HDL的傳統(tǒng)途徑;另一種是使用高層次綜合工具,如OpenCL或者Xilinx的HLS[4],雖能加快FPGA開(kāi)發(fā)流程,但資源消耗大、性能低,且開(kāi)發(fā)人員不能對(duì)生成的電路進(jìn)行精準(zhǔn)干預(yù)。因此本文使用Verilog HDL語(yǔ)言,在DE1-Soc平臺(tái)下實(shí)現(xiàn)一個(gè)識(shí)別阿拉伯?dāng)?shù)字手寫(xiě)體的CNN網(wǎng)絡(luò)。

        1 網(wǎng)絡(luò)結(jié)構(gòu)

        本文實(shí)現(xiàn)的CNN網(wǎng)絡(luò)整體結(jié)構(gòu)如圖1所示。其中卷積層C1和C3的卷積核都是5×5的矩陣組;下采樣層S4和輸出層之間的192×1矩陣,由下采樣層的12個(gè)4×4矩陣直接展開(kāi)得到,再經(jīng)過(guò)全連接層計(jì)算得到輸出層。

        圖1 CNN網(wǎng)絡(luò)結(jié)構(gòu)示意圖

        2 CNN加速模塊的總體架構(gòu)

        2.1 總體架構(gòu)

        CNN加速系統(tǒng)分為2部分:一部分是在開(kāi)發(fā)板上以Cortex-A9為中心的HPS,主要將樣本數(shù)據(jù)讀取并加載到DDR3 SDRAM的特定地址,然后告知CNN加速模塊數(shù)據(jù)已經(jīng)準(zhǔn)備完畢;另一部分是FPGA內(nèi)部實(shí)現(xiàn)的CNN加速模塊,實(shí)現(xiàn)一個(gè)使用AXI-HP接口的AXI4總線主機(jī),從DDR3 SDRAM中讀取樣本,計(jì)算并將結(jié)果寫(xiě)回DDR3 SDRAM,再通過(guò)中斷通知HPS。另外,HPS通過(guò)AXI4-lite設(shè)置加速模塊的參數(shù),如數(shù)據(jù)存儲(chǔ)地址。加速系統(tǒng)整體架構(gòu)和CNN加速模塊結(jié)構(gòu)圖如圖2、圖3所示。

        2.2 CNN實(shí)現(xiàn)方案特點(diǎn)

        本文CNN實(shí)現(xiàn)方案具有以下特點(diǎn):

        1)通過(guò)時(shí)分復(fù)用降低對(duì)FPGA上DSP等資源的需求;

        2)具體到某一層的實(shí)現(xiàn),采用流水線增加數(shù)據(jù)吞吐率;

        3)使用定點(diǎn)數(shù)代替浮點(diǎn)數(shù),進(jìn)一步降低對(duì)BRAM和DSP的資源消耗;

        4)對(duì)MNIST樣本預(yù)處理,避免因數(shù)據(jù)位數(shù)有限導(dǎo)致溢出。

        圖2 加速系統(tǒng)整體架構(gòu)

        圖3 CNN加速模塊結(jié)構(gòu)圖

        3 CNN各層的實(shí)現(xiàn)

        3.1 卷積層的實(shí)現(xiàn)

        以第一卷積層為例闡述卷積層的實(shí)現(xiàn)方法。第一卷積層的運(yùn)算過(guò)程如圖4所示,6個(gè)卷積核矩陣分別在輸入矩陣進(jìn)行平移,兩者重疊部分相乘求和得到輸出矩陣中的一個(gè)元素。輸入輸出矩陣和卷積核的數(shù)據(jù)在存儲(chǔ)器中的組織情況如圖5所示。每次對(duì)kernels的讀操作,能夠讀取6個(gè)數(shù)據(jù),故可同時(shí)計(jì)算6個(gè)輸出元素。為提高模塊處理能力,采取流水線結(jié)構(gòu),如圖6所示,其中表示當(dāng)前樣本在一批樣本中的序號(hào);和表示輸出元素的坐標(biāo);和表示卷積核與輸入矩陣重疊部分中當(dāng)前處理的元素的坐標(biāo)(相對(duì)于重疊部分)。上述變量用于多層循環(huán)的遍歷,并用于產(chǎn)生輸入地址(i_addr,k_addr)和輸出地址(o_addr)。i_addr和k_addr分別用于檢索輸入和卷積核數(shù)據(jù)。檢索得到的數(shù)據(jù)相乘,各自進(jìn)行累加求和,再由模塊外部的sigmoid函數(shù)求值模塊得到輸出元素,寫(xiě)入到o_addr指定地址中(圖6中,輸出地址傳輸路徑上省略了若干寄存器)。另外,圖6中存儲(chǔ)累加器輸出結(jié)果的寄存器初值是偏置值;粗線表示其上同時(shí)傳輸多個(gè)數(shù)據(jù)。

        圖4 第一卷積層運(yùn)算過(guò)程示意圖

        圖5 第一卷積層的數(shù)據(jù)存儲(chǔ)方式

        圖6 第一卷積層的流水線示意圖

        3.2 下采樣層的實(shí)現(xiàn)

        以第一下采樣層為例闡述下采樣層的實(shí)現(xiàn)方法。第一下采樣層的計(jì)算過(guò)程如圖7所示,一個(gè)樣本有6個(gè)24階輸入方陣,以二階方陣作為單元對(duì)輸入矩陣分塊并計(jì)算各方陣元素平均值,作為其輸出元素。

        下采樣層的輸入輸出數(shù)據(jù)存儲(chǔ)排列方式,也是將矩陣按行展開(kāi)為一維數(shù)組;存儲(chǔ)器中某地址對(duì)應(yīng)的字存儲(chǔ)同一樣本的多個(gè)矩陣相同坐標(biāo)的元素,從而一次訪問(wèn)可同時(shí)計(jì)算多個(gè)輸出矩陣的元素(稱為一組輸出元素)。另外,使用雙端口ram存儲(chǔ)輸入輸出元素,從而只需要2個(gè)時(shí)鐘周期就能計(jì)算一組輸出元素。下采樣層也采取流水線的結(jié)構(gòu)實(shí)現(xiàn),如圖8所示,其中表示當(dāng)前樣本在一批樣本中的序號(hào);和表示當(dāng)前輸出元素在輸出矩陣中的行列坐標(biāo);使用雙端口ram存儲(chǔ)輸入數(shù)據(jù),故各輸出元素的計(jì)算只需讀2次輸入數(shù)據(jù)存儲(chǔ)器input,這2次讀取標(biāo)記為變量。2次讀取的4個(gè)數(shù)據(jù)求和之后,舍棄結(jié)果最后2位,得到平均數(shù)存入寄存器。i_addr,o_addr和圖中粗線與前文意義相同。另外,圖8中輸出地址傳輸路徑省略了若干寄存器。

        圖7 第一下采樣層的計(jì)算過(guò)程示意圖

        圖8 第一下采樣層的流水線示意圖

        3.3 全連接層的實(shí)現(xiàn)

        全連接層的輸入是12個(gè)4階方陣,一個(gè)樣本輸入,最終輸出10個(gè)數(shù)值結(jié)果。權(quán)值矩陣可看做是10組4階方陣,每組12個(gè)方陣。10組權(quán)值矩陣均與輸入的同型矩陣組按元素相乘求和。單個(gè)樣本在該層的輸入數(shù)據(jù)的存儲(chǔ)排列情況,可以看做是字?jǐn)?shù)為16、位寬為12個(gè)數(shù)據(jù)項(xiàng)的一段存儲(chǔ)空間;共10組權(quán)值矩陣中的每一組也可以看成是相同大小的一段存儲(chǔ)空間。整個(gè)權(quán)值矩陣可以存儲(chǔ)在一個(gè)字?jǐn)?shù)為160、位寬為12個(gè)數(shù)據(jù)項(xiàng)的存儲(chǔ)器中。每組權(quán)值矩陣和單個(gè)樣本輸入數(shù)據(jù)存儲(chǔ)情況如圖9所示。

        圖9 全連接層數(shù)據(jù)的存儲(chǔ)示意圖

        全連接層的實(shí)現(xiàn)也通過(guò)并行化和流水線提高數(shù)據(jù)吞吐率,輸入數(shù)據(jù)和權(quán)值矩陣的存儲(chǔ)也用雙端口ram。其流水線示意圖如圖10所示,其中表示當(dāng)前樣本在一批樣本中的序號(hào);和表示當(dāng)前處理的元素在4階方陣中的坐標(biāo);表示當(dāng)前使用哪組權(quán)值矩陣與輸入數(shù)據(jù)相乘。圖10中,w_addr表示用于檢索權(quán)值數(shù)據(jù)的地址;wght是存儲(chǔ)權(quán)值矩陣的存儲(chǔ)器。輸入到sigmoid求值模塊的寄存器初值就是全連接層的某偏置值。

        3.4 sigmoid函數(shù)求值模塊的實(shí)現(xiàn)

        常見(jiàn)的sigmoid函數(shù)求值模塊的實(shí)現(xiàn)方法有3種:1)查表法,將預(yù)先計(jì)算的結(jié)果存儲(chǔ)起來(lái),把輸入數(shù)據(jù)轉(zhuǎn)換為查表地址,查詢結(jié)果;2)直接計(jì)算法,使用較為復(fù)雜的邏輯構(gòu)建計(jì)算電路;3)分段線性近似法,將函數(shù)曲線分為足夠多段,每一段使用直線段近似代替原圖像。因本文使用的FPGA內(nèi)BRAM有限,本設(shè)計(jì)只用于預(yù)測(cè),不需要太高精度,所以使用分段線性近似法進(jìn)行sigmoid求值模塊的實(shí)現(xiàn)。另外,該模塊也采用流水線結(jié)構(gòu)設(shè)計(jì)。

        圖10 全連接層的流水線示意圖

        3.4.1 sigmoid模塊設(shè)計(jì)依據(jù)

        1)本設(shè)計(jì)使用的定點(diǎn)數(shù)包含10位二進(jìn)制小數(shù),近似計(jì)算結(jié)果誤差不應(yīng)超過(guò)0.001;

        3)當(dāng)輸入大于8時(shí),函數(shù)值與1的差值小于0.001。

        線性近似線段參數(shù)的計(jì)算:區(qū)間[0, 8]等分為32段,連接函數(shù)圖像在相鄰兩分點(diǎn)的交點(diǎn),得到線性近似;計(jì)算各線段的斜率和截距。可以驗(yàn)證,近似計(jì)算的誤差不超過(guò)0.001。

        3.4.2 模塊計(jì)算過(guò)程

        1)對(duì)輸入取絕對(duì)值;

        2)根據(jù)絕對(duì)值進(jìn)行近似計(jì)算;

        3)根據(jù)原數(shù)據(jù)符號(hào),決定是否使用1減去第2步的結(jié)果;

        4)輸出結(jié)果。

        4 實(shí)驗(yàn)結(jié)果與分析

        4.1 實(shí)驗(yàn)平臺(tái)和條件

        本設(shè)計(jì)使用MNIST數(shù)據(jù)集作為訓(xùn)練和測(cè)試數(shù)據(jù)。PC配置:i5-3570,8GB DDR3-1600 MHz;開(kāi)發(fā)板上的Soc FPGA芯片是5CSEMA5F31C6,邏輯容量為85 K,并包含一個(gè)以cortex-A9雙核CPU為核心的HPS。首先在PC上使用C語(yǔ)言編寫(xiě)的程序(單精度浮點(diǎn)版本)進(jìn)行網(wǎng)絡(luò)訓(xùn)練(樣本已預(yù)處理),得到參數(shù);然后對(duì)參數(shù)定點(diǎn)化處理作為FPGA加速模塊的參數(shù);最后使用相同的測(cè)試集進(jìn)行測(cè)試,與PC上定點(diǎn)版本的正向預(yù)測(cè)過(guò)程進(jìn)行對(duì)比。CNN加速模塊最終工作頻率為100 MHz。

        樣本數(shù)據(jù)預(yù)處理:原MNIST數(shù)據(jù)集使用uint8存儲(chǔ)數(shù)據(jù);若采用20位定點(diǎn)數(shù),則用原MNIST數(shù)據(jù)集運(yùn)算很可能導(dǎo)致溢出,產(chǎn)生錯(cuò)誤,因此對(duì)樣本進(jìn)行預(yù)處理:設(shè)定閾值,當(dāng)輸入數(shù)據(jù)不超過(guò)該閾值,那么保持原值,否則輸出閾值。本設(shè)計(jì)使用16作為閾值。

        4.2 實(shí)驗(yàn)結(jié)果

        實(shí)驗(yàn)結(jié)果分2部分:PC上的正向預(yù)測(cè)過(guò)程錯(cuò)誤率6.43%,平均每個(gè)樣本耗時(shí)852 us;FPGA方案錯(cuò)誤率為6.43%,平均每個(gè)樣本總耗時(shí)164 us,因此加速效果為5.2倍。

        本設(shè)計(jì)消耗的資源統(tǒng)計(jì):

        logic utilization:7%

        DSP blocks:42%

        total block memory bits:69%

        total registers:4765

        4.3 結(jié)果分析及改進(jìn)

        預(yù)測(cè)錯(cuò)誤率6.43%與同類(lèi)論文對(duì)比偏高,這是因?yàn)镻C上網(wǎng)絡(luò)訓(xùn)練過(guò)程中,只對(duì)訓(xùn)練集樣本進(jìn)行一次遍歷,與FPGA加速模塊的設(shè)計(jì)無(wú)關(guān)。另外,第二卷積層的實(shí)現(xiàn)中,一個(gè)時(shí)鐘周期同時(shí)計(jì)算12個(gè)輸出特征圖的元素,每個(gè)輸出元素需要計(jì)算6對(duì)乘法,因此峰值性能能夠得到7.2 GMAC/s(工作頻率100 MHz)。對(duì)于本設(shè)計(jì)實(shí)現(xiàn)的CNN網(wǎng)絡(luò)算法,一個(gè)樣本的處理需要約2.06×105次乘累加操作,因此加速模塊的平均性能達(dá)到1.26 GMAC/s。對(duì)比文獻(xiàn)[5]中的性能,本文提出的設(shè)計(jì)性能更優(yōu)。另外,文獻(xiàn)[5]中使用浮點(diǎn)數(shù)進(jìn)行數(shù)據(jù)處理,以及關(guān)于激活函數(shù)計(jì)算使用查表法,都導(dǎo)致較高的BRAM使用率。

        在正向預(yù)測(cè)過(guò)程中,卷積層用時(shí)最長(zhǎng),特別是第一卷積層,因其輸出矩陣尺寸較大且模塊的并行度不高(每個(gè)時(shí)鐘計(jì)算5次乘法)??梢钥紤]將第一卷積層的輸入數(shù)據(jù)的存儲(chǔ)器從1個(gè)擴(kuò)展為5個(gè),那么可以同時(shí)從5個(gè)存儲(chǔ)器獲取數(shù)據(jù)來(lái)源,從而提高模塊并行度;而由此導(dǎo)致BRAM不足的問(wèn)題,將輸入樣本數(shù)據(jù)進(jìn)行二值化即可。

        5 結(jié)論

        本文提出的基于FPGA的CNN加速器設(shè)計(jì),采用流水線和并行計(jì)算的方法,提高了加速器的吞吐率;使用時(shí)分復(fù)用的方法以及用定點(diǎn)數(shù)代替浮點(diǎn)數(shù),降低了資源利用率。通過(guò)采用MNIST數(shù)據(jù)集進(jìn)行測(cè)試,對(duì)比PC運(yùn)行的C語(yǔ)言程序,在相同預(yù)測(cè)準(zhǔn)確率的情況下,性能是PC實(shí)現(xiàn)的5.2倍。

        [1] 畢占甲.基于多GPU的多層神經(jīng)網(wǎng)絡(luò)并行加速訓(xùn)練算法的研究[D].哈爾濱:哈爾濱工業(yè)大學(xué),2015.

        [2] Strigl D, Kofler K, Podlipnig S. Performance and scalability of GPU-based convolutional neural networks[C]. 18th Euromicro Conference on Parallel, Distributed and Network-Based Processing, 2010.

        [3] 劉琦,黃咨,陳璐艷,等.基于GPU的卷積檢測(cè)模型加速[J].計(jì)算機(jī)應(yīng)用與軟件,2016,33(5):226-230.

        [4] Zhang Chen, Li Peng, Sun Guanyu, et al. Optimizing FPGA-based accelerator design for deep convolutional neural networks[C]. In ACM Int. Symp. On Field Programmable Gate Arrays, 2015:161-170.

        [5] 余子健.基于FPGA的卷積神經(jīng)網(wǎng)絡(luò)加速器[D].杭州:浙江大學(xué),2016.

        [6] Suda N, Chandra V, Dasika G, et al. Throughput-optimized OpenCL-based FPGA accelerator for large-scale convolutional neural networks[C].Proceedings of the 2016 ACM/SIGDA International Symposium on Field-Programmable Gate Arrays. ACM, 2016: 16-25.

        The Realization of the Convolution Neural Network Based on FPGA

        Li Jiahui Cai Shuting Chen Xuesong Xiong Xiaoming

        (School of Automation, Guangdong University of Technology)

        Convolutional Neural Network is a computation intensive algorithm based on deep learning, and it is common used in image classification, video recognition, etc. Due to the powerful parallel capability and flexibility of FPGA, it is frequently used as the platform to implementation of CNN. Meanwhile, the rapidly emerging mobile application of deep learning suggest that it is very significant to implement a CNN on mobile platform. Therefore, a DE1-Soc development board was used to implement a CNN network by Verilog HDL approach, using mnist as samples data. Finally, the implementation is 5.2 times faster than that on PC.

        Convolution Neural Network; FPGA; Performance Acceleration

        李嘉輝,男,1991年生,在讀碩士,主要研究方向:FPGA加速、深度學(xué)習(xí)。

        蔡述庭(通訊作者),男,1979年生,博士,副教授,主要研究方向:FPGA加速、深度學(xué)習(xí)。E-mail:shutingcai@126.com

        陳學(xué)松,男,1978年生,博士,副教授,主要研究方向:強(qiáng)化學(xué)習(xí)、機(jī)器學(xué)習(xí)。

        熊曉明,男,1956年生,博士,教授,主要研究方向:IC設(shè)計(jì)、EDA技術(shù)。

        國(guó)家自然科學(xué)基金(61201392);廣東省自然科學(xué)基金-自由申請(qǐng)項(xiàng)目(2015A030313497)。

        猜你喜歡
        流水線卷積神經(jīng)網(wǎng)絡(luò)
        Gen Z Migrant Workers Are Leaving the Assembly Line
        基于3D-Winograd的快速卷積算法設(shè)計(jì)及FPGA實(shí)現(xiàn)
        流水線
        神經(jīng)網(wǎng)絡(luò)抑制無(wú)線通信干擾探究
        電子制作(2019年19期)2019-11-23 08:42:00
        從濾波器理解卷積
        電子制作(2019年11期)2019-07-04 00:34:38
        基于傅里葉域卷積表示的目標(biāo)跟蹤算法
        基于神經(jīng)網(wǎng)絡(luò)的拉矯機(jī)控制模型建立
        報(bào)廢汽車(chē)拆解半自動(dòng)流水線研究
        復(fù)數(shù)神經(jīng)網(wǎng)絡(luò)在基于WiFi的室內(nèi)LBS應(yīng)用
        基于支持向量機(jī)回歸和RBF神經(jīng)網(wǎng)絡(luò)的PID整定
        日本一区二区三深夜不卡| 日韩无套内射视频6| 国产91精选在线观看麻豆| 久久狠狠爱亚洲综合影院| 日本本土精品午夜视频| 人妻少妇乱子伦无码视频专区| 亚洲国产高清在线一区二区三区| 在熟睡夫面前侵犯我在线播放| 草草网站影院白丝内射| 精品丝袜国产在线播放| 国产成人亚洲精品91专区高清| 成在线人av免费无码高潮喷水 | 91极品尤物在线观看播放| 在线日本国产成人免费精品| 天天躁夜夜躁狠狠躁2021a2| 亚洲综合色丁香婷婷六月图片| 国产裸体AV久无码无遮挡| 国产一区二区三区在线男友| 精品国产性色无码av网站| 欧美国产日产一区二区 | 搞黄色很刺激的网站二区| 日韩在线 | 中文| 日韩内射美女人妻一区二区三区| 中文字幕天天躁日日躁狠狠| av网站免费观看入口| 蜜臀av色欲a片无码精品一区| 激情97综合亚洲色婷婷五| 亚洲一码二码在线观看| 人妻一区二区三区av| 国产精品欧美福利久久| 国产精品网站夜色| 日本视频一区二区三区| 蜜臀av色欲a片无码精品一区| 中文字幕一区二区三区久久网站| 国产小视频一区二区三区| 在线a亚洲视频播放在线播放| 亚洲精品美女久久久久99| 91精品久久久久含羞草| 国产影院一区二区在线| 久久久久人妻一区精品| 9191在线亚洲精品|