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

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

3天內(nèi)不再提示

采用PYNQ和Vitis AI的智能辦公解決方案

XILINX開發(fā)者社區(qū) ? 來源:XILINX開發(fā)者社區(qū) ? 作者: 賽靈思開發(fā)者 ? 2021-11-12 10:08 ? 次閱讀

本文投稿作者: zst123 (github.com/zst123)

信息通信電子愛好者, 熱衷于鉆研新技術(shù)。

使用 Ultra96-V2 進(jìn)行邊緣 AI 和圖像處理的分布式移動(dòng)辦公辦公室管理可擴(kuò)展解決方案。

項(xiàng)目簡介

在這個(gè)項(xiàng)目中,我將創(chuàng)建一款用于智能辦公室移動(dòng)辦公布局的應(yīng)用。

現(xiàn)代辦公室正在廣泛采用“移動(dòng)辦公”的概念。通過“先到先得”的方式能夠更有效地利用共享的空間和辦公桌。然而,其中面臨的問題在于,員工可能會(huì)浪費(fèi)更多時(shí)間來尋找空置的辦公桌。此外,跟蹤占用率并在預(yù)訂就系統(tǒng)中進(jìn)行更新的工作也很單調(diào)乏味。借助基于邊緣的圖像處理功能,我們能夠檢測區(qū)域內(nèi)的人員并確定辦公桌是否被占用。

在技術(shù)方面,我將使用 Ultra96-V2 演示 Vitis AI 模型庫和面向 PYNQ 的 DPU IP 核的編譯流程。我將從零開始進(jìn)行編譯,這樣將更方便在以后修改硬件設(shè)計(jì),我感覺獲取環(huán)境設(shè)置的過程有些混亂,所以我會(huì)為大家一步一步地進(jìn)行記錄。

PYNQ & Vitis AI 工作流程說明

在開始之前,有一點(diǎn)很重要,我們需要知道 Ultra96-V2 使用的是賽靈思 Zynq UltraScale+ MPSoC。我們可以把它稱為基于 ARMFPGA,這意味著它既包含處理系統(tǒng) (PS),也包含可編程邏輯 (PL)。

我將會(huì)使用 PYNQ,我們需要制作在 PS 上運(yùn)行的 Python 腳本。使用預(yù)編譯的 PYNQ 疊加(或比特流),我們可以在 PL 中配置深度學(xué)習(xí)處理器單元 (DPU)。在 PS 上運(yùn)行的軟件可以使用 DPU 來加速圖像識別任務(wù)。

使用的額外硬件

除了 Ultra96-V2 軟件包以外,您可能還需要以下這些額外的硬件。

1.USB 攝像頭

我使用的是 Logitech C170 USB 攝像頭。

通常,大多數(shù) Logitech 網(wǎng)絡(luò)攝像頭應(yīng)該開箱即用。其他帶有 Linux 驅(qū)動(dòng)程序的品牌也應(yīng)該能夠很好地工作。

2.有源 Mini-DisplayPort 適配器

我使用的是 PowerColour Active Mini Displayport to Single-Link DVI 適配器。

Ultra96-V2 只輸出純 DisplayPort 信號,因此需要配備有源適配器。

為了獲得更好的搜索結(jié)果,您可以嘗試搜索“兼容 ATI Eyefinity”的適配器。眾所周知,Eyefinity 適配器是有源的。

請注意:如果您有預(yù)算限制,可以不用這些。

例如,可以使用 IP 攝像頭作為替代, 有一些應(yīng)用可以將您的智能手機(jī)用作 IP 攝像頭。如果您使用 USB 或遠(yuǎn)程 SSH 進(jìn)行連接,則可能不需要 mini-DP 適配器。

準(zhǔn)備 PYNQ 鏡像

我們首先將 PYNQ 加載到電路板上,并做一些測試。您可以從從官方網(wǎng)站下載 Avnet Ultra96-V2 v2.5 PYNQ 鏡像。

http://www.pynq.io/board.html

您可以在社區(qū)版塊下面找到它。

根據(jù)這些說明將鏡像寫入 SD 卡中。

https://pynq.readthedocs.io/en/latest/appendix.html#writing-the-sd-card

插入您的 SD 卡,在 Ubuntu 上,您將能夠在磁盤 應(yīng)用中看到您安裝的主板。

在這種情況下,器件名稱是 /dev/sdb

c0fb525a-42bb-11ec-b939-dac502259ad0.png

卸載分區(qū):

$ umount /dev/sdb

在處理下一個(gè)命令的器件名稱時(shí)要非常小心,我們將要使用 PYNQ 鏡像覆蓋 SD 卡內(nèi)容。

您可以使用 dd 命令將 PYNQ 鏡像寫入 SD 卡中,我決定使用 dcfldd 來顯示進(jìn)度:

$ sudo dcfldd bs=4M if=ultra96v2_v2.5.img of=/dev/sdb

1536 blocks (6144Mb) written.

1574+1 records in

1574+1 records out

啟動(dòng) PYNQ

插入 SD 卡并按下電源按鈕,以啟動(dòng)電路板。

c14d82fa-42bb-11ec-b939-dac502259ad0.png

將 Micro USB 電纜從您的 PC 連接到 Ultra96-V2,您將在您的 PC 上看到一個(gè)新的以太網(wǎng)接口。

您現(xiàn)在可以通過此鏈接在瀏覽器中訪問 Jupyter Notebook http://192.168.2.1:9090

如果需要密碼,那就是“xilinx”

連接到 WiFi

我們需要將電路板連接到 Wifi,因?yàn)槲覀儗⑾螺d一些東西。如果您有 USB-to-Ethernet 適配器,您也可以使用它,并跳過這個(gè)部分。

帶有腳本的 Jupyter Notebook 可以幫助您連接到 Wifi。導(dǎo)航到

notebooks/common/wifi.ipynb,在這里您可以將腳本修改為您自己的 Wifi 憑證。

或者,如果您熟悉 Linux 系統(tǒng),您也可以發(fā)出以下命令:

# Scan Wifi

$ ifconfig wlan0 up

$ iwlist wlan0 scan

# Connect to WEP access point

$ iwconfig wlan0 essid “YOUR_SSID_NAME” key s:YOUR_PASSWORD

# Connect to WPA access point

$ wpa_passphrase YOUR_SSID_NAME YOUR_PASSWORD 》 /etc/wpa_supplicant.conf

$ sudo wpa_supplicant -c /etc/wpa_supplicant.conf -i wlan0 -B

在這里,我們可以從 Web 界面打開一個(gè)新的終端:

c220478a-42bb-11ec-b939-dac502259ad0.png

使用 Vitis AI 升級到最新的PYNQ

在后續(xù)步驟中,我們將在終端中發(fā)出一些命令,以便下載和安裝大量軟件包, 這估計(jì)需要 1 個(gè)小時(shí)的時(shí)間。

我建議安裝 USB 風(fēng)扇或任何散熱裝置,因?yàn)?Ultra96-V2 會(huì)變得非常得燙手。當(dāng)它很熱時(shí),處理器將開始減少熱量并減慢進(jìn)程。

從 Jupyter Notebooks 打開終端。

從 Github Repo 下載并編譯 Vitis AI PYNQ DPU。這個(gè)步驟是使用 Vitis-AI 來升級 PYNQ(可能需要大約一個(gè)小時(shí)才能完成):

$ git clone --recursive --shallow-submodules https://github.com/Xilinx/DPU-PYNQ.git

$ cd DPU-PYNQ/upgrade

$ make

安裝 pynq-dpu python 包:

pip3 install pynq-dpu

將 pynq-dpu notebooks 下載到您的主文件夾中

cd $PYNQ_JUPYTER_NOTEBOOKS

pynq get-notebooks pynq-dpu -p 。

測試 USB 網(wǎng)絡(luò)攝像頭功能

連接您的 USB 網(wǎng)絡(luò)攝像頭并測試功能:

這里我使用的是 Logitech C170,PYNQ 可以自動(dòng)檢測到它,您可以使用此命令進(jìn)行確認(rèn)。

$ lsusb

Bus 001 Device 004: ID 046d:082b Logitech, Inc. Webcam C170

在 Jupyter 中,通過。/notebooks/common/usb_webcam.ipynb 打開 notebook,您可以運(yùn)行它,以查看您的網(wǎng)絡(luò)攝像頭是否正常工作。

現(xiàn)在,我們已經(jīng)驗(yàn)證了該電路板功能齊全。我們可以從 Vitis AI 庫編譯 PYNQ DPU 鏡像和模型。

準(zhǔn)備編譯環(huán)境

我們需要安裝賽靈思 Vitis 和賽靈思運(yùn)行時(shí) (XRT) 2020.1 版本。對于 Vitis 和 XRT 2020.1,受支持的最新操作系統(tǒng)是 Ubuntu 18.04.2 LTS。

Ubuntu 20.04 不受支持,所以我無法成功安裝。因此,我在虛擬機(jī)中安裝了所有東西。

通過此鏈接下載賽靈思運(yùn)行時(shí) (XRT) 的 .deb 文件

https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/embedded-platforms.html

使用此命令來進(jìn)行安裝:

sudo apt install 。/xrt_202010.2.6.655_18.04-amd64-xrt.deb

接下來,下載賽靈思統(tǒng)一 Web 安裝程序,它將安裝 Vitis 2020.1。您需要注冊一個(gè)賽靈思帳戶。請遵循此網(wǎng)站上的說明

https://www.xilinx.com/html_docs/xilinx2020_1/vitis_doc/juk1557377661419.html

將 swappiness 設(shè)置為較低的值也很有幫助,因?yàn)闃?gòu)建過程中會(huì)使用大量的 RAM。它會(huì)告知操作系統(tǒng)在換出到硬盤之前可以使用更多的 RAM。

https://askubuntu.com/questions/103915/how-do-i-configure-swappiness

如需更改系統(tǒng) swappiness 值,通過 root 權(quán)限打開 /etc/sysctl.conf

sudo gedit /etc/sysctl.con

然后,通過添加此行來更改 swappiness。我選擇將該值設(shè)置為 1。這意味著在將 RAM 交換到硬盤之前,系統(tǒng)將使用高達(dá) 99% 的 RAM(剩余 1%)。

c3992154-42bb-11ec-b939-dac502259ad0.png

應(yīng)用更改。

sudo sysctl -p

c3c539d8-42bb-11ec-b939-dac502259ad0.png

現(xiàn)在我們準(zhǔn)備開始編譯……

為 Ultra96-V2 編譯 DPU-PYNQ

我們將仔細(xì)參考本指南:

https://github.com/Xilinx/DPU-PYNQ/blob/master/boards/README.md

首先,從賽靈思 DPU-PYNQ 庫中復(fù)制構(gòu)建文件

git clone --recursive --shallow-submodules https://github.com/Xilinx/DPU-PYNQ.git

cd DPU-PYNQ/boards

我們必須對構(gòu)建文件進(jìn)行一些更改,因?yàn)樗鼈冏畛跏窃?Vitis 2019.2 中設(shè)計(jì)的,但現(xiàn)在我們正在使用新版本進(jìn)行編譯。

在 boards 文件夾中,編輯 check_env.sh

搜索 2019.2,將其改為 2020.1

c442498c-42bb-11ec-b939-dac502259ad0.png

同樣轉(zhuǎn)至 /vitis-ai-git/DPU-TRD/dpu_ip/dpu_eu_v3_2_0,并編輯 component.xml

搜索 2019.2,將其改為 2020.1

c4f0dcfe-42bb-11ec-b939-dac502259ad0.png

最后,如果您想對 DPU IP 配置進(jìn)行任何更改,請轉(zhuǎn)至 boards/Ultra96/dpu_conf.vh。

在這個(gè)案例中,我將存儲(chǔ)器更改為 RAM_USAGE_HIGH。

c561595c-42bb-11ec-b939-dac502259ad0.png

我們準(zhǔn)備好開始編譯了:

打開一個(gè)終端,并獲取賽靈思工具

source /opt/Xilinx/Vitis/2020.1/settings64.sh

source /opt/xilinx/xrt/setup.sh

開始編譯(請注意: Ultra96 和 Ultra96-V2 可以使用相同的方法)

$ make BOARD=Ultra96

過了一段時(shí)間后,構(gòu)建再次失敗了,因?yàn)樗鼨z查到版本是 2019.2,而不是 2020.1。

查看 DPU-PYNQ/boards 目錄。這是因?yàn)橛幸粋€(gè)名為 PYNQ-derivative-overlays 的新文件夾。構(gòu)建腳本復(fù)制了另一個(gè)名為 PYNQ-derivative-overlays 的存儲(chǔ)庫。它負(fù)責(zé)將 DPU IP 置于 PYNQ 基礎(chǔ)疊加之上。

轉(zhuǎn)至 PYNQ-derivative-overlays/dpu/ 并編輯 dpu.tcl

同樣地,將 2019.2 更改為 2020.1

c5ff29ca-42bb-11ec-b939-dac502259ad0.png

然后繼續(xù)制作過程。

$ make BOARD=Ultra96

c63bf04e-42bb-11ec-b939-dac502259ad0.png

綜合過程所花的時(shí)間最長,可能需要一個(gè)小時(shí)

完成后,您將看到以下文件, 這些文件是面向 PYNQ 的比特流疊加。

我會(huì)將這些文件上傳到 Juypyter 實(shí)例中,放在一個(gè)名為 mymodel 的文件夾中。

在右上角,單擊“新建 》 文件夾”

然后在文件夾中,單擊“上傳”并選擇 3 個(gè)文件。

從 Vitis 模型庫編譯 YoloV3

請注意:模型是特定于您編譯的 DPU(即一種 DPU 配置的模型與另一種不兼容)。例如,這意味著如果您更改編譯時(shí)使用的內(nèi)核數(shù)量,您還必須重新編譯模型。

準(zhǔn)備 docker 文件

cd DPU-PYNQ/host

mkdir -p docker

cp -rf 。。/vitis-ai-git/docker_run.sh 。

cp -rf 。。/vitis-ai-git/docker/PROMPT.txt docker

chmod u+x docker_run.sh

安裝 docker

sudo apt install docker -y

sudo groupadd docker

newgrp docker

運(yùn)行 docker 實(shí)例

。/docker_run.sh xilinx/vitis-ai-cpu:latest

c742406a-42bb-11ec-b939-dac502259ad0.png

進(jìn)入實(shí)例后,您可以編譯模型

cp 。。/boards/Ultra96/dpu.hwh 。/

。/compile.sh Ultra96 tf_yolov3_voc_416_416_65.63G_1.1

c7a7a4c8-42bb-11ec-b939-dac502259ad0.png

完成后,您將在目錄中看到模型 dpu_tf_yolov3.elf

也將其上傳到您的 Jupyter 實(shí)例:

Notebook 示例

pynq_dpu/dpu_yolo_v3.ipynb 中有一個(gè)示例,它可以測試 YoloV3 模型

現(xiàn)在制作副本(文件 》 制作副本),并修改代碼以指向 mymodel 文件夾,其中包含我們自己編譯的比特流和模型

c85bde3e-42bb-11ec-b939-dac502259ad0.png

運(yùn)行所有單元(單元 》 運(yùn)行所有)

c8686b0e-42bb-11ec-b939-dac502259ad0.png

驗(yàn)證鏡像已經(jīng)分類成功

我們終于準(zhǔn)備好創(chuàng)建我們的應(yīng)用了!

應(yīng)用代碼

最后,在完成了所有的硬件設(shè)置和測試后,我編寫了軟件代碼來創(chuàng)建我自己的智能辦公室移動(dòng)辦公應(yīng)用。

它由 2 個(gè)并行運(yùn)行的 Jupyter Notebooks 組成。第一個(gè)負(fù)責(zé)設(shè)置 PYNQ 疊加和處理視頻饋送。第二個(gè)將利用數(shù)據(jù)顯示基于座位可用性的控制面板。

結(jié)論

我希望這篇文章對您來說已經(jīng)足夠全面詳細(xì)了。這是我第一次使用賽靈思硬件來了解邊緣上的 FPGA 和 AI。因此,在開始時(shí),最難的部分是使用開發(fā)工具和適應(yīng)環(huán)境,因此,我盡力詳細(xì)地展示了盡可能多的設(shè)置過程。感謝您閱讀完全文!

編輯:jq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1620

    文章

    21510

    瀏覽量

    598991
  • ARM
    ARM
    +關(guān)注

    關(guān)注

    134

    文章

    8967

    瀏覽量

    365059
  • AI
    AI
    +關(guān)注

    關(guān)注

    87

    文章

    28877

    瀏覽量

    266252
  • DPU
    DPU
    +關(guān)注

    關(guān)注

    0

    文章

    343

    瀏覽量

    24044
  • PYNQ
    +關(guān)注

    關(guān)注

    3

    文章

    61

    瀏覽量

    2867

原文標(biāo)題:月度項(xiàng)目 | 采用 PYNQ 和 Vitis AI 的智能辦公解決方案

文章出處:【微信號:gh_2d1c7e2d540e,微信公眾號:XILINX開發(fā)者社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    使用PYNQ訓(xùn)練和實(shí)現(xiàn)BNN

    使用 PYNQ 可以輕松在 FPGA 上實(shí)現(xiàn)加速 AI/ML,而無需編寫一行 HDL!讓我們看看如何做到這一點(diǎn)。
    的頭像 發(fā)表于 08-05 17:15 ?251次閱讀
    使用<b class='flag-5'>PYNQ</b>訓(xùn)練和實(shí)現(xiàn)BNN

    廣和通發(fā)布多款基于高通智能模組的系列Linux邊緣AI解決方案

    2024德國嵌入式展期間,廣和通發(fā)布基于SC126、SC138、SC171L、SC171等多款智能模組的系列Linux邊緣AI解決方案,這些解決方案分別
    的頭像 發(fā)表于 04-11 14:45 ?375次閱讀

    Vitis2023.2使用之—— classic Vitis IDE

    Vitis 已經(jīng)更新到2023.2了,新版本相較于舊版本更新了嵌入式平臺,新版平臺增加了Versal? AI 引擎 DSP 設(shè)計(jì)的增強(qiáng)功能,全新的獨(dú)立 Vitis 嵌入式軟件,最新 Vitis
    發(fā)表于 03-24 16:15

    天地在線發(fā)布AI智能辦公產(chǎn)品AIbase

    近日,天地在線宣布推出全新的AI智能辦公產(chǎn)品——“AIbase”。這款產(chǎn)品專為中小微企業(yè)設(shè)計(jì),旨在通過先進(jìn)的人工智能技術(shù),為企業(yè)提供更加高效、便捷的
    的頭像 發(fā)表于 02-06 16:32 ?4602次閱讀

    Vitis AI用戶指南

    電子發(fā)燒友網(wǎng)站提供《Vitis AI用戶指南.pdf》資料免費(fèi)下載
    發(fā)表于 01-03 10:51 ?1次下載
    <b class='flag-5'>Vitis</b> <b class='flag-5'>AI</b>用戶指南

    Vitis AI Library體驗(yàn)之OCR識別

    Vitis AI Library是一組高層次庫和 API,專為利用 DPU 高效執(zhí)行 AI 推斷而構(gòu)建。它是基于 Vitis AI運(yùn)行時(shí)利用
    的頭像 發(fā)表于 10-17 08:23 ?914次閱讀
    <b class='flag-5'>Vitis</b> <b class='flag-5'>AI</b> Library體驗(yàn)之OCR識別

    【KV260視覺入門套件試用體驗(yàn)】Vitis AI Library體驗(yàn)之OCR識別

    速度、用戶界面的友好性,產(chǎn)品的穩(wěn)定性,易用性及可行性等。 一、Vitis AI Library Vitis AI Library是一組高層次庫和 API,專為利用 DPU 高效執(zhí)行
    發(fā)表于 10-16 23:25

    Vitis AI校準(zhǔn)和量化代碼

    Vitis AI 校準(zhǔn)和量化代碼導(dǎo)入必要的模塊執(zhí)行校準(zhǔn)過程評估量化模型準(zhǔn)確度導(dǎo)出量化模型?
    發(fā)表于 10-15 17:14 ?2次下載

    【KV260視覺入門套件試用體驗(yàn)】Vitis AI 構(gòu)建開發(fā)環(huán)境,并使用inspector檢查模型

    、低成本的 AI 解決方案Vitis AI 可以做什么? Vitis AI 可以做很多事情,
    發(fā)表于 10-14 15:34

    【KV260視覺入門套件試用體驗(yàn)】Vitis-AI加速的YOLOX視頻目標(biāo)檢測示例體驗(yàn)和原理解析

    示例體驗(yàn) 參考此前的帖子:【KV260視覺入門套件試用體驗(yàn)】部署DPU鏡像并運(yùn)行Vitis AI圖像分類示例程序 - 智能硬件論壇 - 電子技術(shù)論壇 - 廣受歡迎的專業(yè)電子論
    發(fā)表于 10-06 23:32

    基于Vitis AI的ADAS目標(biāo)識別

    Vitis? AI開發(fā)環(huán)境可在賽靈思硬件平臺上加速 AI 推斷,包括邊緣器件和 Alveo? 加速器卡。此環(huán)境由經(jīng)過最優(yōu)化的 IP 核、工具、庫、模型和設(shè)計(jì)示例組成。其設(shè)計(jì)以高效和易用為核心,旨在
    的頭像 發(fā)表于 09-28 00:05 ?3117次閱讀
    基于<b class='flag-5'>Vitis</b> <b class='flag-5'>AI</b>的ADAS目標(biāo)識別

    【KV260視覺入門套件試用體驗(yàn)】基于Vitis AI的ADAS目標(biāo)識別

    一、基礎(chǔ)知識 (一)Vitis? AI開發(fā)環(huán)境 Vitis? AI開發(fā)環(huán)境可在賽靈思硬件平臺上加速 AI 推斷,包括邊緣器件和 Alveo?
    發(fā)表于 09-27 23:21

    【KV260視覺入門套件試用體驗(yàn)】八、VITis AI自動(dòng)駕駛多任務(wù)執(zhí)行MultiTask V3

    ]; return vitis::ai::main_for_jpeg_demo( argc, argv, [model] { return vitis::ai::MultiTask8U
    發(fā)表于 09-26 16:43

    【KV260視覺入門套件試用體驗(yàn)】六、VITis AI車牌檢測&amp;車牌識別

    model = argv[1]; return vitis::ai::main_for_jpeg_demo( argc, argv, [model] { return vitis::ai
    發(fā)表于 09-26 16:28

    【KV260視覺入門套件試用體驗(yàn)】五、VITis AI (人臉檢測和人體檢測)

    一、DPU 鏡像環(huán)境配置 官方鏡像已經(jīng)安裝好了可以在安裝相關(guān)配置,示例來源Vitis AI Library用戶指南3.0版本,首先需要安裝DPU鏡像。 1.1、克隆Vitis AI倉庫
    發(fā)表于 09-26 16:22