資料介紹
描述
介紹
嗨,在這個(gè)項(xiàng)目中,我想向您展示如何構(gòu)建一個(gè)基于 FPGA 加速 Yolov3 網(wǎng)絡(luò)的披薩切片角度計(jì)算器。披薩配料由 Yolov3 網(wǎng)絡(luò)分析。根據(jù) Yolo 輸出,計(jì)算出意大利辣香腸熱圖。此熱圖用于計(jì)算將比薩餅切成兩半的完美角度。最佳切割角度的結(jié)果投影在披薩附近。Avnet 的 Ultra96-V2 板用于所有計(jì)算。GoPro Hero 相機(jī)用于從意大利辣香腸比薩餅中捕捉圖像。相機(jī)和投影儀連接到 Ultra96-V2 板。我使用了定制的 HDMI 板,但您可以使用 USB 網(wǎng)絡(luò)攝像頭進(jìn)行圖像捕捉。來自相機(jī)的傳入圖像會(huì)調(diào)整大小,這是通過可編程邏輯 (PL) 加速器完成的。Yolov3對(duì)象檢測(cè)網(wǎng)絡(luò),DPU ) 執(zhí)行比薩餅和意大利辣香腸檢測(cè)。#projectofthemonth
在你開始之前
項(xiàng)目文檔分為“入門”、“從數(shù)據(jù)集到DPU精靈”和“切片器程序”三個(gè)部分。“入門”部分描述了在 Ultra96V2 板上運(yùn)行基于 Yolo 的披薩切片機(jī)所需的步驟。“從數(shù)據(jù)集到 DPU elf”一節(jié)描述了從自定義數(shù)據(jù)集到 DPU elf 文件的整個(gè)開發(fā)過程。該項(xiàng)目的這一部分最耗時(shí),因?yàn)?a href='http://wenjunhu.com/tags/賽靈思/' target='_blank' class='arckwlink_none'>賽靈思文檔和示例僅涵蓋了整個(gè)開發(fā)過程的一部分。目前,這部分正在建設(shè)中,但結(jié)合項(xiàng)目源代碼,它是您自定義 Xilinx DPU 項(xiàng)目的良好起點(diǎn)。就在這個(gè)項(xiàng)目在 hackster 上發(fā)布前幾個(gè)小時(shí),LogicTronix 發(fā)布了這個(gè)教程,其中涵蓋了 Yolov3 到 DPU 精靈編譯的某些部分。最后但同樣重要的是,您可以在“切片器程序”部分找到實(shí)現(xiàn) Pizza 切片器應(yīng)用程序的 Python 代碼的詳細(xì)描述。
入門
- 下載 Ultra96V2 的 PYNQ V2.6映像
- 從這個(gè)黑客教程安裝 PYNQ-DPU
- 為了提高 OpenCV 的速度,我在 Tengine 支持下重建了 OpenCV。這提高了基于 ARM 處理器的系統(tǒng)的整體性能。
- 克隆我的項(xiàng)目存儲(chǔ)庫以構(gòu)建 FPGA 硬件。我使用了定制的 HDMI 板,因此 Pizza-base-without-hdmi.tcl 創(chuàng)建了帶有 pl 圖像調(diào)整器和 DPU 的 Ultra96-V2 板,沒有 HDMI 輸入/輸出。
- 從 Vitis ai docker 運(yùn)行 compile-caffe.sh 腳本。該腳本使用預(yù)訓(xùn)練的 Caffe 模型。我還將用于 DPU 量化和編譯的測(cè)試圖像放入存儲(chǔ)庫中。
- 復(fù)制板上的FPGA *.bin 文件和DPU *.elf 文件。但一切都在與披薩切片機(jī) jupyter notebook 相同的目錄中。
- 使用我的 repo 中的披薩切片機(jī) jupyter notebook 并測(cè)試 yolov3 網(wǎng)絡(luò)并切片一些披薩。
?
從數(shù)據(jù)集到 DPU 精靈
遺憾的是,Xilinx 的 Zoo 模型沒有提供用于比薩檢測(cè)的預(yù)訓(xùn)練網(wǎng)絡(luò),所以我不得不從頭開始構(gòu)建網(wǎng)絡(luò)。下圖顯示了在 Xilinx DPU 上運(yùn)行 Yolo 網(wǎng)絡(luò)所需的步驟。
詳細(xì)的工作流程:
- 圖片:首先我必須得到一些意大利辣香腸披薩的圖片。我使用了來自 Google 的 22 張圖片,后來我添加了一些來自 GoPro 的真實(shí)圖片。所有圖像都已調(diào)整大小并裁剪為 320x320 像素。
- 圖像注釋:圖像注釋的一個(gè)很好的工具是Microsoft VoTT 。對(duì)于披薩切片機(jī)應(yīng)用程序,使用了披薩和意大利辣香腸的邊界框。VoTT 可以導(dǎo)出不同格式的數(shù)據(jù)集,我使用Pascal VOC 格式進(jìn)行導(dǎo)出。
- 數(shù)據(jù)增強(qiáng):訓(xùn)練一個(gè)只有 22 張圖像的網(wǎng)絡(luò)對(duì)于網(wǎng)絡(luò)推理來說不是很健壯。為了提高訓(xùn)練數(shù)據(jù)集和魯棒性,來自roboflow ai的數(shù)據(jù)增強(qiáng)工作流程. 用來。這是一種修改小型數(shù)據(jù)集并添加一些預(yù)處理圖像進(jìn)行訓(xùn)練的簡(jiǎn)單方法。使用每個(gè)數(shù)據(jù)集限制為 1000 張圖像的免費(fèi)帳戶,可以構(gòu)建一個(gè)小型數(shù)據(jù)集。對(duì)于這個(gè)用例,旋轉(zhuǎn)和飽和是模擬真實(shí)世界場(chǎng)景的好方法。很酷的是,roboflow 在預(yù)處理步驟中更新注釋。我的最終數(shù)據(jù)集包含大約 800 張披薩圖像,慢慢地我餓了…… 需要將預(yù)處理的數(shù)據(jù)集導(dǎo)出到 Pascal VOC(Xilinx DPU 編譯)和 Yolo 數(shù)據(jù)集(用于訓(xùn)練)。生成多種輸出格式的可能性是 roboflow 的另一個(gè)重要功能。
- 網(wǎng)絡(luò)訓(xùn)練:YOLO 網(wǎng)絡(luò)是用darknet訓(xùn)練的。對(duì)于訓(xùn)練,使用了Google Colab GPU 筆記本。培訓(xùn)筆記本可在我的 GitHub 存儲(chǔ)庫中找到。我在我的 Colab 筆記本中添加了對(duì) yolov2-tiny、yolov3-tiny 和 yolov4-tiny 訓(xùn)練的支持。訓(xùn)練后,您可以比較不同的網(wǎng)絡(luò)及其輸出。用于該項(xiàng)目的預(yù)訓(xùn)練網(wǎng)絡(luò)可在我的 GitHub 存儲(chǔ)庫中獲得。
- Darknet to Caffe convert:要將 Yolo 網(wǎng)絡(luò)與 Xilinx DPU 一起使用,必須將網(wǎng)絡(luò)轉(zhuǎn)換為 Caffe 格式。這一步很棘手。幾乎沒有關(guān)于如何將暗網(wǎng)輸出轉(zhuǎn)換為與 Xilinx Vitis ai 編譯器兼容的 Caffe 模型的文檔。Xilinx 在Vitis-Ai存儲(chǔ)庫中提供了 xilinx-caffe 版本。我構(gòu)建了一個(gè)docker 容器,它構(gòu)建了 xilinx-caffe 版本,該容器能夠?qū)稻W(wǎng)模型轉(zhuǎn)換為 caffe 模型。要轉(zhuǎn)換暗網(wǎng)模型(*cfg 和 *weights),請(qǐng)使用convert.py腳本,該腳本位于Vitis-AI/AI-Model-Zoo/caffe-xilinx/scripts/如果一切正常,您將獲得一個(gè) *.prototxt 和一個(gè) *.caffe 模型
- 編譯DPU elf:最后一步,DPU elf文件的量化和編譯需要一些準(zhǔn)備。需要一個(gè) Vivado 硬件項(xiàng)目,其中包括 DPU IP、Pascal 驗(yàn)證數(shù)據(jù)集、Caffe 網(wǎng)絡(luò)和 Vitis-AI docker 容器。這僅對(duì) Ultra96-V2 板 DPU 上的 Yolo 網(wǎng)絡(luò)有效,對(duì)于其他網(wǎng)絡(luò)類型,要求可能有所不同。需要在 Vitis Ai docker 容器內(nèi)執(zhí)行以下步驟。但在我們能夠編譯模型之前,我們必須更改 *.prototxt 文件的第一個(gè)“層”。請(qǐng)參閱項(xiàng)目 GitHub Repo和Xilinx 教程。 量化步驟需要有效的網(wǎng)絡(luò)輸入數(shù)據(jù)。為了讓第一層的圖像加載器運(yùn)行起來,我們需要 ms coco 數(shù)據(jù)集格式的圖像。幸運(yùn)的是,roboflow 可以以 coco 格式導(dǎo)出數(shù)據(jù)集(參見“數(shù)據(jù)增強(qiáng)”步驟)。對(duì)于量化,可以使用來自 roboflow 的測(cè)試圖像。Roboflow 自動(dòng)將數(shù)據(jù)集拆分為測(cè)試、訓(xùn)練和有效部分。完整的編譯代碼、測(cè)試圖像和 DPU 配置是我 repo 的一部分。除了網(wǎng)絡(luò)層適配之外,DPU 編譯器還需要一些有關(guān) DPU 的信息,這些信息在硬件設(shè)計(jì)中實(shí)現(xiàn)。配置存儲(chǔ)在 JSON 文件中。JSON 文件分為兩部分,一是 CPU 架構(gòu)和 DPU 類型,另一部分是 DPU 配置(Cores、Softmax 等)。這個(gè) JSON 文件可以使用 DELT 工具生成。DELT 工具將 *.hwh 文件轉(zhuǎn)換為 JSON 文件,可用于編譯。有關(guān)更多信息,請(qǐng)參閱此賽靈思論壇帖子。我的自定義 JSON 文件是我的repo的一部分。如果你準(zhǔn)備好了一切,你就可以量化和編譯 DPU 精靈了。從您的自定義網(wǎng)絡(luò)。如果一切成功,就會(huì)生成dpu.elf文件。該文件可以使用 PYNQ-DPU python 框架加載。
切片程序
最后一部分解釋了 Pizza Slicer 代碼。該程序是用python3編寫的,并使用jupyter notebook來控制程序。源代碼
前三個(gè)單元格涵蓋了所有 Python 導(dǎo)入和 FPGA/DPU 文件加載。
生成切片蒙版。找到最佳角度的問題以幾何方式解決。我使用了 180 個(gè)蒙版,將 320 x 320 的圖像分成兩部分。注釋代碼,啟用繪制切片 mak 的 matplotlib 圖。
為 Yolov3 網(wǎng)絡(luò)加載錨點(diǎn)。Yolov3 使用一組固定的錨點(diǎn)來生成邊界框。這些錨點(diǎn)用于評(píng)估函數(shù)。
評(píng)估函數(shù)將 Yolov3 輸出轉(zhuǎn)換為框、類和分?jǐn)?shù)。這是必需的,因?yàn)樗衅渌襟E都需要邊界框格式的輸出。
用于相機(jī)輸入和投影儀輸出的 HDMI 設(shè)置。該代碼與 PYNQ HDMI 接口兼容。此時(shí)可以設(shè)置自定義輸入/輸出。
第一步中裁剪來自相機(jī)的輸入圖像,以選擇感興趣區(qū)域 (ROI)。我的 GoPro 攝像機(jī)輸出 720p 圖像,因此 ROI 設(shè)置為 440 x 440 像素,裁剪是在軟件中完成的。如果您的相機(jī)沒有固定在投影儀上,并且需要進(jìn)行一些調(diào)整以使比薩餅適合 ROI 中間,這將非常有用。ROI 圖像數(shù)據(jù)被傳輸?shù)?FPGA 圖像縮放器,數(shù)據(jù)傳輸由一些 DMA 任務(wù)完成。為了啟用從 python 內(nèi)存到 PL 內(nèi)存的數(shù)據(jù)傳輸,使用了 pynq.buffer。PL 圖像縮放器的輸出用作 DPU 輸入。PL resizer 的源代碼來自這個(gè)PYNQ-Helloworld GitHub repo. PL resizer 可以處理自定義輸入/輸出圖像,輸入/輸出圖像的設(shè)置可以通過寄存器進(jìn)行設(shè)置。必須設(shè)置四個(gè)寄存器值: 0x10:輸入圖像高度;0x18 輸入圖像寬度;0x20 輸出圖像高度;0x28 輸出圖像寬度
DPU init 和 DPU Task 啟動(dòng)。評(píng)估函數(shù)將原始 Yolov3 網(wǎng)絡(luò)輸出轉(zhuǎn)換為邊界框格式。
評(píng)估函數(shù)的輸出被傳遞到排序過程。重復(fù)的比薩檢測(cè)被刪除,只使用比薩的最高置信度。如果置信度高于 0.5,則使用 Pepperoni 檢測(cè)。
基于排序過程,在 320 x320 uint8 數(shù)組中繪制了一個(gè)虛擬披薩。邊界框坐標(biāo)用于在邊界框內(nèi)繪制一個(gè)橢圓。橢圓的內(nèi)部用 1 填充,外部用 0 填充。每個(gè)意大利辣香腸近似值都添加到 320 x 320 基本數(shù)組中。基本數(shù)組元素是一個(gè)披薩邊界框近似。披薩基數(shù)組之外的意大利辣香腸檢測(cè)將被忽略。結(jié)果是一個(gè)意大利辣香腸熱圖。
意大利辣香腸熱圖,覆蓋意大利辣香腸切片也被模擬(較亮的區(qū)域)。這就是為什么使用對(duì)象檢測(cè)網(wǎng)絡(luò)而不是分割網(wǎng)絡(luò)的原因之一。使用目標(biāo)檢測(cè)網(wǎng)絡(luò)和橢圓區(qū)域近似覆蓋意大利辣香腸可以進(jìn)行模擬。
3D 意大利辣香腸熱圖,重疊的意大利辣香腸區(qū)域被繪制為尖峰。該圖非常清楚地顯示了在橢圓區(qū)域近似和層添加之后如何組合熱圖數(shù)據(jù)。
在計(jì)算意大利辣香腸熱圖后,必須定義最佳切割角度。這個(gè)問題是通過對(duì)意大利辣香腸熱圖應(yīng)用蒙版來解決的。掩碼將熱圖值的一半設(shè)置為零。應(yīng)用掩碼后,所有元素都被匯總。該值與原始意大利辣香腸熱圖中的所有元素的一半進(jìn)行比較。二分搜索算法試圖最小化從掩碼總和到半熱圖總和的差異。我使用了我們只需要從 0 到 180 度搜索的事實(shí),因?yàn)檠诖a圍繞數(shù)組的中心旋轉(zhuǎn)。這種搜索非常有效,并且極大地減少了計(jì)算次數(shù)。
3D 最佳切割角度的可視化
在最后一步中,計(jì)算“Cut Here”的輸出圖像和切割箭頭。
設(shè)置
?
- labview計(jì)算器 24次下載
- 使用Proximus公共LoRaWAN連接推送披薩
- 計(jì)算器labview實(shí)現(xiàn)的課程實(shí)驗(yàn)報(bào)告 27次下載
- 基于FPGA的電子計(jì)算器設(shè)計(jì)(中)
- 電阻衰減網(wǎng)絡(luò)計(jì)算器設(shè)計(jì)與實(shí)現(xiàn) 22次下載
- 西門子PLC地址計(jì)算器軟件Modbus下載 19次下載
- 編程簡(jiǎn)易計(jì)算器制作資料合集包括源程序和計(jì)算器仿真圖免費(fèi)下載 54次下載
- 簡(jiǎn)易計(jì)算器設(shè)計(jì)與制作 88次下載
- tenda pin碼計(jì)算器下載 1.0綠色版 0次下載
- 吃個(gè)披薩就能理解云計(jì)算中IaaS、PaaS和SaaS 0次下載
- 基于FPGA的計(jì)算器設(shè)計(jì)(源碼) 31次下載
- 子網(wǎng)掩碼計(jì)算器 3次下載
- PCB崩孔錫圈及角度計(jì)算器 38次下載
- 衛(wèi)星天線角度計(jì)算器 32次下載
- 衛(wèi)星天線角度計(jì)算器 (Startv)
- AWTK 開源串口屏開發(fā)(13) - 計(jì)算器應(yīng)用 4866次閱讀
- DS1086L的頻率計(jì)算器 664次閱讀
- ISM-RF接收機(jī)的基帶計(jì)算 886次閱讀
- 封裝熱分析計(jì)算器教程 895次閱讀
- ADC/DAC精度計(jì)算器教程 953次閱讀
- TS語言開發(fā)HarmonyOS應(yīng)用:分布式計(jì)算器開發(fā)教程 2467次閱讀
- 基于STM32設(shè)計(jì)的計(jì)算器(實(shí)現(xiàn)基本運(yùn)算) 7870次閱讀
- 如何使用封裝熱分析計(jì)算器(PTA)的簡(jiǎn)短指南 2808次閱讀
- 計(jì)算器的結(jié)構(gòu)組成及故障處理方法 1.2w次閱讀
- 微軟標(biāo)志性的Windows計(jì)算器正式宣布開源啦! 3185次閱讀
- 用FPGA設(shè)計(jì)計(jì)算器 9238次閱讀
- 如何用VB編寫最簡(jiǎn)單的計(jì)算器程序 5.1w次閱讀
- AT89S52單片機(jī)實(shí)現(xiàn)簡(jiǎn)易計(jì)算器(C語言程序) 3.1w次閱讀
- 基于AT89C51單片機(jī)的十進(jìn)制計(jì)算器系統(tǒng)設(shè)計(jì) 6353次閱讀
- 交流瓦特計(jì)算器 3476次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
- 1.06 MB | 532次下載 | 免費(fèi)
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費(fèi)
- 3TC358743XBG評(píng)估板參考手冊(cè)
- 1.36 MB | 330次下載 | 免費(fèi)
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費(fèi)
- 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
- 6.40 MB | 227次下載 | 免費(fèi)
- 6迪文DGUS開發(fā)指南
- 31.67 MB | 194次下載 | 免費(fèi)
- 7元宇宙底層硬件系列報(bào)告
- 13.42 MB | 182次下載 | 免費(fèi)
- 8FP5207XR-G1中文應(yīng)用手冊(cè)
- 1.09 MB | 178次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21549次下載 | 免費(fèi)
- 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
- 0.00 MB | 6656次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537798次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191187次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語言視頻教程 下載
- 158M | 183279次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評(píng)論
查看更多