資料介紹
描述
介紹
今天的家庭擁有越來(lái)越多的智能設(shè)備,從電視到燈,再到百葉窗等等。如果我們要處理我們已經(jīng)生成的這些數(shù)據(jù),并用它來(lái)控制物聯(lián)網(wǎng)設(shè)備會(huì)怎樣?
幸運(yùn)的是,借助強(qiáng)大的新型邊緣計(jì)算設(shè)備,例如 Xilinx 的 Kria KV260,此類應(yīng)用變得越來(lái)越可行。
感謝 Xilinx 在 Xilinx 自適應(yīng)計(jì)算挑戰(zhàn)賽中提供 KV260 入門套件。
大綱
在本教程中,我們將了解如何使用 Vitis-AI 1.4 工具量化和編譯預(yù)訓(xùn)練的 PyTorch 模型以在 Xilinx Kria KV260 SOM 上運(yùn)行。然后我們將看看如何使用 Ubuntu 設(shè)置我們的 KV260,并安裝 PYNQ DPU Overlay。這將允許我們使用 Python 代碼在 KV260 上運(yùn)行我們編譯的模型。
最后,我將使用該模型檢測(cè)來(lái)自 USB 網(wǎng)絡(luò)攝像頭的一些手勢(shì),然后根據(jù)模型的輸出,通過(guò)我的本地 WiFi 網(wǎng)絡(luò)向我的 FireTV 棒發(fā)送一些命令,以允許我使用手勢(shì)導(dǎo)航菜單.
此項(xiàng)目的所有代碼以及其他提示、技巧和故障排除都可以在此項(xiàng)目的GitHub 頁(yè)面上找到。
本教程假設(shè)您熟悉以下概念:
- Python、PyTorch、虛擬環(huán)境/Conda
- 基本機(jī)器學(xué)習(xí)概念和術(shù)語(yǔ)
- 適用于 Linux 2 (WSL2) 的 Ubuntu / Linux / Windows 子系統(tǒng)
- SSH(X11 轉(zhuǎn)發(fā),可選)
- 碼頭工人(最?。?/font>
量化和編譯我們的預(yù)訓(xùn)練模型
對(duì)于本教程,我們將假設(shè)我們已經(jīng)有一個(gè)預(yù)訓(xùn)練的 PyTorch 模型,其權(quán)重保存到 .pt /.pth 文件中。
注意:我們將使用運(yùn)行舊版本 PyTorch 的 Vitis-AI 1.4。您需要確保您的模型與 torch==1.4.0 兼容,如果您使用更新版本的 PyTorch 訓(xùn)練模型,這可能需要使用 _use_new_zipfile_serialization=False保存您的.pt文件
如果您想從頭開(kāi)始構(gòu)建和訓(xùn)練模型,這里有大量教程,以及免費(fèi)的計(jì)算資源,例如 Google Colab,允許免費(fèi)(有限)使用 GPU 進(jìn)行訓(xùn)練和實(shí)驗(yàn)。
注意:本教程側(cè)重于將 PyTorch 模型轉(zhuǎn)換為 xmodel,但我們?cè)诖颂幇惭b的 docker 工具也具有將 TensorFlow 和 Caffe 模型轉(zhuǎn)換為 xmodel 的功能。請(qǐng)參閱賽靈思文檔。一旦模型被量化并編譯為 KV260 的 xmodel,本教程后面的部分就可以按原樣使用,不管我們的浮點(diǎn)模型最初是用什么格式構(gòu)建的。
我將使用一個(gè)自定義模型,該模型是我在電視前的數(shù)據(jù)集上訓(xùn)練的,執(zhí)行我想使用的不同手勢(shì)。
該模型能夠預(yù)測(cè)六種不同的手勢(shì):上、下、左、右、手掌和拳頭。我們將使用這些手勢(shì)在我的電視上導(dǎo)航菜單。
該模型處理形狀為 [1, 63] 的輸入向量,該向量對(duì)應(yīng)于 21 個(gè)手部關(guān)鍵點(diǎn)的 x、y、z 坐標(biāo)的扁平數(shù)組,我們?cè)陬A(yù)處理步驟中使用MediaPipe提取該數(shù)組(稍后會(huì)詳細(xì)介紹)。模型輸出一個(gè) [1, 6] 向量,我們可以取它的 softmax 來(lái)確定每個(gè)類的概率,取最大條目作為我們的預(yù)測(cè)輸出。
GitHub 頁(yè)面上提供了預(yù)訓(xùn)練模型(.pt和 KV260 編譯版本)供您試用。請(qǐng)記住,您的里程可能會(huì)因其有效性而有所不同,因?yàn)樗鼘iT針對(duì)我的硬件設(shè)置和環(huán)境進(jìn)行了培訓(xùn)。
1. 安裝Xilinx Vitis-AI 工具
對(duì)于這一步,我們將從賽靈思下載一個(gè) docker 鏡像,并在其中運(yùn)行幾個(gè)命令。您需要一臺(tái)裝有 Linux 或能夠運(yùn)行 Linux VM 的計(jì)算機(jī)。在此示例中,我將使用帶有 WSL2 Ubuntu 20.04 的 Windows 10。
1.安裝Docker
- 在 Windows 上,確保接受 Docker 使用 WSL2 運(yùn)行的權(quán)限
2. 打開(kāi) Linux 終端并克隆https://github.com/Xilinx/Vitis-AI存儲(chǔ)庫(kù)。
3. 拉取正確版本的 Vitis-AI docker 鏡像。對(duì)于這個(gè)項(xiàng)目,我們需要 Vitis-AI 1.4。請(qǐng)注意,Docker 映像有GPU 版本和CPU 版本。如果您的系統(tǒng)中沒(méi)有 cuda GPU,則必須使用 CPU 版本。
# pick the correct version
docker pull xilinx/vitis-ai-cpu:1.4.1.978 # CPU version
docker pull xilinx/vitis-ai:1.4.1.978 # GPU version
4. 導(dǎo)航到我們之前克隆的 repo,并docker_run.sh
使用您要運(yùn)行的 docker 的標(biāo)簽調(diào)用腳本。前任:
peter@PeterDesktop:/mnt/d/Vitis-AI$ ./docker_run.sh xilinx/vitis-ai-cpu:1.4.1.978
-
注意:如果 bash 腳本出錯(cuò),您可能需要更改行尾
docker_run.sh
以兼容 Unix(在 notepad++ 中打開(kāi)并將左下角的選項(xiàng)更改為 LF 并保存)
有關(guān)更多詳細(xì)信息,請(qǐng)參閱Xilinx 安裝文檔。
接受提示,你應(yīng)該會(huì)看到一個(gè)漂亮的小 Vitis-AI 文字藝術(shù)。
==========================================
__ ___ _ _ _____
\ \ / (_) | (_) /\ |_ _|
\ \ / / _| |_ _ ___ ______ / \ | |
\ \/ / | | __| / __|______/ /\ \ | |
\ / | | |_| \__ \ / ____ \ _| |_
\/ |_|\__|_|___/ /_/ \_\_____|
==========================================
Docker Image Version: 1.4.1.978
Vitis AI Git Hash: 9f3d6db
Build Date: 2021-10-08
2.量化模型
KV260 旨在內(nèi)部使用整數(shù)來(lái)完成所有神經(jīng)網(wǎng)絡(luò)計(jì)算。這與 GPU 的工作方式不同,后者使用浮點(diǎn)值。要將我們的模型和權(quán)重轉(zhuǎn)換為在 FPGA 上工作,我們需要執(zhí)行一個(gè)稱為量化的步驟。
我們將使用量化模型的工具組織在 conda 虛擬環(huán)境中。要激活它,我們運(yùn)行:
conda activate vitis-ai-pytorch
請(qǐng)注意,此 conda env 運(yùn)行 PyTorch==1.4.0。可能不支持來(lái)自更新版本的 PyTorch 的 Pytorch 模型中的某些操作。
量化將由使用賽靈思 pytorch_nndct.apis
Python 庫(kù)的 Python 腳本完成。我使用的腳本來(lái)自鏈接的model_data/quantize.py
GitHub Repo。它應(yīng)該很容易適應(yīng)model_data/quantize.py
您自己的模型和數(shù)據(jù)集。
要運(yùn)行這個(gè)腳本,我們需要三件事:
- 預(yù)訓(xùn)練網(wǎng)絡(luò)的權(quán)重(a.pt 文件)
- 模型的 float / PyTorch 定義(繼承自 torch.nn.Module 的類)
- 一個(gè)小的測(cè)試數(shù)據(jù)集(200-1000張圖像,用于檢查量化模型的準(zhǔn)確性。量化過(guò)程可能會(huì)顯著降低模型的性能對(duì)于某些模型。這實(shí)際上是可選的。如果我們想跳過(guò)這一步,我們可以在導(dǎo)出之前使用隨機(jī)輸入轉(zhuǎn)發(fā)一次量化模型。
要訪問(wèn)這些文件,我們需要將它們(quantize.py文件、模型權(quán)重、模型定義和測(cè)試集)放在 docker 可見(jiàn)的目錄中。在這種情況下,我們將使用Vitis-AI/data
我們之前克隆的 repo 中的目錄,該目錄通過(guò)我們用來(lái)啟動(dòng)它的 bash 腳本設(shè)置為對(duì) docker 可見(jiàn)。
然后從運(yùn)行 docker 的終端,我們可以調(diào)用 python 腳本:
(vitis-ai-pytorch) Vitis-AI /workspace/data > python quantize.py
運(yùn)行此腳本后,我們應(yīng)該會(huì)在data
名為 的目錄中看到一個(gè)新文件夾quantize_result
,其中包含一個(gè)_int.xmodel
文件。如果是這種情況,我們準(zhǔn)備進(jìn)入下一步。如果發(fā)生問(wèn)題,請(qǐng)參閱故障排除部分。
補(bǔ)充閱讀:Xilinx PyTorch 量化文檔
3.編譯模型
現(xiàn)在我們的模型已經(jīng)量化為 Xilinx 中間表示 (XIR).xmodel 文件,我們需要針對(duì)我們要使用的特定硬件對(duì)其進(jìn)行編譯:KV260。
從 docker conda env 內(nèi)部,我們將運(yùn)行vai_c_xir
編譯器工具,它需要以下結(jié)構(gòu):
vai_c_xir -x /PATH/TO/quantized.xmodel -a /PATH/TO/arch.json -o /OUTPUTPATH -n NETNAME
-
-x :量化模型的路徑,如果您按照前面的說(shuō)明進(jìn)行操作,則應(yīng)該是該路徑。
data/quantize_result/_int.xmodel
-
-a:目標(biāo)架構(gòu) json。對(duì)于 KV260,這將是:
/opt/vitis_ai/compiler/arch/DPUCZDX8G/KV260/arch.json
-
-o:要輸出模型的目錄。建議:
.
-
-n:您希望編譯模型具有的文件名。前任:
mymodel_kv260
警告:注意它所說(shuō)的輸出行DPU subgraph number X
。這一定是1。否則,我們?cè)贙V260上嘗試運(yùn)行編譯好的模型時(shí),就會(huì)出現(xiàn)問(wèn)題。如果這不是 1,請(qǐng)參閱故障排除部分。
如果運(yùn)行成功,您應(yīng)該會(huì)看到名為 mymodel_kv260.xmodel
這是編譯好的模型。將其復(fù)制到 KV260 的可訪問(wèn)位置。我們將在以下部分中使用 Python 腳本加載和運(yùn)行它。
故障排除
如果您嘗試量化、編譯和運(yùn)行自己的模型,那么這個(gè)量化/編譯部分可能是您遇到最多問(wèn)題的地方。查看GitHub 存儲(chǔ)庫(kù)中的故障排除指南以獲得一些幫助。
使用 Ubuntu、PYNQ 和 Mediapipe 設(shè)置 KV260
對(duì)于這一步,我們將按照PYNQ Kria GitHub repo上提供的說(shuō)明開(kāi)始。簡(jiǎn)而言之,步驟是:
1. 用 Ubuntu 鏡像刷寫 microSD 卡。
2. SSH進(jìn)入KV260
3. 克隆 PYNQ Kria 存儲(chǔ)庫(kù)。
4. 運(yùn)行提供的安裝腳本。
PYNQ 安裝將創(chuàng)建一個(gè)名為 pynq-venv 的虛擬環(huán)境,其中包含所有 Vitis-AI 1.4 工具(VART、XIR、DPU Overlay),用于通過(guò)方便的 Python API 運(yùn)行已編譯的 xmodel。
最后,我們還要做一件事:將 Mediapipe 安裝到 pynq-venv。
Mediapipe 沒(méi)有安裝 aarch64 pip,因此我們必須自己在 KV260 上編譯輪子(說(shuō)明),或者您可以使用我在該項(xiàng)目的 GitHub 存儲(chǔ)庫(kù)中提供的輪子。
要安裝 wheel 文件,首先我們必須以 root 身份激活 pynq-venv,然后運(yùn)行 ??pip install:
sudo -i
source /etc/profile.d/pynq_venv.sh
pip install path/to/mediapose/wheel
使用 PYNQ DPU Overlay 運(yùn)行我們編譯的模型
為了運(yùn)行我們編譯的模型,并處理輸出以控制我的 FireTV 棒,我編寫了一個(gè)名為app_kv260.py
.
我們將在上一節(jié)中準(zhǔn)備好的文件中運(yùn)行這個(gè)腳本。pynq-venv
要激活 venv 并運(yùn)行 python 腳本,我們將使用以下命令。
sudo -i
source /etc/profile.d/pynq_venv.sh
xauth merge /home/ubuntu/.Xauthority # optional enable X11 forwarding (ignore warning)
python
我還包括了一個(gè)啟用 X11 轉(zhuǎn)發(fā)的行,這將允許我們?cè)谖覀冇脕?lái)通過(guò) SSH 連接到 Kria 的計(jì)算機(jī)上看到來(lái)自 OpenCV 的顯示。
這些是使用我們的模型設(shè)置 DPU 和運(yùn)行推理的關(guān)鍵線。
# Set up DPU
overlay = DpuOverlay("dpu.bit")
# Path to your compiled x model
path = '/home/ubuntu/my_model.xmodel'
# gives an assertion error if DPU subgraph number > 1
overlay.load_model(path)
dpu = overlay.runner
# Set up space in memory for input and output of DPU
inputTensors = dpu.get_input_tensors()
outputTensors = dpu.get_output_tensors()
shapeIn = tuple(inputTensors[0].dims)
shapeOut = tuple(outputTensors[0].dims)
input_data = [np.empty(shapeIn, dtype=np.float32, order="C")]
output_data = [np.empty(shapeOut, dtype=np.float32, order="C")]
# Load in input data, and run inference
x = get_input_data() # generic function to get input data
input_data[0] = x
job_id = dpu.execute_async(input_data, output_data)
dpu.wait(job_id)
y = output_data[0]
process_output(y) # generic output function to process output
這是可視化器輸出的示例,表明它能夠正確分類一些手勢(shì)。
該應(yīng)用程序以大約 3 FPS 的速度運(yùn)行,這足以與菜單 UI 進(jìn)行實(shí)時(shí)交互。這實(shí)際上是我最初的計(jì)劃,但我無(wú)法找到一個(gè)可使用 Vitis-AI 軟件量化的預(yù)訓(xùn)練模型(例如,我無(wú)法使用 OpenPose和 Vitis 玩得很好)。更具挑戰(zhàn)性,但這將允許更自然的手勢(shì),如上下滑動(dòng)、“點(diǎn)擊”輕敲動(dòng)作或轉(zhuǎn)動(dòng)想象中的音量旋鈕,以控制不同的功能。
結(jié)論
KV260 是一款出色的硬件,用于執(zhí)行計(jì)算機(jī)視覺(jué)任務(wù)的推理。開(kāi)始有點(diǎn)棘手,但希望這個(gè)項(xiàng)目能給你一些指導(dǎo)!我期待 Xilinx 即將對(duì) Vitis-AI 工作流程進(jìn)行改進(jìn),并希望未來(lái)能有更多以愛(ài)好者為中心的硬件。
故障排除
請(qǐng)查看GitHub 存儲(chǔ)庫(kù)中的故障排除部分。(這個(gè)頁(yè)面有點(diǎn)長(zhǎng))
- Kria KV260視覺(jué)AI入門套件用戶指南
- 適用于AWS IoT Greengrass的Xilinx KV260入門指南
- 創(chuàng)建自定義Kria KV260加速M(fèi)L應(yīng)用程序
- 使用KV260進(jìn)行事故檢測(cè)
- Vitis ai 1.4 KV260鏡像開(kāi)源
- 在KV260上運(yùn)行Yolov4 tiny
- Xilinx KV260 Vitis-AI 1.4人臉檢測(cè)
- 為Kria KV260添加USB WiFi
- Kria KV260 AI視覺(jué)套件入門
- Xilinx Kria KV260套件的第一個(gè)硬件項(xiàng)目
- Vivado 2021.1中的Kria KV260入門
- 使用Xilinx Kria KV260進(jìn)行AI火災(zāi)探測(cè)
- Kria KV260上的動(dòng)態(tài)交通燈系統(tǒng)
- 如何使用Linux操作系統(tǒng)進(jìn)行智能家居的設(shè)計(jì) 12次下載
- 智能家居服務(wù)是什么?為什么需要關(guān)注它?
- 石英晶振在智能家居設(shè)備中的應(yīng)用 147次閱讀
- 繼電器在智能家居中的應(yīng)用 587次閱讀
- Python智能家居系統(tǒng)代碼介紹 1013次閱讀
- 智能家居控制系統(tǒng)原理與應(yīng)用 2037次閱讀
- 如何在KV260上快速體驗(yàn)Vitsi AI圖像分類示例程序 1289次閱讀
- 如何保護(hù)智能家居電路 888次閱讀
- 一文帶你了解智能家居控制系統(tǒng) 2793次閱讀
- 亞馬遜推出基于Zigbee無(wú)線技術(shù)的語(yǔ)音服務(wù)設(shè)備 可服務(wù)千萬(wàn)計(jì)智能家居設(shè)備 5331次閱讀
- 智能控制系統(tǒng)有哪些(家居) 1.2w次閱讀
- 智能家居安全隱患有哪些_智能家居不為人知的恐怖一面_使用智能家居應(yīng)注意什么 4260次閱讀
- 智能家居控制系統(tǒng)詳解_智能家居控制系統(tǒng)工作原理_智能家居控制系統(tǒng)有哪些 4.4w次閱讀
- 科普丨智能家居控制系統(tǒng)是啥 2099次閱讀
- 詳解智能家居的控制系統(tǒng)工作原理 1.1w次閱讀
- 智能家居控制系統(tǒng)工作原理 4478次閱讀
- 基于Linux的智能家居管理方案 5327次閱讀
下載排行
本周
- 1Keysight B1500A 半導(dǎo)體器件分析儀用戶手冊(cè)、說(shuō)明書 (中文)
- 19.00 MB | 4次下載 | 免費(fèi)
- 2使用TL431設(shè)計(jì)電源
- 0.67 MB | 2次下載 | 免費(fèi)
- 3BT134雙向可控硅手冊(cè)
- 1.74 MB | 2次下載 | 1 積分
- 4一種新型高效率的服務(wù)器電源系統(tǒng)
- 0.85 MB | 1次下載 | 1 積分
- 5LabVIEW環(huán)形控件
- 0.01 MB | 1次下載 | 1 積分
- 6PR735,使用UCC28060的600W交錯(cuò)式PFC轉(zhuǎn)換器
- 540.03KB | 1次下載 | 免費(fèi)
- 751單片機(jī)核心板原理圖
- 0.12 MB | 1次下載 | 5 積分
- 8BP2879DB支持調(diào)光調(diào)滅的非隔離低 PF LED 驅(qū)動(dòng)器
- 1.44 MB | 1次下載 | 免費(fèi)
本月
- 1開(kāi)關(guān)電源設(shè)計(jì)原理手冊(cè)
- 1.83 MB | 54次下載 | 免費(fèi)
- 2FS5080E 5V升壓充電兩串鋰電池充電管理IC中文手冊(cè)
- 8.45 MB | 23次下載 | 免費(fèi)
- 3DMT0660數(shù)字萬(wàn)用表產(chǎn)品說(shuō)明書
- 0.70 MB | 13次下載 | 免費(fèi)
- 4UC3842/3/4/5電源管理芯片中文手冊(cè)
- 1.75 MB | 12次下載 | 免費(fèi)
- 5ST7789V2單芯片控制器/驅(qū)動(dòng)器英文手冊(cè)
- 3.07 MB | 11次下載 | 1 積分
- 6TPS54202H降壓轉(zhuǎn)換器評(píng)估模塊用戶指南
- 1.02MB | 8次下載 | 免費(fèi)
- 7STM32F101x8/STM32F101xB手冊(cè)
- 1.69 MB | 8次下載 | 1 積分
- 8基于MSP430FR6043的超聲波氣體流量計(jì)快速入門指南
- 2.26MB | 7次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935119次下載 | 10 積分
- 2開(kāi)源硬件-PMP21529.1-4 開(kāi)關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計(jì)
- 1.48MB | 420061次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233084次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191367次下載 | 10 積分
- 5十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
- 158M | 183335次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81581次下載 | 10 積分
- 7Keil工具M(jìn)DK-Arm免費(fèi)下載
- 0.02 MB | 73807次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65987次下載 | 10 積分
評(píng)論
查看更多