電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>基于FPGA的披薩切片角度計(jì)算器

基于FPGA的披薩切片角度計(jì)算器

2023-06-16 | zip | 0.00 MB | 次下載 | 免費(fèi)

資料介紹

描述

介紹

嗨,在這個(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

pYYBAGN1HgqAEqbhAAA6AVUESW4941.png
系統(tǒng)總覽
?

在你開始之前

項(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ò)所需的步驟。

poYBAGN1Hg2AB4CNAACqeb0xOQk890.png
從數(shù)據(jù)集到 DPU 精靈的工作流程
?

詳細(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 RepoXilinx 教程。 量化步驟需要有效的網(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 文件加載。

pYYBAGN1Hg-AYtEWAAFSU9ME240037.png
Python 導(dǎo)入、FPGA bin 和 DPU 文件加載
?

生成切片蒙版。找到最佳角度的問題以幾何方式解決。我使用了 180 個(gè)蒙版,將 320 x 320 的圖像分成兩部分。注釋代碼,啟用繪制切片 mak 的 matplotlib 圖。

poYBAGN1HhKAUTVBAAFTr5_Rza8773.png
生成切片蒙版
?

為 Yolov3 網(wǎng)絡(luò)加載錨點(diǎn)。Yolov3 使用一組固定的錨點(diǎn)來生成邊界框。這些錨點(diǎn)用于評(píng)估函數(shù)。

pYYBAGN1HhWAE-I1AADfqsQYTk0897.png
yolov3 主播
?

評(píng)估函數(shù)將 Yolov3 輸出轉(zhuǎn)換為框、類和分?jǐn)?shù)。這是必需的,因?yàn)樗衅渌襟E都需要邊界框格式的輸出。

poYBAGN1HhiAKDd4AAIDXfeLX-I038.png
評(píng)價(jià)功能
?

用于相機(jī)輸入和投影儀輸出的 HDMI 設(shè)置。該代碼與 PYNQ HDMI 接口兼容。此時(shí)可以設(shè)置自定義輸入/輸出。

poYBAGN1HhuAYy7VAADg6QhzepI330.png
輸入/輸出設(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 輸出圖像寬度

pYYBAGN1Hh6AYVgZAAIF_-7frdQ566.png
圖像捕捉、裁剪和調(diào)整大小
?

DPU init 和 DPU Task 啟動(dòng)。評(píng)估函數(shù)將原始 Yolov3 網(wǎng)絡(luò)輸出轉(zhuǎn)換為邊界框格式。

poYBAGN1HiKAYBxNAAJ4WRgS7nY286.png
DPU 初始化和評(píng)估
?

評(píng)估函數(shù)的輸出被傳遞到排序過程。重復(fù)的比薩檢測(cè)被刪除,只使用比薩的最高置信度。如果置信度高于 0.5,則使用 Pepperoni 檢測(cè)。

pYYBAGN1HiWAEOCoAAFB_9-KNGQ399.png
重新排序原始的 Yolo 輸出
?

基于排序過程,在 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è)意大利辣香腸熱圖。

poYBAGN1HieAXtPVAAEtHj95q-o867.png
生成意大利辣香腸熱圖
?

意大利辣香腸熱圖,覆蓋意大利辣香腸切片也被模擬(較亮的區(qū)域)。這就是為什么使用對(duì)象檢測(cè)網(wǎng)絡(luò)而不是分割網(wǎng)絡(luò)的原因之一。使用目標(biāo)檢測(cè)網(wǎng)絡(luò)和橢圓區(qū)域近似覆蓋意大利辣香腸可以進(jìn)行模擬。

pYYBAGN1HiqADkdEAAHFt3NxxFs263.png
意大利辣香腸熱圖與輸入圖像
?

3D 意大利辣香腸熱圖,重疊的意大利辣香腸區(qū)域被繪制為尖峰。該圖非常清楚地顯示了在橢圓區(qū)域近似和層添加之后如何組合熱圖數(shù)據(jù)。

poYBAGN1Hi2ANAVdAAGgfxVxGBg791.png
3D 近似熱圖
?

在計(jì)算意大利辣香腸熱圖后,必須定義最佳切割角度。這個(gè)問題是通過對(duì)意大利辣香腸熱圖應(yīng)用蒙版來解決的。掩碼將熱圖值的一半設(shè)置為零。應(yīng)用掩碼后,所有元素都被匯總。該值與原始意大利辣香腸熱圖中的所有元素的一半進(jìn)行比較。二分搜索算法試圖最小化從掩碼總和到半熱圖總和的差異。我使用了我們只需要從 0 到 180 度搜索的事實(shí),因?yàn)檠诖a圍繞數(shù)組的中心旋轉(zhuǎn)。這種搜索非常有效,并且極大地減少了計(jì)算次數(shù)。

pYYBAGN1HjGAI8GPAAKQfN34lb4339.png
二分查找最佳切割角度
?

3D 最佳切割角度的可視化

poYBAGN1HjOAeKsiAAG8_JRhfCk583.png
3D 披薩切片
?

在最后一步中,計(jì)算“Cut Here”的輸出圖像和切割箭頭。

pYYBAGN1HjaAUrMmAAD5arm7sQ8364.png
輸出圖像計(jì)算
?

設(shè)置

pYYBAGN1HjuAVEPtAAncX2znGow074.jpg
帶鏡子和 GoPro 攝像頭的 Bottum Up 投影儀
?
poYBAGN1HkCAdpRjAAZGT0nCOmo868.jpg
帶鏡子和 GoPro 攝像頭的 Top Down 投影儀
?

?


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評(píng)論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
  2. 1.06 MB  |  532次下載  |  免費(fèi)
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費(fèi)
  5. 3TC358743XBG評(píng)估板參考手冊(cè)
  6. 1.36 MB  |  330次下載  |  免費(fèi)
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費(fèi)
  9. 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費(fèi)
  11. 6迪文DGUS開發(fā)指南
  12. 31.67 MB  |  194次下載  |  免費(fèi)
  13. 7元宇宙底層硬件系列報(bào)告
  14. 13.42 MB  |  182次下載  |  免費(fèi)
  15. 8FP5207XR-G1中文應(yīng)用手冊(cè)
  16. 1.09 MB  |  178次下載  |  免費(fèi)

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費(fèi)
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費(fèi)
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費(fèi)
  7. 4開關(guān)電源設(shè)計(jì)實(shí)例指南
  8. 未知  |  21549次下載  |  免費(fèi)
  9. 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費(fèi)
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費(fèi)
  13. 7電子制作實(shí)例集錦 下載
  14. 未知  |  8113次下載  |  免費(fèi)
  15. 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費(fèi)

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費(fèi)
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537798次下載  |  免費(fèi)
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費(fèi)
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費(fèi)
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費(fèi)
  11. 6電路仿真軟件multisim 10.0免費(fèi)下載
  12. 340992  |  191187次下載  |  免費(fèi)
  13. 7十天學(xué)會(huì)AVR單片機(jī)與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費(fèi)
  15. 8proe5.0野火版下載(中文版免費(fèi)下載)
  16. 未知  |  138040次下載  |  免費(fèi)