by Toradex Allan Kamimura
边缘计算机视觉
为何选择边缘计算?
嵌入式设备日益智能化,许多机器学习和计算机视觉任务正被推向边缘设备。在此类设备上运行 AI 模型虽具挑战性,却带来诸多优势:
为何需要外部 AI 加速器?
Toradex 提供多种计算机模块(SoM),其中一些集成了神经网络处理单元(NPU),能够应对不同的 AI 工作负载。例如,Verdin iMX8M Plus, Verdin iMX95和 Aquila AM69 均配备了专为边缘推理加速设计的 NPU,使其适用于众多计算机视觉和机器学习应用。
尽管这些模块提供了强大的 AI 解决方案,但诸如 Hailo-8、EdgeX、MemryX 及 Google Coral 等外部 AI 加速器通过提供模块化、解耦且可扩展的边缘 AI 推理方案来应对挑战。这带来了更高的灵活性和面向未来的 AI 能力。
1. 将 AI 处理与 SoC 供应商软件解耦
在边缘运行机器学习面临的一大挑战是将模型适配到特定硬件或运行库上。无论是 NXP 的 eiQ 平台、TI 的 Edge AI Studio 还是 ONNX 导出工具,每种都有其专属的 AI 工具包和优化策略。外部 AI 加速器将 AI 工作负载从其他硬件中分离出来,提供了一个统一的跨多硬件平台的运行环境。
示例: 一个基于 x86 设备并使用 Hailo-8 AI 加速器开发的计算机视觉解决方案,可以无缝迁移至搭载 Hailo-8 的 Aquila AM69 模块上而无需重构整个 AI 堆栈。这种解耦确保了仅需最小调整即可完成迁移,大大缩短了产品上市时间。
2. 模块化与可扩展性
AI 应用具有动态特性,随着工作负载复杂度的增加或新功能的创建,性能需求可能会发生变化。虽然内置的 NPU 能提供坚实的解决方案,但有时它们可能难以适应新的场景。
Hailo简介
Hailo是一家 AI 处理器制造商,其产品旨在边缘端上运行先进的机器学习应用,能够广泛应用于智慧城市、汽车、制造、农业、零售等多个行业和领域。
我们使用 Hailo-8 M.2 模块在多款 Toradex 模块上进行了测试。Hailo-8 M.2 模块是一款具备 26 TOPS 算力及 PCIe Gen-3.0 4通道 M-key 接口的 AI 加速器模块。该 M.2 模块可插入多种 Toradex 载板中,实现实时的深度神经网络推理。
如何 Hailo 充分利用 Toradex 生态系统?
释放预处理和后处理任务
来源: https://hailo.ai/blog/customer-case-study-developing-a-high-performance-application-on-an-embedded-edge-ai-device/
典型的计算机视觉流程遵循线性模式。从摄像头捕捉源开始,直到应用程序采取行动,图像必须经过每一个处理步骤。这意味着如果任何一个步骤比下一个耗时更长,那就是瓶颈所在。
通常,在比较机器学习模型或硬件时,我们会非常关注推理速度,但这只是问题的一部分。
完整的软件堆栈
Hailo 是一个完整的人工智能解决方案,支持常见机器学习工作流中的大部分步骤。
从 Toradex 方面来看,这一工作流程可以通过使用 Torizon 云平台得到补充。
支持 Toradex 模块硬件
硬件
支持的硬件配置
系列 | 模块 | 载板 | Hailo |
Aquila | TI AM69 (1+2 x PCIe 3.0) | Clover (M.2 key B+M) | Hailo-8 Hailo-8L |
Aquila | NXP i.MX 95 (1 x PCIe 3.0) | Clover (M.2 key B+M) | Hailo-8 Hailo-8L |
Verdin | NXP i.MX 95 (1 x PCIe 3.0) | Mallow (M.2 key B) | Hailo-8 Hailo-8L |
Verdin | NXP i.MX 8M Plus (1 x PCIe 3.0) | Mallow (M.2 key B) | Hailo-8 Hailo-8L |
Verdin | NXP i.MX 8M Mini (1 x PCIe 2.0) | Mallow (M.2 key B) | Hailo-8 Hailo-8L |
Apalis | NXP i.MX8 (2 x PCIe 3.0) | Ixora (Mini PCIe) | Hailo-8R mPCIe |
软件
OS | 版本 | 其他的资源 |
Torizon OS | BSP 7 | meta-hailo layer (即将上线) |
Torizon OS | BSP 6 | runtime container (即将上线) |
Torizon OS Minimal | BSP 6 | meta-hailo kirkstone OpenEmbedded layer for GStreamer 1.0 |
tdx-reference-multimedia | BSP 6 | meta-hailo kirkstone |
YOLOv5 示例
在本例中,我们将运行来自 Tappas 的演示应用程序:
完成此示例后,您应得到类似以下的输出。以 60+ FPS 的速度运行(取决于您的摄像头)。
我们将使用:
步骤:
从源代码构建 Torizon OS
完整指南
首先,您可能需要检查计算机的 RAM 和磁盘空间
构建 Torizon OS 基础镜像
我们将使用 CROPS 容器来构建以下镜像:
Torizon OS Disto | Machine | Torizon OS Image Target | 版本 |
torizon | verdin-imx8mp | torizon-minimal | 6.8.0 |
创建工作目录
cd ~
mkdir ~/yocto-workdir
运行容器(这将构建基础镜像)
这将占用大量内存,并需要几个小时才能完成。
命令的第二行将主机卷映射到容器的 workdir 目录。请注意,此文件夹 ~/yocto-workdir 是在上一步中创建的。
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
将依赖项添加到镜像
要添加依赖项,首先进入 ~/yocto-workdir/layers 文件夹。
cd ./layers
我们将添加下面 layers:
更多关于 meta layers 的内容,请参考 完整的文档。
在 torizon/crops:kirkstone-6.x.y 容器中, 运行 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。在末尾添加下面内容。
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-<date>+build.0.tar.
硬件设置
连接Hailo设备
将 Hailo 设备插入 Mallow 载板的 M.2 插槽中。
连接摄像头
将摄像头连接到 Mallow 载板的 MIPI-CSI 接口上。
安装新的 Torizon OS 镜像
使用 Toradex Easy Installer (Tezi) 将新镜像刷入设备。
检查安装情况
Hailo 设备
sudo su
hailocli scan
hailocli device-info
这些命令的输出应能检测到设备已正确连接且驱动程序正常工作。
显示屏
gst-launch-1.0 videotestsrc ! videoconvert ! autovideosink
您应该在屏幕上看到一些彩色图案。
Camera 设备
此步骤可能因使用的相机而异。
v4l2-ctl -d2 -D
v4l2-ctl --list-formats-ext -d /dev/video2
对于 Framos 相机,输出如下。
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 格式。因此请记住其中的数值。
gst-launch-1.0 -v v4l2src device=/dev/video2 ! video/x-raw ! videoconvert ! autovideosink
运行示例
某些摄像头会指定分辨率和帧数,因此需相应调整这些值。这可以通过修改 PIPELINE 变量的 framerate 值来实现。
sudo su
cd ~/apps/detection/
./detection.sh
文章评论(0条评论)
登录后参与讨论