999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

可實現時分復用的CNN卷積層和池化層IP核設計

2020-12-26 02:56:36劉宇紅張榮芬
計算機工程與應用 2020年24期
關鍵詞:模型

張 衛,劉宇紅,張榮芬

貴州大學 大數據與信息工程學院,貴陽550025

1 引言

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

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

本文首先對深度學習中的CNN算法模型及結構進行介紹和研究,然后將CNN 模型中的卷積層和池化層設計為IP 核,通過將函數的運算規模參數協議設為axi_master,減少了模型分類的時間,提升了模型運算性能。為了驗證IP核的功能性,本文進一步采用時分復用技術在FPGA平臺上對MNIST數據集進行了系統驗證。

2 CNN算法模型

2.1 CNN模型

神經網絡是一種模仿生物的神經網絡結構和功能的數學模型,可以模擬人的判斷能力。CNN 是神經網絡的一種,在圖像和語音識別方面能夠給出更好的判斷結果。

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

圖1 典型的卷積網絡神經結構

得到分類結果后,CNN 通過誤差反向傳播算法來進行權重參數和偏置參數的學習,這主要通過計算卷積層中參數的梯度來實現。具體計算過程可由如下公式表示。

第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個偏置,可以分別使用鏈式法則來計算其梯度。

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

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

2.2 本文CNN模型

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

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

各卷積層的參數為:

卷積層1 權重為5×5×5=125個,偏置為5個。

卷積層2 權重為5×5×5×5=625個,偏置為5個。

卷積層3 權重為3×3×5×5=225個,偏置為5個。

圖2 本文設計的CNN網絡層次結構圖

卷積層4 權重為3×3×5×5=225個,偏置為5個。

卷積層6 權重為3×3×5×10=450個,偏置為10個。

卷積層8 權重為3×3×10×20=1 800個,偏置為20個。

因此整個卷積層總共有3 270個參數。

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

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

3.1 卷積層IP核

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

void Conv()

{填充運算

for循環1:遍歷CHout

for循環2:遍歷Hin

for循環3:遍歷Win

{for循環4:遍歷Ky

for循環5:遍歷Kx

{for循環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分別為輸入特征的通道數、高、寬,CHout為輸出通道,Kx、Ky為卷積核的大小,Sx、Sy為步幅大小,mode是卷積的填充模式,relu_en是relu函數的使能,feature_in[]、feature_out[]、W[]、bias[]是輸入、輸出特征的運算規模大小。

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

圖3 卷積層IP核及其性能指標

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

圖4 卷積層IP核在系統中的工作過程

3.2 池化層IP核

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

void Pool()

{for循環1:遍歷CHin

for循環2:遍歷Hin/Ky

for循環3:遍歷Win/Kx

{for循環4:遍歷Ky

for循環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分別為輸入特征的通道數、高、寬,Kx、Ky為卷積核的大小,mode 是池化的模式,feature_in[]、feature_out[]為運算規模大小。

圖5 池化層IP核及其性能參數

圖6 給出了池化層IP 核在系統中的工作過程。池化層IP 核接收到CPU 發來的指令后,主動從存儲器中讀取特征數據,池化運算完成后,將運算結果寫入存儲器中。

圖6 池化層IP核在系統中的工作過程

4 CNN系統實現

4.1 硬件實現

系統的硬件部分包括ZYNQ處理器、兩個卷積層IP核、一個池化層IP 核以及連接各部分的axi總線。接收到ZYNQ處理器發來的指令后,IP核自行從存儲器中獲取神經網絡的權重參數、偏置參數[13]以及圖像數據,并將神經網絡算法分類的結果寫入存儲器中。使用vivido工具完成的系統硬件圖如圖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 軟件實現

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

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

圖7 系統硬件圖

圖8 時分復用技術應用圖

5 系統仿真與分析

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

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

表1 硬件部分的資源消耗

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

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

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

圖9 串口打印的部分結果

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

表3 各手寫數字的識別正確率

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

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

6 結束語

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

猜你喜歡
模型
一半模型
一種去中心化的域名服務本地化模型
適用于BDS-3 PPP的隨機模型
提煉模型 突破難點
函數模型及應用
p150Glued在帕金森病模型中的表達及分布
函數模型及應用
重要模型『一線三等角』
重尾非線性自回歸模型自加權M-估計的漸近分布
3D打印中的模型分割與打包
主站蜘蛛池模板: 99久久国产精品无码| 亚洲三级视频在线观看| 9cao视频精品| 首页亚洲国产丝袜长腿综合| 亚洲天堂首页| 国产在线八区| 国产美女精品一区二区| 青青草原国产一区二区| 亚洲国产成人麻豆精品| 亚洲色图综合在线| 无码aⅴ精品一区二区三区| 丝袜美女被出水视频一区| 国产一区二区三区精品久久呦| 精品国产女同疯狂摩擦2| 国产系列在线| 伊人久久影视| 香蕉久久国产精品免| 国产精品一区二区国产主播| 国产无遮挡裸体免费视频| 激情综合网激情综合| 在线免费不卡视频| 在线观看精品自拍视频| 欧美不卡视频一区发布| 综合网天天| 亚洲性色永久网址| 中文字幕伦视频| 成人免费黄色小视频| 欧美成人区| 国产成人精品免费视频大全五级 | 亚洲国产91人成在线| 日韩精品一区二区三区中文无码| 欧美在线伊人| 中文字幕乱码中文乱码51精品| 99草精品视频| 手机在线免费毛片| 久久九九热视频| 日韩久久精品无码aV| 日韩在线观看网站| 第九色区aⅴ天堂久久香| 日本不卡在线播放| 国产精品永久久久久| 欧美国产菊爆免费观看| 日韩AV手机在线观看蜜芽| 亚洲人成日本在线观看| 国产精品综合久久久| 亚洲一区免费看| 青青草原国产av福利网站| 亚洲无码免费黄色网址| 国产综合网站| 国产精品毛片一区视频播| 伊人久久婷婷| 国产偷倩视频| 谁有在线观看日韩亚洲最新视频| 91在线日韩在线播放| 亚洲精品黄| 直接黄91麻豆网站| 九色国产在线| 人人艹人人爽| 精品国产成人国产在线| 国产精品无码在线看| 久久国产成人精品国产成人亚洲 | 中文字幕人妻av一区二区| 韩日午夜在线资源一区二区| 黄色一级视频欧美| 亚洲中文在线看视频一区| 亚洲愉拍一区二区精品| 成人亚洲天堂| 日韩欧美成人高清在线观看| 国产在线自乱拍播放| 国产va视频| 欧美在线黄| 精品成人一区二区| 国产午夜在线观看视频| 欧美伦理一区| 亚洲精品国产成人7777| 动漫精品中文字幕无码| 一级做a爰片久久毛片毛片| 国产成人精品高清不卡在线| 国产成人8x视频一区二区| 中文字幕在线观| 亚洲激情区| 亚洲美女一级毛片|