工控網(wǎng)首頁(yè)
>

應(yīng)用設(shè)計(jì)

>

上手測(cè)試 Hailo:在 Toradex 模塊上加速邊緣 AI

上手測(cè)試 Hailo:在 Toradex 模塊上加速邊緣 AI

邊緣計(jì)算機(jī)視覺(jué)

為何選擇邊緣計(jì)算?

嵌入式設(shè)備日益智能化,許多機(jī)器學(xué)習(xí)和計(jì)算機(jī)視覺(jué)任務(wù)正被推向邊緣設(shè)備。在此類(lèi)設(shè)備上運(yùn)行 AI 模型雖具挑戰(zhàn)性,卻帶來(lái)諸多優(yōu)勢(shì):

  1. 降低延遲: 在設(shè)備端處理數(shù)據(jù),避免了向云端或中央處理器傳輸數(shù)據(jù)的等待時(shí)間

  2. 增強(qiáng)隱私保護(hù):敏感數(shù)據(jù)保留在設(shè)備內(nèi),確保符合嚴(yán)格的隱私法規(guī)要求。

  3. 節(jié)省帶寬成本:邊緣處理減少了對(duì)集中式服務(wù)器發(fā)送大量數(shù)據(jù)的需求。

  4. 提升可靠性:系統(tǒng)可在無(wú)網(wǎng)絡(luò)連接的情況下獨(dú)立運(yùn)作。

為何需要外部 AI 加速器?

Toradex 提供多種計(jì)算機(jī)模塊(SoM),其中一些集成了神經(jīng)網(wǎng)絡(luò)處理單元(NPU),能夠應(yīng)對(duì)不同的 AI 工作負(fù)載。例如,Verdin iMX8M Plus, Verdin iMX95和 Aquila AM69 均配備了專(zhuān)為邊緣推理加速設(shè)計(jì)的 NPU,使其適用于眾多計(jì)算機(jī)視覺(jué)和機(jī)器學(xué)習(xí)應(yīng)用。

盡管這些模塊提供了強(qiáng)大的 AI 解決方案,但諸如 Hailo-8、EdgeX、MemryX 及 Google Coral 等外部 AI 加速器通過(guò)提供模塊化、解耦且可擴(kuò)展的邊緣 AI 推理方案來(lái)應(yīng)對(duì)挑戰(zhàn)。這帶來(lái)了更高的靈活性和面向未來(lái)的 AI 能力。

1. 將 AI 處理與 SoC 供應(yīng)商軟件解耦 在邊緣運(yùn)行機(jī)器學(xué)習(xí)面臨的一大挑戰(zhàn)是將模型適配到特定硬件或運(yùn)行庫(kù)上。無(wú)論是 NXP 的 eiQ 平臺(tái)、TI 的 Edge AI Studio 還是 ONNX 導(dǎo)出工具,每種都有其專(zhuān)屬的 AI 工具包和優(yōu)化策略。外部 AI 加速器將 AI 工作負(fù)載從其他硬件中分離出來(lái),提供了一個(gè)統(tǒng)一的跨多硬件平臺(tái)的運(yùn)行環(huán)境。

示例: 一個(gè)基于 x86 設(shè)備并使用 Hailo-8 AI 加速器開(kāi)發(fā)的計(jì)算機(jī)視覺(jué)解決方案,可以無(wú)縫遷移至搭載 Hailo-8 的 Aquila AM69 模塊上而無(wú)需重構(gòu)整個(gè) AI 堆棧。這種解耦確保了僅需最小調(diào)整即可完成遷移,大大縮短了產(chǎn)品上市時(shí)間。

2. 模塊化與可擴(kuò)展性 AI 應(yīng)用具有動(dòng)態(tài)特性,隨著工作負(fù)載復(fù)雜度的增加或新功能的創(chuàng)建,性能需求可能會(huì)發(fā)生變化。雖然內(nèi)置的 NPU 能提供堅(jiān)實(shí)的解決方案,但有時(shí)它們可能難以適應(yīng)新的場(chǎng)景。

Hailo簡(jiǎn)介

Hailo是一家 AI 處理器制造商,其產(chǎn)品旨在邊緣端上運(yùn)行先進(jìn)的機(jī)器學(xué)習(xí)應(yīng)用,能夠廣泛應(yīng)用于智慧城市、汽車(chē)、制造、農(nóng)業(yè)、零售等多個(gè)行業(yè)和領(lǐng)域。

我們使用 Hailo-8 M.2 模塊在多款 Toradex 模塊上進(jìn)行了測(cè)試。Hailo-8 M.2 模塊是一款具備 26 TOPS 算力及 PCIe Gen-3.0 4通道 M-key 接口的 AI 加速器模塊。該 M.2 模塊可插入多種 Toradex 載板中,實(shí)現(xiàn)實(shí)時(shí)的深度神經(jīng)網(wǎng)絡(luò)推理。

如何 Hailo 充分利用 Toradex 生態(tài)系統(tǒng)?

釋放預(yù)處理和后處理任務(wù)

Hailo Pre-Post Processing Steps

來(lái)源: https://hailo.ai/blog/customer-case-study-developing-a-high-performance-application-on-an-embedded-edge-ai-device/

典型的計(jì)算機(jī)視覺(jué)流程遵循線(xiàn)性模式。從攝像頭捕捉源開(kāi)始,直到應(yīng)用程序采取行動(dòng),圖像必須經(jīng)過(guò)每一個(gè)處理步驟。這意味著如果任何一個(gè)步驟比下一個(gè)耗時(shí)更長(zhǎng),那就是瓶頸所在。

通常,在比較機(jī)器學(xué)習(xí)模型或硬件時(shí),我們會(huì)非常關(guān)注推理速度,但這只是問(wèn)題的一部分。

完整的軟件堆棧

Hailo 是一個(gè)完整的人工智能解決方案,支持常見(jiàn)機(jī)器學(xué)習(xí)工作流中的大部分步驟。

  1. 性能評(píng)估

    1. TAPPAS 是一個(gè)包含應(yīng)用示例的代碼庫(kù)。

    2. Model Zoo 不僅提供了一些模型的基準(zhǔn)測(cè)試結(jié)果,還包括預(yù)訓(xùn)練模型。

  2. 模型訓(xùn)練

    1. 部分預(yù)訓(xùn)練模型附帶了再訓(xùn)練環(huán)境。

  3. 編譯器和運(yùn)行庫(kù)

    1. Hailo Dataflow 編譯器

    2. pyHailoRT 和 GStreamer 插件

從 Toradex 方面來(lái)看,這一工作流程可以通過(guò)使用 Torizon 云平臺(tái)得到補(bǔ)充。

  1. 監(jiān)控性能

    1. 提前識(shí)別任何問(wèn)題,確保系統(tǒng)可靠性。

  2. OTA 更新

    1. 輕松更新量產(chǎn)設(shè)備。

支持 Toradex 模塊硬件

硬件

支持的硬件配置

系列模塊載板Hailo
AquilaTI AM69 (1+2 x PCIe 3.0)Clover (M.2 key B+M)Hailo-8 Hailo-8L
AquilaNXP i.MX 95 (1 x PCIe 3.0)Clover (M.2 key B+M)Hailo-8 Hailo-8L
VerdinNXP i.MX 95 (1 x PCIe 3.0)Mallow (M.2 key B)Hailo-8 Hailo-8L
VerdinNXP i.MX 8M Plus (1 x PCIe 3.0)Mallow (M.2 key B)Hailo-8 Hailo-8L
VerdinNXP i.MX 8M Mini (1 x PCIe 2.0)Mallow (M.2 key B)Hailo-8 Hailo-8L
ApalisNXP i.MX8 (2 x PCIe 3.0)Ixora (Mini PCIe)Hailo-8R mPCIe

軟件

OS版本其他的資源
Torizon OSBSP 7meta-hailo layer (即將上線(xiàn))
Torizon OSBSP 6runtime container (即將上線(xiàn))
Torizon OS MinimalBSP 6meta-hailo kirkstone OpenEmbedded layer for GStreamer 1.0
tdx-reference-multimediaBSP 6meta-hailo kirkstone

YOLOv5 示例

在本例中,我們將運(yùn)行來(lái)自 Tappas 的演示應(yīng)用程序: 完成此示例后,您應(yīng)得到類(lèi)似以下的輸出。以 60+ FPS 的速度運(yùn)行(取決于您的攝像頭)。

Hailo Pre-Post Processing Steps

我們將使用:

  • 攝像頭

    • 如果使用 USB 攝像頭,由于攝像頭的捕捉速度,幀率可能會(huì)非常低。

  • 顯示器

  • Verdin i.MX8MP + Mallow Carrier 載板

    • Verdin iMX8M Plus QuadLite 1GB IT (0065) 不兼容 Framos 攝像頭。

  • Hailo AI Accelerator

步驟:

  1. 從源碼構(gòu)建 Torizon OS

    1. 構(gòu)建基礎(chǔ) Torizon OS

    2. 添加依賴(lài)項(xiàng)

  2. 硬件設(shè)置

    1. 連接Hailo設(shè)備

    2. 連接攝像頭

    3. 安裝新鏡像

  3. 檢查所有配置

  4. 運(yùn)行示例

從源代碼構(gòu)建 Torizon OS

完整指南

首先,您可能需要檢查計(jì)算機(jī)的 RAM 和磁盤(pán)空間

  • 用于 Yocto 項(xiàng)目構(gòu)建的計(jì)算機(jī)

構(gòu)建 Torizon OS 基礎(chǔ)鏡像 我們將使用 CROPS 容器來(lái)構(gòu)建以下鏡像:

Torizon OS DistoMachineTorizon OS Image Target版本
torizonverdin-imx8mptorizon-minimal6.8.0

創(chuàng)建工作目錄

cd ~
mkdir ~/yocto-workdir

運(yùn)行容器(這將構(gòu)建基礎(chǔ)鏡像)

這將占用大量?jī)?nèi)存,并需要幾個(gè)小時(shí)才能完成。

命令的第二行將主機(jī)卷映射到容器的 workdir 目錄。請(qǐng)注意,此文件夾 ~/yocto-workdir 是在上一步中創(chuàng)建的。

docker run --rm -it --name=crops \
  -v ~/yocto-workdir:/workdir \
  --workdir=/workdir \
  -e MACHINE="verdin-imx8mp" \
  -e IMAGE="torizon-minimal" \
  -e DISTRO="torizon" \
  -e BRANCH="refs/tags/6.8.0" \
  -e MANIFEST="torizoncore/default.xml" \
  -e ACCEPT_FSL_EULA="1" \
  -e BB_NUMBER_THREADS="2" \
  -e PARALLEL_MAKE="-j 2" \ # not sure if I can pass those like this
  torizon/crops:kirkstone-6.x.y startup-tdx.sh

將依賴(lài)項(xiàng)添加到鏡像

要添加依賴(lài)項(xiàng),首先進(jìn)入 ~/yocto-workdir/layers 文件夾。

cd ./layers

我們將添加下面 layers:

  • meta-hailo

  • meta-gstreamer1.0

  • meta-toradex-framos

更多關(guān)于 meta layers 的內(nèi)容,請(qǐng)參考 完整的文檔。

在 torizon/crops:kirkstone-6.x.y 容器中, 運(yùn)行 bitbake add layers 命令。

bitbake-layers add-layer meta-hailo/meta-hailo-accelerator
bitbake-layers add-layer meta-hailo/meta-hailo-libhailort
bitbake-layers add-layer meta-hailo/meta-hailo-tappas
bitbake-layers add-layer meta-hailo/meta-hailo-vpu
bitbake-layers add-layer meta-toradex-framos
bitbake-layers add-layer meta-gstreamer1.0

在 build-torizon/conf/local.conf 文件中添加 packages。在末尾添加下面內(nèi)容。

IMAGE_INSTALL:append = " libhailort hailortcli pyhailort libgsthailo hailo-pci hailo-firmware"
IMAGE_INSTALL:append = " gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad"
IMAGE_INSTALL:append = " v4l-utils"

使用新的 layers 編譯鏡像。

bitbake torizon-minimal

你可以在下面位置找到兼容 Toradex Easy Installer 的安裝鏡像  ~/yocto-workdir/build-torizon/deploy/images/verdin-imx8mp/torizon-minimal-verdin-imx8mp-Tezi_6.8.0-devel-+build.0.tar.

硬件設(shè)置

連接Hailo設(shè)備

將 Hailo 設(shè)備插入 Mallow 載板的 M.2 插槽中。

Hailo Device Connect to Mallow Carrier Board

連接攝像頭

將攝像頭連接到 Mallow 載板的 MIPI-CSI 接口上。

MIPI-CSI connector of the Mallow Carrier Board

安裝新的 Torizon OS 鏡像

使用 Toradex Easy Installer (Tezi)  將新鏡像刷入設(shè)備。

  1. 下載Tezi

  2. 將設(shè)備置于恢復(fù)模式

  3. 安裝新編譯的鏡像

Toradex Easy Installer - Torizon Installation

檢查安裝情況

Hailo 設(shè)備

sudo su
hailocli scan
hailocli device-info

這些命令的輸出應(yīng)能檢測(cè)到設(shè)備已正確連接且驅(qū)動(dòng)程序正常工作。

顯示屏

gst-launch-1.0 videotestsrc ! videoconvert ! autovideosink

您應(yīng)該在屏幕上看到一些彩色圖案。

Camera 設(shè)備

此步驟可能因使用的相機(jī)而異。

v4l2-ctl -d2 -D
v4l2-ctl --list-formats-ext -d /dev/video2

對(duì)于 Framos 相機(jī),輸出如下。

root@verdin-imx8mp-15445736:~# v4l2-ctl --list-formats-ext -d /dev/video2
ioctl: VIDIOC_ENUM_FMT
	Type: Video Capture

	[0]: 'YUYV' (YUYV 4:2:2)
		Size: Stepwise 176x144 - 4096x3072 with step 16/8
	[1]: 'NV12' (Y/CbCr 4:2:0)
		Size: Stepwise 176x144 - 4096x3072 with step 16/8
	[2]: 'NV16' (Y/CbCr 4:2:2)
		Size: Stepwise 176x144 - 4096x3072 with step 16/8
	[3]: 'RG12' (12-bit Bayer RGRG/GBGB)
		Size: Stepwise 176x144 - 4096x3072 with step 16/8

在演示中,我們將使用 YUYV 格式。因此請(qǐng)記住其中的數(shù)值。

gst-launch-1.0 -v v4l2src device=/dev/video2 ! video/x-raw ! videoconvert ! autovideosink

運(yùn)行示例

某些攝像頭會(huì)指定分辨率和幀數(shù),因此需相應(yīng)調(diào)整這些值。這可以通過(guò)修改 PIPELINE 變量的 framerate 值來(lái)實(shí)現(xiàn)。

sudo su
cd ~/apps/detection/
./detection.sh

審核編輯(
王靜
)
投訴建議

提交

查看更多評(píng)論
其他資訊

查看更多

Yocto Linux 量產(chǎn) BSP 鏡像定制

ARM 處理器平臺(tái) eMMC Flash 存儲(chǔ)磨損測(cè)試示例

NXP iMX8MP 處理器基于 Linux 關(guān)閉 Debug Console 輸出

ARM 處理器平臺(tái) Ethernet Compliance 測(cè)試流程示例

基于 NXP iMX8QM 運(yùn)行 QNX