大俠好,歡迎來到FPGA技術(shù)江湖,江湖偌大,相見即是緣分。大俠可以關(guān)注FPGA技術(shù)江湖,在“闖蕩江湖”、"行俠仗義"欄里獲取其他感興趣的資源,或者一起煮酒言歡?!爸缶蒲詺g”進(jìn)入IC技術(shù)圈,這里有近50個IC技術(shù)公眾號。
第一部分 設(shè)計概述 /Design Introduction
目前主流的目標(biāo)檢測算法都是用CNN來提取數(shù)據(jù)特征,而CNN的計算復(fù)雜度比傳統(tǒng)算 法高出很多。同時隨著CNN不斷提高的精度,其網(wǎng)絡(luò)深度與參數(shù)的數(shù)量也在飛快地增長, 其所需要的計算資源和內(nèi)存資源也在不斷增加。目前通用CPU已經(jīng)無法滿足CNN的計算需 求,如今主要研究大多通過專用集成電路(ASIC),圖形處理器(GPU)或者現(xiàn)場可編程門 陣列(FPGA)來構(gòu)建硬件加速電路,來提升計算CNN的性能。
其中 ASIC 具備高性能、低功耗等特點,但 ASIC 的設(shè)計周期長,制造成本高,而 GPU 的并行度高,計算速度快,具有深度流水線結(jié)構(gòu),非常適合加速卷積神經(jīng)網(wǎng)絡(luò),但與之對 應(yīng)的是 GPU 有著功耗高,空間占用大等缺點,很多場合對功耗有嚴(yán)格的限制,而 GPU 難 以應(yīng)用于這類需求。近些年來 FPGA 性能的不斷提升,同時 FPGA 具有流水線結(jié)構(gòu)和很強(qiáng) 的并行處理能力,還擁有低功耗、配置方便靈活的特性,可以根據(jù)應(yīng)用需要來編程定制硬 件,已成為研究實現(xiàn) CNN 硬件加速的熱門平臺。
綜上所述,使用功耗低、并行度高的 FPGA 平臺加速 CNN 更容易滿足實際應(yīng)用場景中 的低功耗、實時性要求。而且目標(biāo)檢測算法發(fā)展迅速,針對 CNN 的硬件加速研究也大有可 為。所以本項目計劃使用 PYNQ-Z2 開發(fā)板設(shè)計一個硬件電路來加速目標(biāo)檢測算法。
本項目設(shè)計的目標(biāo)檢測算法硬件加速電路可以應(yīng)用在智能導(dǎo)航、視頻監(jiān)測、手機(jī)拍照、 門禁識別等諸多方面,比如無人汽車駕駛技術(shù),高鐵站為方便乘客進(jìn)站而普遍采用的人臉 識別系統(tǒng),以及警察抓捕潛逃罪犯而使用的天網(wǎng)系統(tǒng)等都可以應(yīng)用本項目的設(shè)計,加速目 標(biāo)檢測算法的運算速度以及降低系統(tǒng)的功耗。
在本次項目的設(shè)計開發(fā)過程中,我們參考 DAC 2019 低功耗目標(biāo)檢測系統(tǒng)設(shè)計挑戰(zhàn)賽
GPU、FPGA 組雙冠軍方案,學(xué)習(xí)到了基于 SkyNet 和 iSmart2 設(shè)計一個輕量級神經(jīng)網(wǎng)絡(luò)的 技巧,尤其是他們采用的自底向上的硬件電路設(shè)計思路給我們帶來了巨大的啟發(fā)。我們在將訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)部署在硬件平臺的過程中,加深了對 HLS 的理解,開始初步掌握使用 HLS 進(jìn)行并行性編程的方法。我們學(xué)習(xí)了 PYNQ 框架,在 PYNQ-Z2 上實現(xiàn)神經(jīng)網(wǎng)絡(luò)加速 電路,有了軟硬件協(xié)同開發(fā)的經(jīng)歷。除此之外,我們還學(xué)習(xí)了 Vitis AI,雖然在項目中并沒 有使用到 Vitis Ai,但是對它的學(xué)習(xí)擴(kuò)寬的我們的視野。
第二部分 系統(tǒng)組成及功能說明 /System Construction & Function Description
本項目針對DAC2019 System Design Contest測試集,計劃采用PYNQ-Z2開發(fā)板加速目標(biāo) 檢測網(wǎng)絡(luò),綜合考慮數(shù)據(jù)訪問、存儲、并行計算等問題進(jìn)行優(yōu)化處理,設(shè)計出高速高精度 且低功耗的加速方案,并完成相關(guān)仿真和FPGA平臺的驗證,實現(xiàn)一個可以框選出圖像中行 人或其他物體位置的硬件電路。
本項目的系統(tǒng)框圖如圖2-1所示,首先PS端從SD卡讀取圖片并壓縮,之后將圖片和參 數(shù)權(quán)重一起傳輸?shù)?DRAM中,PL端再從DRAM中讀取數(shù)據(jù)并歸一化,經(jīng)過卷積和池化將輸 出特征圖傳回到DRAM中,再進(jìn)行下一層卷積運算;直到網(wǎng)絡(luò)最后一層輸出送入到邊界框 輸出模塊中選擇置信度最高的邊界框傳輸?shù)紻RAM中,供PS端讀取。
2.1 神經(jīng)網(wǎng)絡(luò)模型的設(shè)計方案
針對 DAC-SDC 數(shù)據(jù)集并結(jié)合 SkyNet 和 iSmart2 網(wǎng)絡(luò)設(shè)計原理,挑選出的基本單元Bundle 由 3×3 逐通道卷積(Depthwise Convolution),1×1 逐點卷積(Pointwise Convolution)和 激活函數(shù) ReLU6 組成。
其中 3×3 逐通道卷積和 1×1 逐點卷積的參數(shù)量和計算量遠(yuǎn)遠(yuǎn)少于傳統(tǒng)的卷積。如圖 2-2 和 2-3 所示,首先每個 3×3 逐通道卷積核與各自對應(yīng)的輸入通道數(shù)據(jù)進(jìn)行卷積運算,所以 輸出通道數(shù)等于輸入通道數(shù);然后上一步運算得到的特征圖繼續(xù)進(jìn)行 1×1 逐點卷積,每個 1×1 逐點卷積核對輸入的所有通道進(jìn)行卷積運算,并將結(jié)果相加得到一個輸出特征圖,所以輸出通道數(shù)等于逐點卷積核的數(shù)量。
ReLU6 激活函數(shù)與傳統(tǒng)的 Relu 激活函數(shù)相比,當(dāng) ReLU6 函數(shù)的輸入值大于等于 6 時 輸出值恒為 6,可以使模型更快地收斂。同時網(wǎng)絡(luò)采用大小為 2×2,步長也為 2 的最大池化 層(Max pooling)來降低運算量并防止過擬合,特征圖每經(jīng)過一次最大池化層其寬和高都減小一半。
綜上所述本項目構(gòu)建的神經(jīng)網(wǎng)絡(luò)模型如圖 2-4 所示:
本項目構(gòu)建的網(wǎng)絡(luò)模型主要由四個 Bundle 基本單元和三個 Max pooling 層組成,其中每個 Bundle 由 3×3 逐通道卷積,ReLU6 激活函數(shù),1×1 逐點卷積,ReLU6 激活函數(shù)依次排 列組成。通過每個 Bundle 中的 1×1 逐點卷積實現(xiàn)輸出特征圖通道數(shù)翻倍,通過 Bundle 其 后緊接著的 Max pooling 層實現(xiàn)輸出特征圖的尺寸減半。因為數(shù)據(jù)集內(nèi)的樣本圖片分辨率均 為 3×360×640,為了降低計算量就選擇將圖片壓縮到 3×160×320,這個尺寸既可以盡量保 留圖片的信息以防止目標(biāo)檢測準(zhǔn)確率下降,又可以在神經(jīng)網(wǎng)絡(luò)運算過程中很方便地通過 Max pooling 進(jìn)行降采樣。經(jīng)過三層 Max pooling 后特征圖的大小為 20×40,再經(jīng)過最后一 層 1×1 逐點卷積后輸出為 10×20×40,是將輸入圖片分為 20×40 個分塊,又因為輸出通道數(shù) 為 10,即每個分塊將會得到兩個邊界框和對應(yīng)的置信度,本項目設(shè)計的算法會遍歷所有分 塊的邊界框,選擇置信度最大的邊界框輸出。
2.2 FPGA加速電路設(shè)計方案
本項目設(shè)計的硬件電路主要有兩個模塊模塊:數(shù)據(jù)讀取與傳輸模塊。首先需要讀取圖片和模型參數(shù)的數(shù)據(jù),并對輸入的圖片數(shù)據(jù)進(jìn)行歸一化處理,然后送入到卷積運算模塊中 進(jìn)行計算,接著將計算結(jié)果送入到邊界框輸出模塊,最后將得到的邊界框結(jié)果傳輸?shù)?a class="article-link" target="_blank" href="/baike/528706.html">DDR3內(nèi)存中。
2.2.1 數(shù)據(jù)讀取與傳輸模塊
優(yōu)化設(shè)計一個高效的數(shù)據(jù)讀取與傳輸模塊是完成目標(biāo)檢測任務(wù)的前提。首先考慮到FPGA 自身 BRAM 資源有限,所以在數(shù)據(jù)讀取模塊中會將每一層的特征圖切分成多個數(shù)據(jù) 塊逐次送入到運算模塊中進(jìn)行運算。每個數(shù)據(jù)塊的大小為 20×40,例如將大小為 3×160×320 的輸入圖片分成 64 個 3×20×40 的數(shù)據(jù)塊。
數(shù)據(jù)讀取時每次讀取 3×3 逐通道卷積核參數(shù)的大小為 16×3×3,讀取 1×1 逐點卷積核參 數(shù)的大小則為 16×16,兩者均為 16 通道,是因為卷積運算模塊為提升運算速度采用了 16 通道并行計算的結(jié)構(gòu)。數(shù)據(jù)傳輸過程中將特征圖,網(wǎng)絡(luò)參數(shù)通過指針連續(xù)地存儲在 DDR3 內(nèi)存中,方便數(shù)據(jù)存取,提高傳輸效率。
PYNQ-Z2 的 PS 端通過 AXI4 總線與 PL 端進(jìn)行通信,AXI4 總線協(xié)議具有高性能,高 頻率等優(yōu)勢。在 Vivado HLS 中編寫硬件代碼時需要將輸入圖片,模型參數(shù)和邊界框等 PS 端與 PL 端傳遞數(shù)據(jù)的接口定義為主或從接口,之后在 Vivado 中自動連線時軟件會添加 AXI Interconnect 用于管理總線,并自動為接口分配地址。
在硬件代碼編寫完成后,需要進(jìn)行 C 仿真和 C 綜合等步驟,最后導(dǎo)出 RTL,可以在導(dǎo) 出的 IP 核驅(qū)動的頭文件中找到接口的地址,然后在 PS 端開發(fā)時將圖片和網(wǎng)絡(luò)參數(shù)數(shù)據(jù)寫 入對應(yīng)地址即可,并從相應(yīng)的接口地址讀取輸出數(shù)據(jù)。
2.2.2 卷積運算模塊
設(shè)計卷積運算模塊來加速卷積運算是 FPGA 加速電路的關(guān)鍵,卷積運算模塊由 3×3 逐 通道卷積運算模塊和 1×1 逐點卷積運算模塊組成。
首先為了讓設(shè)計的 3×3 逐通道卷積運算模塊能夠在不同的卷積層間復(fù)用,需要保持 3×3 逐通道卷積前后數(shù)據(jù)塊大小不變,這需要對輸入和輸出數(shù)據(jù)塊進(jìn)行填充(padding)。輸入數(shù) 據(jù)塊原始大小為 20×40,本項目選擇 padding=1,則輸入數(shù)據(jù)塊大小變?yōu)?22×42,經(jīng)過 3×3 逐通道卷積后高和寬分別為 20 和 40,即輸出數(shù)據(jù)塊大小依舊為 20×40。如果接下來還需要 進(jìn)行 3×3 逐通道卷積,則再對輸出進(jìn)行填充使輸出數(shù)據(jù)塊大小也為 22×42,以保持運算過 程中數(shù)據(jù)塊大小不變,這樣就能很方便地復(fù)用 3×3 逐通道卷積運算模塊來節(jié)約硬件資源。
因為卷積運算過程中特征圖的通道數(shù)逐步變?yōu)?48,96,192,384,均為 16 的倍數(shù), 所以綜合考慮 FPGA 的并行性優(yōu)點和 PYNQ-Z2 自身資源情況,設(shè)計卷積運算模塊為 16 個 通道并行計算來提升運算速度。16 通道 3×3 逐通道卷積的輸入數(shù)據(jù)塊為 16×22×42,卷積核 為 16×3×3,輸出數(shù)據(jù)塊經(jīng)填充后也為 16×22×42。
因為 3×3 逐通道卷積由乘法和加法運算構(gòu)成,所以其運算模塊需要乘法器,加法器和 寄存器。針對 3×3 逐通道卷積運算模塊,以第一個通道為例,首先把偏置??11 放入寄存器 中,接著在第一個時鐘周期內(nèi),送入數(shù)據(jù)塊的輸入??11和卷積核參數(shù)??11并相乘,將結(jié)果與寄 存器內(nèi)的??11相加并送入寄存器中。第二個時鐘周期內(nèi)送入??12和參數(shù)??12重復(fù)上述操作,經(jīng) 過九個時鐘周期后輸出??11,所以需要 9 個時鐘周期來完成一次 3×3 逐通道卷積,期間共進(jìn)行了 9 次相乘并累加操作。則 16 通道并行計算共需要 16 個乘法器和 16 個加法器,即需要 16 個 DSP 資源。
同理可以設(shè)計 16 通道 1×1 逐點卷積運算模塊,以第一個通道為例, 1×1 逐點卷積運 算時可以不需要計算 padding 部分,直接從原始輸入數(shù)據(jù)塊開始計算,輸入數(shù)據(jù)塊第一個 通道的??11與卷積核參數(shù)??11相乘并將結(jié)果保存在寄存器mul1中,則 16 個通道得到 mul1~mul16共 16 個乘積值,接著乘積值兩兩相加得到add1~add8共 8 個累加值,再將得到 的結(jié)果不斷兩兩相加直到僅有一個累加值add15,最后再加上偏置得到輸出O11,所以完成 一次 16 通道 1×1 逐點卷積共需要 16 次乘法和加法運算。
本項目設(shè)計的硬件電路針對 1×1 逐點卷積運算模塊提供了最大 16 通道并行的計算方 式。考慮到 PYNQ-Z2 的 DSP 資源共 220 個,且 3×3 逐通道卷積運算模塊和邊界框輸出模 塊均占用 DSP 資源,所以最多可以例化 9 個 16 通道 1×1 逐點卷積運算模塊,需要乘法器 和加法器的數(shù)量均為 144 個,即需要 144 個 DSP 資源。
2.3 PS 端編程開發(fā)
本項目使用的 PYNQ-Z2 的 PS 端安裝了 Linux 操作系統(tǒng),配置好了 Python 開發(fā)環(huán)境,
并預(yù)裝了 Numpy 等常用庫和專用于 PYNQ 架構(gòu)的 PYNQ 開發(fā)庫。本項目通過 Micro SD 卡 啟動 PYNQ-Z2,借助網(wǎng)線將路由器與 PYNQ-Z2 相連,登陸路由器管理界面可以查看分配 給 PYNQ-Z2 的 IP 地址,讓電腦也連接路由器,使兩者的網(wǎng)絡(luò)段相同,就可以通過瀏覽器 登陸這個 IP 地址來訪問 PS 端自帶的 Jupyter Notebook 并進(jìn)行 Python 編程開發(fā)。
PS 端首先通過 PYNQ 庫中的 Xlnk 類來為輸入圖片,卷積核參數(shù),偏置,池化層輸出 和預(yù)測框等分配連續(xù)內(nèi)存,接著使用圖像庫 PIL 中的 Image 類從 Micro SD 卡中讀取 3×360×640 大小的輸入圖片,并將圖片壓縮為 3×160×320,再將壓縮后的圖片轉(zhuǎn)化為 numpy 數(shù)組后傳入 DDR3 內(nèi)存中。之前訓(xùn)練好的兩種卷積核參數(shù)和偏置數(shù)據(jù)都保存在了二進(jìn)制文件中,也需要從 SD 卡中分別讀取這些數(shù)據(jù)并按照卷積運算模塊數(shù)據(jù)塊的大小和運算順序 重新排列后送入 DDR3 內(nèi)存中。
數(shù)據(jù)傳輸完成后 PS 端通過 PYNQ 庫中的 Overlay 類燒寫比特流文件和 tcl 文件來配置 PYNQ-Z2,然后當(dāng)輸入圖片和網(wǎng)絡(luò)參數(shù)寫入到對應(yīng)地址時硬件電路就開始工作,全部運算 完成后 PS 端從相應(yīng)的地址讀取邊界框的值并在圖片上畫出邊界框。
第三部分 完成情況及性能參數(shù)/Final Design & Performance Parameters
3.1 實驗設(shè)計
3.1.1 神經(jīng)網(wǎng)絡(luò)模型訓(xùn)練
為了提升神經(jīng)網(wǎng)絡(luò)的訓(xùn)練效率,本次實驗把本地編寫好的 PyTorch 代碼和數(shù)據(jù)集一起 傳輸?shù)?a class="article-link" target="_blank" href="/tag/%E4%BA%91%E6%9C%8D%E5%8A%A1/">云服務(wù)器中重復(fù)進(jìn)行訓(xùn)練直到滿足精度要求,接著在測試集上測試網(wǎng)絡(luò)的識別精度, 如果能夠滿足要求就將訓(xùn)練好的網(wǎng)絡(luò)參數(shù)保存下來,并將格式轉(zhuǎn)化為二進(jìn)制文件。
3.1.2 硬件代碼仿真與綜合
本項目首先隨機(jī)選出幾張數(shù)據(jù)集中的圖片通過編程轉(zhuǎn)換成二進(jìn)制 bin 文件,進(jìn)行 C 仿 真時 Test bench 先是讀取二進(jìn)制圖片文件和訓(xùn)練好的網(wǎng)絡(luò)模型參數(shù),然后送入編寫好的 Test bench 網(wǎng)絡(luò)模型中計算并輸出結(jié)果,為了對比 Test bench 和硬件代碼的輸出結(jié)果,還需要將 網(wǎng)絡(luò)參數(shù)重排序后和圖片一起送入硬件代碼中計算并輸出結(jié)果,同時將重新排序后的網(wǎng)絡(luò) 參數(shù)保存成新的二進(jìn)制文件供給之后在 PS 端調(diào)用。對比 Test bench 和硬件代碼的輸出來判 斷硬件代碼邏輯功能的正確性。
實驗 C 仿真結(jié)果的報告如圖 3-1 所示,第 6 行顯示本次輸入圖片的編號為 0,第 9 行顯示輸入圖片第 10 行第 21 列這個數(shù)據(jù)塊的第二個邊界框的置信度最大,第 14 行顯示其值 近似為 0.897,第 10 至 13 行顯示了 Test bench 輸出邊界框歸一化后的坐標(biāo)和寬高,將這四 個值與數(shù)據(jù)塊的寬高 40 和 20 對應(yīng)相乘后得 21.24,10.34,3.99,6.04,與第 20 行顯示的 硬件代碼輸出邊界框的預(yù)測結(jié)果十分相近,同時硬件代碼輸出邊界框的置信度近似為 0.891, 與 Test bench 的結(jié)果也十分接近??梢钥吹?Test bench 和硬件代碼兩者輸出的邊界框和置信 度都非常相近,且經(jīng)過與真實輸入圖片中目標(biāo)的位置對比發(fā)現(xiàn)三者的結(jié)果基本一致,可以認(rèn)為硬件代碼的邏輯功能正確,能夠完成目標(biāo)檢測任務(wù)。C 仿真通過后接著進(jìn)行 C 綜合,C 綜合可以根據(jù)實驗一開始選擇的 PYNQ-Z2 的芯片型號,編寫的硬件代碼和 directives 指令自動為硬件電路分配資源,并生成 Verilog 代碼。如 圖 3-2 所示,C 綜合結(jié)果的報告給出了硬件電路運行所用的時間。
表 3-1 則給出了整個硬件電路所需要的 BRAM,DSP 等資源情況,可以根據(jù) C 綜合報告修改各個模塊的硬件代碼或者 directives 指令來調(diào)整資源利用率,直到滿足要求??梢钥吹奖卷椖吭O(shè)計的硬件代碼已經(jīng)幾乎利用了全部 DSP 和 BRAM 資源。又因為 C 綜合時往往對所需 LUT 的資源預(yù)測值遠(yuǎn)超實際值,所以報告顯示 LUT 資源超出總額,更加真實的資源利用情況需要在 Vivado 中生成比特流文件后的報告中查看。
硬件代碼 C 綜合通過之后就可以開始進(jìn)行 C/RTL 協(xié)同仿真,協(xié)同仿真主要是從時序角 度檢測硬件代碼是否正確,仿真結(jié)果會得到一個波形文件,可通過觀察波形來判斷硬件代 碼的執(zhí)行時序是否正確。通過觀察仿真波形可以確認(rèn)本項目設(shè)計的硬件代碼時序正確,仿真可以通過。
3.1.3 生成比特流文件
硬件代碼的仿真與綜合都通過之后就可以將硬件代碼封裝成 IP 導(dǎo)出,打開 Vivado 并選擇 PYNQ-Z2 開發(fā)板新建工程,調(diào)用封裝好的 IP 和開發(fā)板上的 RAM 芯片 ZYNQ7000。
因為 ZYNQ7000 的從 AXI_HP 接口默認(rèn)不使用,所以需要手動配置好這個端口。PS 端還需 要引出一個時鐘信號提供給 PL 端,其他參數(shù)在添加 PYNQ-Z2 開發(fā)板時已經(jīng)基本設(shè)置妥當(dāng), 通過自動連線生成的電路如圖 3-3 所示。
電路連接完成后即可開始生成比特流 bit 文件,接著導(dǎo)出 Block Design 來生成 tcl 文件,之后的 PS 端調(diào)試需要調(diào)用這兩個文件來配置 PYNQ-Z2。圖 3-4 是生成比特流后的報告, 可以得到比 C 綜合報告更為真實的資源利用情況,此時 LUT 資源利用率從 157%降至 71%, 所以 PYNQ-Z2 能夠滿足本論文設(shè)計的硬件電路的要求。
圖 3-5 顯示硬件電路的總片上功耗為 2.322W,功耗表現(xiàn)滿足預(yù)設(shè)目標(biāo)。圖 3-6 則具體顯示了片上各部分的功耗情況,其中總功耗中動態(tài)功耗占了絕大部分,而 RAM 芯片功耗 則占據(jù)了 60%左右的動態(tài)功耗。
3.1.4 PS 端開發(fā)驗證
在生成比特流文件和導(dǎo)出 Block Design 之后,即可開始本次實驗的最后一步,在 PS 端 編程來驗證硬件代碼在 PYNQ-Z2 上能否完成目標(biāo)檢測任務(wù)。首先用網(wǎng)線將 PYNQ-Z2 與路 由器相連并通過 USB 線供電,這樣 PYNQ-Z2 能夠聯(lián)網(wǎng),可以隨時從網(wǎng)上下載各種開發(fā)包 和環(huán)境。由于 PYNQ-Z2 可以通過 Samba 服務(wù)來共享文件夾,所以可以很方便地將比特流 文件,tcl 文件,輸入圖片和重新排序的網(wǎng)絡(luò)參數(shù)二進(jìn)制文件直接傳到 SD 卡上的 Jupyter Notebook 文件夾內(nèi)。
實驗可以準(zhǔn)確地識別出圖 3-8 中的行人和圖 3-9 中的游客,證明本項目設(shè)計的硬件電路能夠完成目標(biāo)檢測任務(wù)。
3.2 實現(xiàn)功能與性能指標(biāo)
本項目 PYNQ-Z2 開發(fā)板加速目標(biāo)檢測網(wǎng)絡(luò),可以在輸入圖片上標(biāo)出邊界框。又因為 PYNQ-Z2 的資源有限,本項目設(shè)計的硬件電路運算速度還不到 200MFLOPS。但是該電路 可以根據(jù)所選開發(fā)板的資源情況來例化適合的 1×1 逐點卷積運算模塊數(shù)量,以此來提升運 算速度。
從生成比特流的報告中可知硬件電路的總片上功耗為 2.322W,遠(yuǎn)小于預(yù)設(shè)的功耗 8W, 所以本論文優(yōu)化設(shè)計的 FPGA 加速電路在功耗方面滿足預(yù)期目標(biāo)。
接著需要考察另一個指標(biāo) IoU,也稱為交并比,需要通過“預(yù)估的邊界框”與“實際 的邊界框”之間交集和并集的比值來計算。又因其要求嚴(yán)格,所以一般認(rèn)為目標(biāo)檢測結(jié)果IoU 大于 0.5 即可滿足精度要求。本次實驗利用 DAC-SDC 訓(xùn)練集來訓(xùn)練網(wǎng)絡(luò)參數(shù),接著用 準(zhǔn)備的測試集圖片對訓(xùn)練好的網(wǎng)絡(luò)進(jìn)行測試,得到 IoU 約等于 0.573,所以本項目構(gòu)建的網(wǎng) 絡(luò)模型的準(zhǔn)確率也滿足預(yù)設(shè)目標(biāo)。
第四部分 總結(jié)
項目總結(jié)
本項目依據(jù) SkyNet 和 iSmart 網(wǎng)絡(luò)的設(shè)計原理,合理地構(gòu)建了一個主要由 3×3 逐通道卷積和 1×1 逐點卷積組成的輕量級卷積神經(jīng)網(wǎng)絡(luò)用來完成目標(biāo)檢測任務(wù),并專門為這兩類卷積優(yōu)化設(shè)計了 FPGA 硬件加速電路模塊來提升卷積運算速度,同時通過對卷積運算模塊 的充分復(fù)用較好地節(jié)約了開發(fā)板資源。
本項目在 PYNQ-Z2 開發(fā)板上設(shè)計的硬件加速電路可以很好地完成目標(biāo)檢測任務(wù),輸出 的邊界框能夠準(zhǔn)確地框選出圖片中的行人或者物體。硬件電路總片上功耗只有 2.322W,而 IoU 可以達(dá)到 0.573,基本滿足了設(shè)計目標(biāo)。
【QQ交流群】群號:173560979,進(jìn)群暗語:FPGA技術(shù)江湖粉絲。
多年的FPGA企業(yè)開發(fā)、培訓(xùn)經(jīng)驗,各種通俗易懂的學(xué)習(xí)資料以及學(xué)習(xí)方法,濃厚的交流學(xué)習(xí)氛圍,QQ群目前已有6000多名志同道合的小伙伴,無廣告純凈模式,給技術(shù)交流一片凈土,從初學(xué)小白到行業(yè)精英業(yè)界大佬等,從軍工領(lǐng)域到民用企業(yè)等,從通信、圖像處理到人工智能等各個方向應(yīng)有盡有,F(xiàn)PGA技術(shù)江湖打造最純凈最專業(yè)的技術(shù)交流學(xué)習(xí)平臺。