本文投稿作者: zst123 (github.com/zst123)
信息通信和電子愛(ài)好者, 熱衷于鉆研新技術(shù)。
使用 Ultra96-V2 進(jìn)行邊緣 AI 和圖像處理的分布式移動(dòng)辦公辦公室管理可擴(kuò)展解決方案。
項(xiàng)目簡(jiǎn)介
在這個(gè)項(xiàng)目中,我將創(chuàng)建一款用于智能辦公室移動(dòng)辦公布局的應(yīng)用。
現(xiàn)代辦公室正在廣泛采用“移動(dòng)辦公”的概念。通過(guò)“先到先得”的方式能夠更有效地利用共享的空間和辦公桌。然而,其中面臨的問(wèn)題在于,員工可能會(huì)浪費(fèi)更多時(shí)間來(lái)尋找空置的辦公桌。此外,跟蹤占用率并在預(yù)訂就系統(tǒng)中進(jìn)行更新的工作也很單調(diào)乏味。借助基于邊緣的圖像處理功能,我們能夠檢測(cè)區(qū)域內(nèi)的人員并確定辦公桌是否被占用。
在技術(shù)方面,我將使用 Ultra96-V2 演示 Vitis AI 模型庫(kù)和面向 PYNQ 的 DPU IP 核的編譯流程。我將從零開(kāi)始進(jìn)行編譯,這樣將更方便在以后修改硬件設(shè)計(jì),我感覺(jué)獲取環(huán)境設(shè)置的過(guò)程有些混亂,所以我會(huì)為大家一步一步地進(jìn)行記錄。
PYNQ & Vitis AI 工作流程說(shuō)明
在開(kāi)始之前,有一點(diǎn)很重要,我們需要知道 Ultra96-V2 使用的是賽靈思 Zynq UltraScale+ MPSoC。我們可以把它稱為基于 ARM 的 FPGA,這意味著它既包含處理系統(tǒng) (PS),也包含可編程邏輯 (PL)。
我將會(huì)使用 PYNQ,我們需要制作在 PS 上運(yùn)行的 Python 腳本。使用預(yù)編譯的 PYNQ 疊加(或比特流),我們可以在 PL 中配置深度學(xué)習(xí)處理器單元 (DPU)。在 PS 上運(yùn)行的軟件可以使用 DPU 來(lái)加速圖像識(shí)別任務(wù)。
使用的額外硬件
除了 Ultra96-V2 軟件包以外,您可能還需要以下這些額外的硬件。
1.USB 攝像頭
我使用的是 Logitech C170 USB 攝像頭。
通常,大多數(shù) Logitech 網(wǎng)絡(luò)攝像頭應(yīng)該開(kāi)箱即用。其他帶有 Linux 驅(qū)動(dòng)程序的品牌也應(yīng)該能夠很好地工作。
2.有源 Mini-DisplayPort 適配器
我使用的是 PowerColour Active Mini Displayport to Single-Link DVI 適配器。
Ultra96-V2 只輸出純 DisplayPort 信號(hào),因此需要配備有源適配器。
為了獲得更好的搜索結(jié)果,您可以嘗試搜索“兼容 ATI Eyefinity”的適配器。眾所周知,Eyefinity 適配器是有源的。
請(qǐng)注意:如果您有預(yù)算限制,可以不用這些。
例如,可以使用 IP 攝像頭作為替代, 有一些應(yīng)用可以將您的智能手機(jī)用作 IP 攝像頭。如果您使用 USB 或遠(yuǎn)程 SSH 進(jìn)行連接,則可能不需要 mini-DP 適配器。
準(zhǔn)備 PYNQ 鏡像
我們首先將 PYNQ 加載到電路板上,并做一些測(cè)試。您可以從從官方網(wǎng)站下載 Avnet Ultra96-V2 v2.5 PYNQ 鏡像。
http://www.pynq.io/board.html
您可以在社區(qū)版塊下面找到它。
根據(jù)這些說(shuō)明將鏡像寫(xiě)入 SD 卡中。
https://pynq.readthedocs.io/en/latest/appendix.html#writing-the-sd-card
插入您的 SD 卡,在 Ubuntu 上,您將能夠在磁盤(pán) 應(yīng)用中看到您安裝的主板。
在這種情況下,器件名稱是 /dev/sdb
卸載分區(qū):
$ umount /dev/sdb
在處理下一個(gè)命令的器件名稱時(shí)要非常小心,我們將要使用 PYNQ 鏡像覆蓋 SD 卡內(nèi)容。
您可以使用 dd 命令將 PYNQ 鏡像寫(xiě)入 SD 卡中,我決定使用 dcfldd 來(lái)顯示進(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)電路板。
將 Micro USB 電纜從您的 PC 連接到 Ultra96-V2,您將在您的 PC 上看到一個(gè)新的以太網(wǎng)接口。
您現(xiàn)在可以通過(guò)此鏈接在瀏覽器中訪問(wèn) Jupyter Notebook http://192.168.2.1:9090
如果需要密碼,那就是“xilinx”
連接到 WiFi
我們需要將電路板連接到 Wifi,因?yàn)槲覀儗⑾螺d一些東西。如果您有 USB-to-Ethernet 適配器,您也可以使用它,并跳過(guò)這個(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 界面打開(kāi)一個(gè)新的終端:
使用 Vitis AI 升級(jí)到最新的PYNQ
在后續(xù)步驟中,我們將在終端中發(fā)出一些命令,以便下載和安裝大量軟件包, 這估計(jì)需要 1 個(gè)小時(shí)的時(shí)間。
我建議安裝 USB 風(fēng)扇或任何散熱裝置,因?yàn)?Ultra96-V2 會(huì)變得非常得燙手。當(dāng)它很熱時(shí),處理器將開(kāi)始減少熱量并減慢進(jìn)程。
從 Jupyter Notebooks 打開(kāi)終端。
從 Github Repo 下載并編譯 Vitis AI PYNQ DPU。這個(gè)步驟是使用 Vitis-AI 來(lái)升級(jí) 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 。
測(cè)試 USB 網(wǎng)絡(luò)攝像頭功能
連接您的 USB 網(wǎng)絡(luò)攝像頭并測(cè)試功能:
這里我使用的是 Logitech C170,PYNQ 可以自動(dòng)檢測(cè)到它,您可以使用此命令進(jìn)行確認(rèn)。
$ lsusb
Bus 001 Device 004: ID 046d:082b Logitech, Inc. Webcam C170
在 Jupyter 中,通過(guò)。/notebooks/common/usb_webcam.ipynb 打開(kāi) notebook,您可以運(yùn)行它,以查看您的網(wǎng)絡(luò)攝像頭是否正常工作。
現(xiàn)在,我們已經(jīng)驗(yàn)證了該電路板功能齊全。我們可以從 Vitis AI 庫(kù)編譯 PYNQ DPU 鏡像和模型。
準(zhǔn)備編譯環(huán)境
我們需要安裝賽靈思 Vitis 和賽靈思運(yùn)行時(shí) (XRT) 2020.1 版本。對(duì)于 Vitis 和 XRT 2020.1,受支持的最新操作系統(tǒng)是 Ubuntu 18.04.2 LTS。
Ubuntu 20.04 不受支持,所以我無(wú)法成功安裝。因此,我在虛擬機(jī)中安裝了所有東西。
通過(guò)此鏈接下載賽靈思運(yùn)行時(shí) (XRT) 的 .deb 文件
https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/embedded-platforms.html
使用此命令來(lái)進(jìn)行安裝:
sudo apt install 。/xrt_202010.2.6.655_18.04-amd64-xrt.deb
接下來(lái),下載賽靈思統(tǒng)一 Web 安裝程序,它將安裝 Vitis 2020.1。您需要注冊(cè)一個(gè)賽靈思帳戶。請(qǐng)遵循此網(wǎng)站上的說(shuō)明
https://www.xilinx.com/html_docs/xilinx2020_1/vitis_doc/juk1557377661419.html
將 swappiness 設(shè)置為較低的值也很有幫助,因?yàn)闃?gòu)建過(guò)程中會(huì)使用大量的 RAM。它會(huì)告知操作系統(tǒng)在換出到硬盤(pán)之前可以使用更多的 RAM。
https://askubuntu.com/questions/103915/how-do-i-configure-swappiness
如需更改系統(tǒng) swappiness 值,通過(guò) root 權(quán)限打開(kāi) /etc/sysctl.conf
sudo gedit /etc/sysctl.con
然后,通過(guò)添加此行來(lái)更改 swappiness。我選擇將該值設(shè)置為 1。這意味著在將 RAM 交換到硬盤(pán)之前,系統(tǒng)將使用高達(dá) 99% 的 RAM(剩余 1%)。
應(yīng)用更改。
sudo sysctl -p
現(xiàn)在我們準(zhǔn)備開(kāi)始編譯……
為 Ultra96-V2 編譯 DPU-PYNQ
我們將仔細(xì)參考本指南:
https://github.com/Xilinx/DPU-PYNQ/blob/master/boards/README.md
首先,從賽靈思 DPU-PYNQ 庫(kù)中復(fù)制構(gòu)建文件
git clone --recursive --shallow-submodules https://github.com/Xilinx/DPU-PYNQ.git
cd DPU-PYNQ/boards
我們必須對(duì)構(gòu)建文件進(jìn)行一些更改,因?yàn)樗鼈冏畛跏窃?Vitis 2019.2 中設(shè)計(jì)的,但現(xiàn)在我們正在使用新版本進(jìn)行編譯。
在 boards 文件夾中,編輯 check_env.sh
搜索 2019.2,將其改為 2020.1
同樣轉(zhuǎn)至 /vitis-ai-git/DPU-TRD/dpu_ip/dpu_eu_v3_2_0,并編輯 component.xml
搜索 2019.2,將其改為 2020.1
最后,如果您想對(duì) DPU IP 配置進(jìn)行任何更改,請(qǐng)轉(zhuǎn)至 boards/Ultra96/dpu_conf.vh。
在這個(gè)案例中,我將存儲(chǔ)器更改為 RAM_USAGE_HIGH。
我們準(zhǔn)備好開(kāi)始編譯了:
打開(kāi)一個(gè)終端,并獲取賽靈思工具
source /opt/Xilinx/Vitis/2020.1/settings64.sh
source /opt/xilinx/xrt/setup.sh
開(kāi)始編譯(請(qǐng)注意: Ultra96 和 Ultra96-V2 可以使用相同的方法)
$ make BOARD=Ultra96
過(guò)了一段時(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ǔ)庫(kù)。它負(fù)責(zé)將 DPU IP 置于 PYNQ 基礎(chǔ)疊加之上。
轉(zhuǎn)至 PYNQ-derivative-overlays/dpu/ 并編輯 dpu.tcl
同樣地,將 2019.2 更改為 2020.1
然后繼續(xù)制作過(guò)程。
$ make BOARD=Ultra96
綜合過(guò)程所花的時(shí)間最長(zhǎng),可能需要一個(gè)小時(shí)
完成后,您將看到以下文件, 這些文件是面向 PYNQ 的比特流疊加。
我會(huì)將這些文件上傳到 Juypyter 實(shí)例中,放在一個(gè)名為 mymodel 的文件夾中。
在右上角,單擊“新建 》 文件夾”
然后在文件夾中,單擊“上傳”并選擇 3 個(gè)文件。
從 Vitis 模型庫(kù)編譯 YoloV3
請(qǐng)注意:模型是特定于您編譯的 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
進(jìn)入實(shí)例后,您可以編譯模型
cp 。。/boards/Ultra96/dpu.hwh 。/
。/compile.sh Ultra96 tf_yolov3_voc_416_416_65.63G_1.1
完成后,您將在目錄中看到模型 dpu_tf_yolov3.elf
也將其上傳到您的 Jupyter 實(shí)例:
Notebook 示例
pynq_dpu/dpu_yolo_v3.ipynb 中有一個(gè)示例,它可以測(cè)試 YoloV3 模型
現(xiàn)在制作副本(文件 》 制作副本),并修改代碼以指向 mymodel 文件夾,其中包含我們自己編譯的比特流和模型
運(yùn)行所有單元(單元 》 運(yùn)行所有)
驗(yàn)證鏡像已經(jīng)分類成功
我們終于準(zhǔn)備好創(chuàng)建我們的應(yīng)用了!
應(yīng)用代碼
最后,在完成了所有的硬件設(shè)置和測(cè)試后,我編寫(xiě)了軟件代碼來(lái)創(chuàng)建我自己的智能辦公室移動(dòng)辦公應(yīng)用。
它由 2 個(gè)并行運(yùn)行的 Jupyter Notebooks 組成。第一個(gè)負(fù)責(zé)設(shè)置 PYNQ 疊加和處理視頻饋送。第二個(gè)將利用數(shù)據(jù)顯示基于座位可用性的控制面板。
結(jié)論
我希望這篇文章對(duì)您來(lái)說(shuō)已經(jīng)足夠全面詳細(xì)了。這是我第一次使用賽靈思硬件來(lái)了解邊緣上的 FPGA 和 AI。因此,在開(kāi)始時(shí),最難的部分是使用開(kāi)發(fā)工具和適應(yīng)環(huán)境,因此,我盡力詳細(xì)地展示了盡可能多的設(shè)置過(guò)程。感謝您閱讀完全文!
編輯:jq
-
FPGA
+關(guān)注
關(guān)注
1629文章
21753瀏覽量
604175 -
ARM
+關(guān)注
關(guān)注
134文章
9107瀏覽量
367944 -
AI
+關(guān)注
關(guān)注
87文章
31054瀏覽量
269406 -
DPU
+關(guān)注
關(guān)注
0文章
365瀏覽量
24211 -
PYNQ
+關(guān)注
關(guān)注
4文章
62瀏覽量
2919
原文標(biāo)題:月度項(xiàng)目 | 采用 PYNQ 和 Vitis AI 的智能辦公解決方案
文章出處:【微信號(hào):gh_2d1c7e2d540e,微信公眾號(hào):XILINX開(kāi)發(fā)者社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論