• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    可實現(xiàn)時分復(fù)用的CNN卷積層和池化層IP核設(shè)計

    2020-12-26 02:56:36劉宇紅張榮芬
    計算機(jī)工程與應(yīng)用 2020年24期
    關(guān)鍵詞:池化層池化偏置

    張 衛(wèi),劉宇紅,張榮芬

    貴州大學(xué) 大數(shù)據(jù)與信息工程學(xué)院,貴陽550025

    1 引言

    當(dāng)前,深度學(xué)習(xí)(Deep Learning)得到了廣泛的應(yīng)用與發(fā)展[1-2],而CNN也在越來越多的場景中被使用,諸如在視頻分析[3-4]、人臉識別[5-6]等領(lǐng)域都得到了廣泛的應(yīng)用,尤其是在圖像識別場景中取得了突破性的進(jìn)展。

    CNN 是一種擁有多層感知器、局部連接和權(quán)值共享的網(wǎng)絡(luò)結(jié)構(gòu)[7],有較強(qiáng)的容錯、學(xué)習(xí)和并行處理能力[8],從而降低了網(wǎng)絡(luò)模型的復(fù)雜性和網(wǎng)絡(luò)連接權(quán)值的個數(shù)。雖然CNN 的應(yīng)用廣泛,但需要大量時間來訓(xùn)練其模型的參數(shù),特別是在參數(shù)數(shù)據(jù)量很大時。現(xiàn)階段實現(xiàn)CNN主要采用消費級的通用處理器(Central Processing Unit,CPU)來實現(xiàn)[9],數(shù)據(jù)量過大時會采用圖形處理器(Graphics Processing Unit,GPU)來實現(xiàn)。近年來,基于FPGA 實現(xiàn)的方式凸顯出巨大的優(yōu)勢[10]。CNN 是典型的并行運(yùn)算模型,在CNN的卷積層和池化層中,每一層的卷積運(yùn)算都只與當(dāng)前層的特征運(yùn)算核相關(guān),與其他層相比具有獨立性和不相關(guān)性。而FPGA 作為一種高度密集型計算加速器件,其硬件結(jié)構(gòu)有助于算法中并行運(yùn)算的加速[11]。當(dāng)前,利用FPGA 實現(xiàn)CNN 的方式以Verilog HDL 和HLS 為主。北京大學(xué)軟件與微電子學(xué)院采用Verilog HDL語言來設(shè)計IP核[12],并根據(jù)CNN模型設(shè)置了多種不同種類的IP 核,可實例化不同的CNN網(wǎng)絡(luò),充分利用FPGA 的并行性提升了CNN 運(yùn)算速度和效率,但I(xiàn)P核設(shè)計過于復(fù)雜,通用性不強(qiáng),并且需要具備一定的硬件邏輯知識才能使用這些IP核。而HLS實際上是把高層的C、C++或SystemC的代碼綜合成Verilog HDL 描述,具有易于理解與使用、開發(fā)時間短等特點,故本文采用HLS來設(shè)計CNN中的卷積層和池化層的IP核,進(jìn)而利用IP核來搭建整個系統(tǒng)。

    本文首先對深度學(xué)習(xí)中的CNN算法模型及結(jié)構(gòu)進(jìn)行介紹和研究,然后將CNN 模型中的卷積層和池化層設(shè)計為IP 核,通過將函數(shù)的運(yùn)算規(guī)模參數(shù)協(xié)議設(shè)為axi_master,減少了模型分類的時間,提升了模型運(yùn)算性能。為了驗證IP核的功能性,本文進(jìn)一步采用時分復(fù)用技術(shù)在FPGA平臺上對MNIST數(shù)據(jù)集進(jìn)行了系統(tǒng)驗證。

    2 CNN算法模型

    2.1 CNN模型

    神經(jīng)網(wǎng)絡(luò)是一種模仿生物的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)和功能的數(shù)學(xué)模型,可以模擬人的判斷能力。CNN 是神經(jīng)網(wǎng)絡(luò)的一種,在圖像和語音識別方面能夠給出更好的判斷結(jié)果。

    CNN 包含卷積層、池化層和全連接層。典型的卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示。一個卷積塊為連續(xù)M個卷積層和個b池化層,一個卷積網(wǎng)絡(luò)可以堆疊N個連續(xù)的卷積塊,然后再接著K個全連接層。其中,卷積層通過“卷積核”作為中介。同一個卷積核在所有圖像內(nèi)是共享的,圖像通過卷積操作后仍然保留原先的位置關(guān)系,能得到圖像中的某些特征。但通過卷積層處理的特征維度大,數(shù)據(jù)量大,需要使用池化層進(jìn)行下采樣后才可進(jìn)行分類。池化層保留數(shù)據(jù)中最顯著的特征,不會對數(shù)據(jù)丟失產(chǎn)生影響。全連接層則是一個完全連接的神經(jīng)網(wǎng)絡(luò),根據(jù)權(quán)重每個神經(jīng)元反饋的比重不一樣,最后通過Softmax函數(shù)得到分類的結(jié)果。

    圖1 典型的卷積網(wǎng)絡(luò)神經(jīng)結(jié)構(gòu)

    得到分類結(jié)果后,CNN 通過誤差反向傳播算法來進(jìn)行權(quán)重參數(shù)和偏置參數(shù)的學(xué)習(xí),這主要通過計算卷積層中參數(shù)的梯度來實現(xiàn)。具體計算過程可由如下公式表示。

    第l個卷積層的第p(1 ≤p≤P)個特征映射凈輸入Z(l,p)可由公式(1)表示:

    其中,X(l-1)∈R(M×N×D)為第l-1 層的輸入特征映射,W(l,p,d)和b(l,p)為第l層的卷積核以及偏置,該層共有P×D個卷積核和P個偏置,可以分別使用鏈?zhǔn)椒▌t來計算其梯度。

    損失函數(shù)L(Y,Y?)關(guān)于卷積核W(l,p,d)和偏置b(l,p)的偏導(dǎo)分別由公式(2)和公式(3)表示:

    其中,1 ≤i≤M-l+1,1 ≤j≤N-p+1。可以看出,每層參數(shù)的梯度依賴其所在層的誤差項δ(l,p)。卷積層和池化層的誤差項的計算不同,分別由公式(4)和公式(5)表示:

    2.2 本文CNN模型

    本文所設(shè)計的CNN 模型結(jié)構(gòu)如圖2 所示。該結(jié)構(gòu)有10 層,第1 層和最后一層分別是輸入層和輸出層,輸入層完成測試圖像數(shù)據(jù)的輸入獲取,因為實驗中采用MNIST數(shù)據(jù)集,所以輸入數(shù)據(jù)為784個。輸出層與前一層連接的權(quán)重個數(shù)為20×10=200,輸出結(jié)果為10種。為了降低過擬合,系統(tǒng)在輸出層的前一層還加入了Dropout層。

    第1、2、3、4、6、8 層為卷積層,卷積核有5×5 和3×3兩種,卷積核移動步長均為1,無填充。第5層和第7層為池化層,池化步長均為2,均采用最大池化。系統(tǒng)設(shè)計采用Relu函數(shù)作為激活函數(shù)。

    各卷積層的參數(shù)為:

    卷積層1 權(quán)重為5×5×5=125個,偏置為5個。

    卷積層2 權(quán)重為5×5×5×5=625個,偏置為5個。

    卷積層3 權(quán)重為3×3×5×5=225個,偏置為5個。

    圖2 本文設(shè)計的CNN網(wǎng)絡(luò)層次結(jié)構(gòu)圖

    卷積層4 權(quán)重為3×3×5×5=225個,偏置為5個。

    卷積層6 權(quán)重為3×3×5×10=450個,偏置為10個。

    卷積層8 權(quán)重為3×3×10×20=1 800個,偏置為20個。

    因此整個卷積層總共有3 270個參數(shù)。

    3 CNN模型中的卷積層IP核和池化層IP核的設(shè)計

    圖2 模型中卷積層和池化層均采用HLS 來實現(xiàn)。HLS 實際上是把高層的C、C++或SystemC 的代碼綜合成Verilog HDL描述,然后用下層的邏輯綜合來獲得網(wǎng)絡(luò)表,最后生成硬件電路。本文采用C 語言來編寫代碼,使用Vivado HLS工具來生成IP核。

    3.1 卷積層IP核

    編寫C 語言后,添加人為約束,就可以得到想要的硬件電路。其中,人為約束是設(shè)計電路的重點。本文設(shè)計的卷積電路是通用的,支持不同規(guī)格的輸入。用于實現(xiàn)卷積層IP核的Conv函數(shù)的表達(dá)式如下所示:

    void Conv()

    {填充運(yùn)算

    for循環(huán)1:遍歷CHout

    for循環(huán)2:遍歷Hin

    for循環(huán)3:遍歷Win

    {for循環(huán)4:遍歷Ky

    for循環(huán)5:遍歷Kx

    {for循環(huán)6:遍歷CHin

    {tp=feature_in[h*CHin*Win+w*CHin+cin]*

    W[ii*Kx*CHin*CHout+jj*CHin*CHout+cin*CHout+cout];

    sum+=tp;}}

    sum+=bias[cout];

    feature_out[i*Wout*CHout+j*CHout+cout]=sum;}}

    式中,CHin、Hin、Win分別為輸入特征的通道數(shù)、高、寬,CHout為輸出通道,Kx、Ky為卷積核的大小,Sx、Sy為步幅大小,mode是卷積的填充模式,relu_en是relu函數(shù)的使能,feature_in[]、feature_out[]、W[]、bias[]是輸入、輸出特征的運(yùn)算規(guī)模大小。

    從Conv 函數(shù)的表達(dá)式可以看出,tp為輸入特征feature_in[h][w][cin] 和權(quán)重w[ii][jj][cin][cout] 進(jìn)行卷積運(yùn)算的結(jié)果,再加上偏置值bias[cout],即可得到輸出特征的值feature_out。對于有不同的高、寬、通道的圖像輸入、不同大小的卷積核濾波器,均可以使用該函數(shù)。通過Export RTL 操作,Conv 函數(shù)可生成如圖3(a)所示的IP 核,該IP 核的性能指標(biāo)Latency 和Interval 如圖3(b)所示。

    圖3 卷積層IP核及其性能指標(biāo)

    卷積運(yùn)算通過6 個for 循環(huán)遍歷輸入輸出來實現(xiàn),基本思想是采用滑窗法,而對其中的參數(shù)的優(yōu)化更為重要。對于函數(shù)中的運(yùn)算規(guī)模參數(shù),本文采用s_axilite 協(xié)議進(jìn)行約束優(yōu)化,可生成s_axi_AXILiteS 接口,用于更快地配置電路。對于函數(shù)中的數(shù)據(jù)來源參數(shù),采用m_axi 協(xié)議進(jìn)行約束優(yōu)化,可生成m_axi_gmen 接口,這便于卷積層主動從存儲器中讀取特征數(shù)據(jù)和寫入運(yùn)算結(jié)果,其工作過程如圖4所示。這里因為參數(shù)可配置導(dǎo)致for循環(huán)的邊界為變量,所以無法使用pipiline來并行化流水線進(jìn)行加速,會在一定程度上限制卷積運(yùn)算的速度。

    圖4 卷積層IP核在系統(tǒng)中的工作過程

    3.2 池化層IP核

    池化層的設(shè)計原理與卷積層類似。通過Pool 函數(shù)生成的池化層IP 核也可對不同規(guī)模的輸入做池化運(yùn)算。池化運(yùn)算通過5 個for 循環(huán)來實現(xiàn),并可選擇性地做平均池化、最小池化和最大池化。通過Export RTL操作生成的池化層IP 核如圖5(a)所示,該IP 核的性能指標(biāo)Latency 和Interval 如圖5(b)所示。Pool 函數(shù)的表達(dá)式如下所示:

    void Pool()

    {for循環(huán)1:遍歷CHin

    for循環(huán)2:遍歷Hin/Ky

    for循環(huán)3:遍歷Win/Kx

    {for循環(huán)4:遍歷Ky

    for循環(huán)5:遍歷Kx

    判斷池化模式:

    平均池化:

    sum+=(feature_in[h*CHin*Win+w*CHin+c)]/(Kx*Ky);

    最小池化:

    sum=min(sum,feature_in[h*CHin*Win+w*CHin+c]);

    最大池化:

    sum=max(sum,feature_in[h*CHin*Win+w*CHin+c];}

    feature_out[i*Wout*CHin+j*CHin+c]=sum;}

    式中,CHin、Hin、Win分別為輸入特征的通道數(shù)、高、寬,Kx、Ky為卷積核的大小,mode 是池化的模式,feature_in[]、feature_out[]為運(yùn)算規(guī)模大小。

    圖5 池化層IP核及其性能參數(shù)

    圖6 給出了池化層IP 核在系統(tǒng)中的工作過程。池化層IP 核接收到CPU 發(fā)來的指令后,主動從存儲器中讀取特征數(shù)據(jù),池化運(yùn)算完成后,將運(yùn)算結(jié)果寫入存儲器中。

    圖6 池化層IP核在系統(tǒng)中的工作過程

    4 CNN系統(tǒng)實現(xiàn)

    4.1 硬件實現(xiàn)

    系統(tǒng)的硬件部分包括ZYNQ處理器、兩個卷積層IP核、一個池化層IP 核以及連接各部分的axi總線。接收到ZYNQ處理器發(fā)來的指令后,IP核自行從存儲器中獲取神經(jīng)網(wǎng)絡(luò)的權(quán)重參數(shù)、偏置參數(shù)[13]以及圖像數(shù)據(jù),并將神經(jīng)網(wǎng)絡(luò)算法分類的結(jié)果寫入存儲器中。使用vivido工具完成的系統(tǒng)硬件圖如圖7所示,兩個卷積層IP核的m_axi_gmen 均連至ZYNQ 處理器的S_AXI_HP0 接口,池化層IP 核的m_axi_gmen 連至S_AXI_HP1 接口,ZYNQ 處理器的M_AXI_GP0 口同時連接三個IP 核的s_axi_AXILiteS接口。

    4.2 軟件實現(xiàn)

    硬件完成后,先生成比特流文件,再使用SDK工具開始軟件設(shè)計。軟件設(shè)計主要是搭建CNN 的網(wǎng)絡(luò)結(jié)構(gòu),并將其中的卷積層和池化層運(yùn)算通過調(diào)用RunConv和RunPool 函數(shù)來實現(xiàn)。RunConv 函數(shù)中的InstancePtr參數(shù)為卷積層IP核的指針,通過這個指針可以調(diào)用不同的卷積層IP 核,當(dāng)指針指向0 時調(diào)用Conv_0 IP 核,指針指向1 時調(diào)用Conv_1 IP 核。RunPool 函數(shù)中也定義了類似的指針,本文網(wǎng)絡(luò)中池化電路需求較少,且為了節(jié)約資源,本文只定義了一份池化電路,故指針一直指向0,調(diào)用Pool_0 IP 核。實際上,Conv_0 IP 核硬件電路用于計算核為5×5 的卷積運(yùn)算,Conv_1 IP 核用于計算核為3×3 的卷積運(yùn)算,Pool_0 IP 核硬件電路用于計算最大池化。

    利用時分復(fù)用技術(shù),可加速整個系統(tǒng)的運(yùn)算。圖8詳細(xì)闡述了文中時分復(fù)用技術(shù)的應(yīng)用。在一張圖片的測試過程中,將圖片數(shù)據(jù)輸入神經(jīng)網(wǎng)絡(luò)后,卷積層C1和C2通過Conv_0 IP核進(jìn)行計算,卷積層C3、C4、C6和C8通過Conv_1 IP 核進(jìn)行計算,池化層P5 和P7 均通過Pool_0 IP核進(jìn)行計算。根據(jù)FPGA的并行性[14],三個IP核硬件電路同時運(yùn)行,能提升整個CNN 網(wǎng)絡(luò)的運(yùn)算性能。

    圖7 系統(tǒng)硬件圖

    圖8 時分復(fù)用技術(shù)應(yīng)用圖

    5 系統(tǒng)仿真與分析

    系統(tǒng)設(shè)計中的具體硬件使用Xilinx 公司的ZYNQ-7000 xc7z010clg400-1 芯片作為試驗平臺,該芯片內(nèi)部擁有28 KB個邏輯單元,2.1 MB的嵌入式存儲器,80個嵌入式乘法器,片內(nèi)資源較為豐富,基本能夠滿足該網(wǎng)絡(luò)模型中硬件設(shè)計所需要的資源。CPU 軟件訓(xùn)練平臺使用Core i7-8700k處理器,主頻為3.4 GHz。

    該硬件部分的系統(tǒng)資源消耗如表1 所示。系統(tǒng)設(shè)計中采用了大量的if語句和for循環(huán)語句用來進(jìn)行卷積運(yùn)算和池化運(yùn)算,導(dǎo)致系統(tǒng)中LUT 和FF 以及DSP 的邏輯資源消耗較多,但可以看出本文所使用的ZYNQ器件基本能夠滿足硬件框架需求。

    表1 硬件部分的資源消耗

    訓(xùn)練過程中,以學(xué)習(xí)率為0.5、每次輸入批次為50、迭代次數(shù)為10 000 在CPU 中進(jìn)行訓(xùn)練[15],訓(xùn)練集為MNIST數(shù)據(jù)集中的60 000張像素為28×28的灰度圖片,圖像數(shù)值范圍為0~255,最終對MNIST數(shù)據(jù)集的10 000張手寫數(shù)字測試圖片進(jìn)行測試得到的平均識別正確率為96.83%。

    測試過程中,先將CPU 中已訓(xùn)練好的網(wǎng)絡(luò)算法的權(quán)值參數(shù)、偏置參數(shù)以及MNIST 數(shù)據(jù)集的10 000 張手寫數(shù)字測試圖片存儲在SD 卡中,PS 端給出指令后,IP核讀取SD 卡內(nèi)數(shù)據(jù),運(yùn)算完成后再將分類結(jié)果存儲在存儲器中,最后通過串口打印出分類結(jié)果。某次測試中串口打印的部分結(jié)果如圖9所示,其中,第925張圖片的預(yù)測值為0,實際的數(shù)字為2,預(yù)測錯誤,其余圖片均預(yù)測正確。如表2 所示,經(jīng)10 000 次迭代測試后,各手寫數(shù)字的整體識別正確率為95.34%,與軟件平臺正確率96.83%基本一致。表3 給出了各手寫數(shù)字的識別正確率,其中手寫數(shù)字6的正確率最差,為91.57%,但仍在可接受范圍內(nèi)。

    FPGA 硬件平臺和CPU 軟件平臺所需的測試用時如表4所示,神經(jīng)網(wǎng)絡(luò)在CPU軟件平臺上迭代1次需要5.633×10-2s,而在FPGA 硬件平臺上[16]迭代1 次需要1.941×10-2s,再結(jié)合10 000次迭代后的測試用時對比,可以看出采用多個卷積層IP核實現(xiàn)時分復(fù)用后對電路的加速效果約為3 倍。但因為實現(xiàn)卷積層和池化層IP的函數(shù)參數(shù)可配置,導(dǎo)致不能對函數(shù)內(nèi)for 循環(huán)做并行優(yōu)化和流水優(yōu)化,故算法的加速效果受到一定限制。

    圖9 串口打印的部分結(jié)果

    表2 FPGA硬件平臺和CPU軟件平臺的整體識別正確率對比

    表3 各手寫數(shù)字的識別正確率

    表4 FPGA硬件平臺和CPU軟件平臺所需的測試用時對比

    值得一提的是,由于FPGA與GPU并行處理的機(jī)理類同,若采用GPU服務(wù)器開展對比,根據(jù)文獻(xiàn)[17-19]可知,本文最終的識別效果和加速性能與GPU 模式的性能大抵相當(dāng),其優(yōu)勢在于基于FPGA 的CNN 系統(tǒng)可以部分替代GPU 服務(wù)器開展相應(yīng)的圖片處理工作,在嵌入式應(yīng)用、邊緣計算方面具有更好的應(yīng)用前景。

    6 結(jié)束語

    本文通過使用HLS 設(shè)計了一種可實現(xiàn)卷積運(yùn)算和池化運(yùn)算、可配置參數(shù)的IP核,并利用時分復(fù)用技術(shù)和生成的IP 核在FPGA 平臺上實現(xiàn)了整個10 層網(wǎng)絡(luò)的CNN系統(tǒng)算法結(jié)構(gòu)。針對MNIST數(shù)據(jù)集的實驗結(jié)果表明,該硬件系統(tǒng)的10 000次迭代的準(zhǔn)確率為95.34%,與CPU軟件平臺準(zhǔn)確率基本一致。不足的是,由于實現(xiàn)IP核的Conv 函數(shù)和Pool 函數(shù)的參數(shù)均為變量,無法使用pipeline和流水線技術(shù)對函數(shù)中的for循環(huán)進(jìn)行加速,導(dǎo)致系統(tǒng)的加速性能受限。但利用時分復(fù)用技術(shù)使得多個IP 核同時參與運(yùn)算,最終的加速性能約為CPU 系統(tǒng)的3 倍,能夠與GPU 的加速性能大抵相當(dāng),在嵌入式應(yīng)用、邊緣計算方面,具有潛在的應(yīng)用前景??偟膩碚f,利用本文設(shè)計的IP核,可以使用FPGA在短時間內(nèi)實現(xiàn)一個CNN硬件系統(tǒng),并能部分替代GPU工作,充分體現(xiàn)了HLS的快捷性,對指導(dǎo)基于Verilog HDL的CNN硬件實現(xiàn)也具有重要意義。

    猜你喜歡
    池化層池化偏置
    基于緊湊型雙線性網(wǎng)絡(luò)的野生茵識別方法研究
    無線電工程(2024年8期)2024-09-16 00:00:00
    基于Sobel算子的池化算法設(shè)計
    基于40%正面偏置碰撞的某車型仿真及結(jié)構(gòu)優(yōu)化
    基于雙向線性插值的車道輔助系統(tǒng)障礙避讓研究
    中國信息化(2022年5期)2022-06-13 11:12:49
    卷積神經(jīng)網(wǎng)絡(luò)中的自適應(yīng)加權(quán)池化
    卷積神經(jīng)網(wǎng)絡(luò)模型研究分析*
    基于卷積神經(jīng)網(wǎng)絡(luò)的紙幣分類與點鈔
    基于深度學(xué)習(xí)卷積神經(jīng)網(wǎng)絡(luò)的人體行為識別研究
    科技傳播(2020年6期)2020-05-25 11:07:46
    基于卷積神經(jīng)網(wǎng)絡(luò)和池化算法的表情識別研究
    基于全卷積神經(jīng)網(wǎng)絡(luò)的SAR圖像目標(biāo)分類*
    逊克县| 京山县| 仲巴县| 灵宝市| 南丹县| 抚顺市| 南靖县| 和硕县| 麦盖提县| 南靖县| 淄博市| 得荣县| 邹平县| 德钦县| 济源市| 上高县| 托里县| 衡东县| 梅河口市| 连城县| 桃源县| 鹰潭市| 拜城县| 吉隆县| 三都| 泾阳县| 南江县| 阜新| 汝阳县| 霍城县| 千阳县| 正安县| 岳池县| 黄梅县| 渭南市| 天等县| 上饶县| 扶沟县| 论坛| 灵寿县| 当阳市|