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