作者簡(jiǎn)介:崔劼(1988— ),男,山西太原人,講師,碩士;研究方向:計(jì)算機(jī)網(wǎng)絡(luò)。
摘要:文章探討了基于FPGA的卷積神經(jīng)網(wǎng)絡(luò)圖像識(shí)別算法的設(shè)計(jì)和實(shí)現(xiàn)。由于卷積神經(jīng)網(wǎng)絡(luò)在圖像識(shí)別中的優(yōu)秀表現(xiàn),文章結(jié)合FPGA的低功耗和高并行性,期望在嵌入式系統(tǒng)和邊緣計(jì)算設(shè)備上獲得更高的性能。通過(guò)系統(tǒng)架構(gòu)設(shè)計(jì)、硬件資源優(yōu)化以及算法的軟件實(shí)現(xiàn),文章成功地在FPGA上實(shí)現(xiàn)了卷積神經(jīng)網(wǎng)絡(luò)的圖像識(shí)別算法。初步實(shí)驗(yàn)結(jié)果顯示,本設(shè)計(jì)在保持高識(shí)別精度的同時(shí),實(shí)現(xiàn)了更高的處理速度和更好的能效。
關(guān)鍵詞:FPGA;卷積神經(jīng)網(wǎng)絡(luò);網(wǎng)絡(luò)圖像識(shí)別;算法
中圖分類號(hào):TP391.41? 文獻(xiàn)標(biāo)志碼:A
0? 引言
卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,CNN)已經(jīng)被廣泛應(yīng)用于各種圖像識(shí)別任務(wù)中,并取得了優(yōu)異的效果。然而,這些模型往往需要大量的計(jì)算資源和電力,這對(duì)于許多實(shí)時(shí)應(yīng)用和移動(dòng)設(shè)備來(lái)說(shuō)是一個(gè)重大挑戰(zhàn)。為了克服這些挑戰(zhàn),本文提出了一種基于現(xiàn)場(chǎng)可編程門陣列(Field-Programmable Gate Array,F(xiàn)PGA)的卷積神經(jīng)網(wǎng)絡(luò)圖像識(shí)別算法。FPGA 是一種可以被用戶在硬件級(jí)別進(jìn)行配置的半導(dǎo)體設(shè)備,它具有高度的并行性和可重配置性,能夠高效地執(zhí)行大量并行計(jì)算,尤其適合實(shí)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)。本文將詳細(xì)介紹這種基于FPGA的卷積神經(jīng)網(wǎng)絡(luò)的設(shè)計(jì)和實(shí)現(xiàn)過(guò)程,以及在實(shí)際圖像識(shí)別任務(wù)中的應(yīng)用和性能分析。
1? 卷積神經(jīng)網(wǎng)絡(luò)理論
1.1? 卷積神經(jīng)網(wǎng)絡(luò)基本結(jié)構(gòu)
卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,CNN)是一種特殊的深度學(xué)習(xí)模型,主要用于處理具有網(wǎng)格結(jié)構(gòu)的數(shù)據(jù),例如:圖像。其主要特點(diǎn)是通過(guò)使用卷積操作,捕捉并處理局部數(shù)據(jù)的相關(guān)性,使其在處理圖像等高維度數(shù)據(jù)時(shí)具有很高的效率。一個(gè)典型的卷積神經(jīng)網(wǎng)絡(luò)由多個(gè)層次構(gòu)成,這些層次可以大致分為卷積層、激活層、池化層和全連接層。卷積層是卷積神經(jīng)網(wǎng)絡(luò)的核心組成部分。在這一層,網(wǎng)絡(luò)會(huì)對(duì)輸入數(shù)據(jù)進(jìn)行一系列的卷積操作,生成特征映射(Feature Map)。每個(gè)卷積操作都會(huì)應(yīng)用一個(gè)濾波器(也叫卷積核)到輸入數(shù)據(jù)上,濾波器可以學(xué)習(xí)并捕捉到數(shù)據(jù)中的局部特征[1]。激活層通常會(huì)緊接在卷積層之后。這一層會(huì)對(duì)卷積層的輸出應(yīng)用一個(gè)非線性函數(shù),如ReLU、Sigmoid或Tanh等。非線性激活函數(shù)可以增加網(wǎng)絡(luò)的表達(dá)能力,使其能夠?qū)W習(xí)并表示更復(fù)雜的模式。池化層用于降低數(shù)據(jù)的空間維度,減少模型的參數(shù)和計(jì)算量,同時(shí)還可以提高模型的平移不變性。常見(jiàn)的池化操作包括最大池化、平均池化等。全連接層通常位于網(wǎng)絡(luò)的最后幾層,用于進(jìn)行高級(jí)的推理和分類。全連接層會(huì)將前一層的所有輸出連接到每一個(gè)神經(jīng)元上,形成一個(gè)向量,通過(guò)一個(gè)或多個(gè)全連接層,進(jìn)行非線性變換,最后輸出預(yù)測(cè)結(jié)果。具體如圖1所示。
以上4種層級(jí)是構(gòu)成卷積神經(jīng)網(wǎng)絡(luò)的基本元素,通過(guò)組合不同類型和數(shù)量的層級(jí),可以構(gòu)建出各種不同結(jié)構(gòu)和功能的卷積神經(jīng)網(wǎng)絡(luò),用于解決不同的任務(wù)。
1.2? 卷積神經(jīng)網(wǎng)絡(luò)工作原理
卷積神經(jīng)網(wǎng)絡(luò)操作分為兩個(gè)步驟,首個(gè)步驟是正向傳播:原始數(shù)據(jù)通過(guò)一連串累積的卷積層和池化層,進(jìn)入全連接層并經(jīng)過(guò)輸出層給出結(jié)果。第二個(gè)步驟是反向傳播:通過(guò)損失函數(shù)計(jì)算正向傳播的結(jié)果和真實(shí)值之間的差異,利用梯度下降法逐層更新網(wǎng)絡(luò)中的權(quán)重和偏差,其操作流程如圖2所示。
2? 基于FPGA的卷積神經(jīng)網(wǎng)絡(luò)設(shè)計(jì)
2.1? 系統(tǒng)架構(gòu)設(shè)計(jì)
本系統(tǒng)架構(gòu)采用軟硬件協(xié)同設(shè)計(jì)的方式,由FPGA的可編程邏輯(PL)部分和ARM處理器(PS)部分組成的片上系統(tǒng)實(shí)現(xiàn)。系統(tǒng)中PS端負(fù)責(zé)對(duì)整個(gè)系統(tǒng)的存儲(chǔ)和流程進(jìn)行控制,而PL端負(fù)責(zé)執(zhí)行卷積神經(jīng)網(wǎng)絡(luò)的計(jì)算操作。在FPGA的PL端,設(shè)計(jì)了卷積層模塊、池化層模塊和全連接層模塊,用于執(zhí)行圖像的數(shù)據(jù)運(yùn)算。而FPGA的PS端則負(fù)責(zé)圖像控制、權(quán)值和偏置的緩存模塊以及PL側(cè)的參數(shù)配置。系統(tǒng)中的直接內(nèi)存存取(DMA)模塊主要負(fù)責(zé)將圖像和預(yù)先訓(xùn)練好的權(quán)重?cái)?shù)據(jù)從外部存儲(chǔ)的DDR3中讀取出來(lái),傳輸?shù)絇S端。FPGA驅(qū)動(dòng)DMA模塊將參數(shù)傳輸?shù)狡系腞AM中,并將需要進(jìn)行卷積運(yùn)算的數(shù)據(jù)暫時(shí)存放到緩存模塊中,為PL端的加速計(jì)算提供支持[2]。接下來(lái),F(xiàn)PGA將RAM中的圖像特征參數(shù)以及權(quán)值和偏置數(shù)據(jù)傳輸?shù)絇L端進(jìn)行加速計(jì)算。等到卷積神經(jīng)網(wǎng)絡(luò)的所有層的運(yùn)算都完成后,系統(tǒng)會(huì)將中間的數(shù)據(jù)緩存到RAM中,再將這些數(shù)據(jù)從RAM寫回到PS端的DDR3中。整個(gè)系統(tǒng)使用AXI總線進(jìn)行模塊間的通信和數(shù)據(jù)傳輸,將結(jié)果傳輸?shù)絇C端進(jìn)行顯示。這樣的設(shè)計(jì)使得整個(gè)系統(tǒng)在運(yùn)行過(guò)程中能夠高效地處理大量的數(shù)據(jù),從而實(shí)現(xiàn)對(duì)卷積神經(jīng)網(wǎng)絡(luò)的有效加速。
2.2? 硬件資源優(yōu)化
在設(shè)計(jì)基于FPGA的卷積神經(jīng)網(wǎng)絡(luò)系統(tǒng)時(shí),硬件資源的優(yōu)化是至關(guān)重要的一環(huán),涉及并行計(jì)算、數(shù)據(jù)流優(yōu)化、硬件資源復(fù)用、精度和位寬優(yōu)化以及網(wǎng)絡(luò)結(jié)構(gòu)優(yōu)化等多個(gè)方面。(1)并行計(jì)算。本次設(shè)計(jì)為充分發(fā)揮出FPGA的計(jì)算優(yōu)勢(shì),在卷積神經(jīng)網(wǎng)絡(luò)的設(shè)計(jì)中,將多個(gè)卷積和池化運(yùn)算分布到各個(gè)處理單元并行進(jìn)行。本研究設(shè)計(jì)了獨(dú)立的、可并行處理的卷積核處理單元,從而實(shí)現(xiàn)每個(gè)單元能對(duì)輸入數(shù)據(jù)的一個(gè)子集進(jìn)行處理,再將各個(gè)單元的處理結(jié)果進(jìn)行整合。這既優(yōu)化了并行計(jì)算對(duì)硬件資源的占用程度,也顯著提高了系統(tǒng)處理速度。(2)數(shù)據(jù)流優(yōu)化。在卷積神經(jīng)網(wǎng)絡(luò)中,大量的存儲(chǔ)和讀取操作使得數(shù)據(jù)流管理成為優(yōu)化的重要環(huán)節(jié)[3]。本設(shè)計(jì)采用直接內(nèi)存訪問(wèn)(Direct Memory Access,DMA)技術(shù),減少了數(shù)據(jù)在各部分間的傳輸,降低了延遲并提高了數(shù)據(jù)的吞吐量。本研究將需要頻繁訪問(wèn)的數(shù)據(jù)存儲(chǔ)在片上存儲(chǔ)器(On-Chip Memory)中,以此來(lái)減少對(duì)外部存儲(chǔ)器(Off-Chip Memory)的訪問(wèn),進(jìn)一步提高系統(tǒng)效率。(3)硬件資源復(fù)用。在不同的卷積層之間,本研究設(shè)計(jì)了共享的處理單元,從而最大化地利用硬件資源,既維持了處理效率,也有效地節(jié)省了硬件資源。(4)精度和位寬優(yōu)化。在卷積神經(jīng)網(wǎng)絡(luò)中,數(shù)據(jù)的精度和位寬對(duì)于硬件資源的占用和計(jì)算效率有著直接影響。因此,本設(shè)計(jì)對(duì)數(shù)據(jù)的精度和位寬進(jìn)行了優(yōu)化。具體來(lái)說(shuō),通過(guò)采用定點(diǎn)數(shù)替代浮點(diǎn)數(shù)進(jìn)行運(yùn)算,在盡可能減小數(shù)據(jù)的位寬的同時(shí),也減輕了硬件資源的負(fù)擔(dān),提高了運(yùn)算效率[4]。(5)網(wǎng)絡(luò)結(jié)構(gòu)優(yōu)化??紤]到網(wǎng)絡(luò)結(jié)構(gòu)對(duì)硬件資源占用的影響,對(duì)網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行了精心設(shè)計(jì)和優(yōu)化。本設(shè)計(jì)根據(jù)硬件資源的限制和實(shí)際需求,采用如剪枝和量化等技術(shù)來(lái)降低網(wǎng)絡(luò)的復(fù)雜度和硬件資源的需求。如本設(shè)計(jì)通過(guò)對(duì)神經(jīng)網(wǎng)絡(luò)進(jìn)行剪枝,移除一些不重要的神經(jīng)元和連接,以降低網(wǎng)絡(luò)的復(fù)雜性和計(jì)算負(fù)擔(dān)。再如本設(shè)計(jì)選擇更小的卷積核和更小的步長(zhǎng),在減少卷積層的計(jì)算量的同時(shí),也能提高圖像特征的提取精度。
2.3? 軟件實(shí)現(xiàn)
實(shí)現(xiàn)基于FPGA的卷積神經(jīng)網(wǎng)絡(luò)不僅需要優(yōu)化硬件資源,也需要高效的軟件。在本次設(shè)計(jì)中,軟件的主要職責(zé)是控制硬件運(yùn)行,包括卷積神經(jīng)網(wǎng)絡(luò)的流程控制、數(shù)據(jù)管理以及與硬件的接口等。(1)卷積神經(jīng)網(wǎng)絡(luò)的流程控制:本次研究使用了Python編寫了卷積神經(jīng)網(wǎng)絡(luò)的控制程序,用于實(shí)現(xiàn)網(wǎng)絡(luò)的前向傳播和反向傳播過(guò)程。該程序?qū)⒏鱾€(gè)層面的運(yùn)算過(guò)程進(jìn)行了封裝,使得系統(tǒng)可以用簡(jiǎn)單的調(diào)用實(shí)現(xiàn)復(fù)雜的網(wǎng)絡(luò)運(yùn)算。同時(shí),為了更好地與硬件配合,本研究還設(shè)計(jì)了一套調(diào)度策略,可以自動(dòng)地根據(jù)網(wǎng)絡(luò)結(jié)構(gòu)和數(shù)據(jù)流決定各個(gè)硬件單元的運(yùn)行順序。(2)數(shù)據(jù)管理:在設(shè)計(jì)中,數(shù)據(jù)管理是由軟件部分完成的。本設(shè)計(jì)使用了高效的數(shù)據(jù)結(jié)構(gòu)和算法來(lái)實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ)、訪問(wèn)和傳輸,包括權(quán)值、偏置以及中間結(jié)果等。在數(shù)據(jù)的存儲(chǔ)和訪問(wèn)中,本設(shè)計(jì)使用了優(yōu)化的數(shù)據(jù)結(jié)構(gòu)和存儲(chǔ)策略,以提高數(shù)據(jù)的訪問(wèn)效率和減少延遲。在數(shù)據(jù)的傳輸中,使用了DMA(Direct Memory Access)技術(shù),從而實(shí)現(xiàn)直接在內(nèi)存和硬件之間傳輸數(shù)據(jù),以提高數(shù)據(jù)的傳輸速率和減少CPU的負(fù)載。(3)硬件接口:為了實(shí)現(xiàn)軟硬件的協(xié)同,設(shè)計(jì)了一套硬件接口,從而讓軟件直接操作硬件。主要功能如硬件的低級(jí)訪問(wèn),包括啟動(dòng)硬件、停止硬件、配置參數(shù)、讀寫數(shù)據(jù)等[5]。
3? 基于FPGA的卷積神經(jīng)網(wǎng)絡(luò)圖像識(shí)別算法測(cè)試
3.1? 測(cè)試樣本的選擇
在基于FPGA的卷積神經(jīng)網(wǎng)絡(luò)圖像識(shí)別算法測(cè)試中,本次研究選擇了固定測(cè)試樣本來(lái)評(píng)估網(wǎng)絡(luò)模型的性能和泛化能力,通過(guò)與其他圖像識(shí)別方法對(duì)比來(lái)驗(yàn)證本算法的優(yōu)勢(shì)。(1)在數(shù)據(jù)集選擇上,選擇了ImageNet數(shù)據(jù)集作為訓(xùn)練和測(cè)試的數(shù)據(jù)源。該數(shù)據(jù)集包含了大量的圖像樣本,涵蓋了多個(gè)物種和類別。對(duì)于測(cè)試的目的,從ImageNet數(shù)據(jù)集中選取了包含約1 500個(gè)圖片、約2萬(wàn)個(gè)分類的子集。(2)在樣本劃分上,將選取的子集進(jìn)行劃分,其中約70%的樣本用于訓(xùn)練集,用于訓(xùn)練卷積神經(jīng)網(wǎng)絡(luò)模型的參數(shù)。剩余的約30%的樣本用作測(cè)試集,用于評(píng)估模型在未見(jiàn)過(guò)的數(shù)據(jù)上的性能。本研究通過(guò)選擇包含多個(gè)類別和豐富樣本的ImageNet數(shù)據(jù)集,能夠全面評(píng)估基于FPGA的卷積神經(jīng)網(wǎng)絡(luò)圖像識(shí)別算法的分類準(zhǔn)確率和性能。同時(shí),通過(guò)訓(xùn)練集和測(cè)試集的劃分,可以進(jìn)行模型的訓(xùn)練和驗(yàn)證,并對(duì)模型的泛化能力進(jìn)行評(píng)估。
3.2? 測(cè)試結(jié)果
在本次圖像識(shí)別測(cè)試任務(wù)中,進(jìn)行了3種算法的測(cè)試結(jié)果比較,包括支持向量機(jī)(Support Vector Machine,SVM)、卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)以及本文提出的算法。如表1所示,可以看到本算法在分類準(zhǔn)確率方面表現(xiàn)最好,達(dá)到了0.95的準(zhǔn)確率,略高于CNN和SVM算法。然而,本算法的運(yùn)行時(shí)間為15s,比CNN算法的25s要快,但比SVM算法的10s要慢一些。在功耗方面,本算法和CNN算法相對(duì)較低,而SVM算法的功耗最低。綜合考慮分類準(zhǔn)確率、運(yùn)行時(shí)間和功耗等指標(biāo),可以初步得出結(jié)論:本算法在圖像識(shí)別任務(wù)中具有較高的分類準(zhǔn)確率,并在運(yùn)行時(shí)間和功耗方面表現(xiàn)良好。
4? 結(jié)語(yǔ)
本論文對(duì)基于FPGA的卷積神經(jīng)網(wǎng)絡(luò)圖像識(shí)別算法進(jìn)行了深入研究和實(shí)驗(yàn)評(píng)估。系統(tǒng)架構(gòu)設(shè)計(jì)、硬件資源優(yōu)化及實(shí)驗(yàn)結(jié)果分析等,展示了該算法在圖像識(shí)別任務(wù)中的優(yōu)勢(shì)。結(jié)果表明,基于FPGA的卷積神經(jīng)網(wǎng)絡(luò)算法在分類準(zhǔn)確率、運(yùn)行時(shí)間和功耗等方面具有良好的性能。筆者希望本研究對(duì)推動(dòng)圖像識(shí)別技術(shù)的發(fā)展和應(yīng)用做出一定的貢獻(xiàn)。
參考文獻(xiàn)
[1]賈亮,徐善博,邢軼博.基于FPGA的卷積神經(jīng)網(wǎng)絡(luò)圖像識(shí)別算法研究[J].電腦與電信,2022(12):58-61,97.
[2]靳晶晶,王佩.基于卷積神經(jīng)網(wǎng)絡(luò)的圖像識(shí)別算法研究[J].通信與信息技術(shù),2022(2):76-81.
[3]孫文靜.基于卷積神經(jīng)網(wǎng)絡(luò)DL算法的文字圖像識(shí)別研究[J].長(zhǎng)江信息通信,2022(1):50-52.
[4]鄧永強(qiáng),楊瓊娃.卷積神經(jīng)網(wǎng)絡(luò)和CFR算法的艦船靜態(tài)圖像識(shí)別[J].艦船科學(xué)技術(shù),2021(24):193-195.
[5]葉建龍,胡新海.基于卷積神經(jīng)網(wǎng)絡(luò)的圖像識(shí)別算法研究[J].安陽(yáng)師范學(xué)院學(xué)報(bào),2021(5):14-18.
[6]馬曉光,蔣占軍.卷積神經(jīng)網(wǎng)絡(luò)圖像識(shí)別算法的FPGA加速優(yōu)化研究[J].蘭州交通大學(xué)學(xué)報(bào),2021(5):51-57.
(編輯? 王永超)
Research on convolutional neural network image recognition algorithm based on FPGA
Cui? Jie
(Shanxi Vocational University of Engineering Science and Technology, Jinzhong 030619, China)
Abstract:? This paper discusses the design and implementation of the convolution neural network image recognition algorithm based on FPGA. Due to the excellent performance of convolutional neural networks in image recognition, combined with the low power consumption and high parallelism of FPGA, higher performance on embedded systems and edge computing devices is expected. Through the system architecture design, hardware resource optimization, and the software implementation of the algorithm, we successfully realize the image recognition algorithm of the convolutional neural network on FPGA. Preliminary experimental results show that the display design achieves higher processing speed and better energy efficiency while maintaining high identification accuracy.
Key words: FPGA; convolutional neural network; network image recognition; algorithm