当前位置:首页 > 工业控制 > 电路设计项目集锦
[导读]在多模型流水线中,一个神经网络的输出会动态地裁剪、缩放或条件化输入,以供下一个网络使用。虽然这种串联方式灵活,但如果完全依赖主机 ARM 核心执行,则可能导致严重的 CPU 瓶颈。

单模型视觉任务(如目标检测)是边缘 AI 的核心,但现实中的交互应用——例如无接触 UI 控制、手语识别和机器人控制——通常需要链式多模型流水线。

在多模型流水线中,一个神经网络的输出会动态地裁剪、缩放或条件化输入,以供下一个网络使用。虽然这种串联方式灵活,但如果完全依赖主机 ARM 核心执行,则可能导致严重的 CPU 瓶颈。

本项目针对运行 Ubuntu 24.04 LTS 的 Qualcomm Dragonwing IQ-9075 EVK,实现了完整的三阶段 MediaPipe 手势识别流水线。通过借助 Qualcomm QNN(Qualcomm Neural Network)Hexagon HTP 代理,并结合 ai-edge-litert 工具,我们将三个模型直接卸载至 NPU 的 VTCM(向量紧密耦合内存)缓存中。随后,我们对这一方案与四线程 CPU 基准进行了对比。

先决条件检查

您需要:

•Dragonwing IQ-9075 EVK 已预装 Ubuntu 24.04 LTS,可通过 SSH 访问。如果尚未完成,请先按照高通官方指南操作:使用 QDL 安装 Ubuntu,然后设置设备。

•一个 USB 网络摄像头(例如 Logitech C922 Pro Stream)。

•一台用于工作的主机电脑(Mac 或 Linux;以下步骤在 Windows 上通过 WSL 也完全相同)。

1. 验证板卡可访问性

在进行其他操作之前,请先检查您的板卡是否可通过 SSH 访问。除非您在设置过程中已更改过,否则默认为 Ubuntu:

提示:不知道板卡的 IP 地址?首先尝试使用 `ssh ubuntu@ubuntu.local`(板卡默认会以主机名 ubuntu 在本地网络中自动宣告自己)。否则,请查看您的 Wi-Fi 路由器中已连接设备列表。

2. 在主机电脑上准备 Python 和 AI Hub 环境

在您的计算机上安装 Python。AI Hub 的工具需要 Python 3.10、3.11、3.12 或 3.13。请检查您当前安装的版本:

如果命令未找到,请在主机机器上安装:

•Mac:brew install python@3.12

•Linux(Ubuntu 24.04):sudo apt install python3.12 python3.12-venv

•Windows:使用 WSL,然后在其中执行 Linux 指令。

接下来,在主机电脑上创建虚拟环境,并安装 AI Hub 模型包:

3. 将主机连接至高通AI中心

从 aihub.qualcomm.com 获取您的 API 令牌 → 账户 / 设置 → API 令牌,然后配置您的客户端:

验证 Dragonwing IQ-9075 EVK 是否被 AI 中心识别:

如果 Dragonwing IQ-9075 EVK(或 QCS9075)出现在输出中,说明已准备就绪!

流水线架构:三个模型的工作原理

与单次检测器不同,MediaPipe 将手势识别拆分为三个独立阶段,以在保持计算成本低的同时最大化精度:

•第一阶段 — 手掌检测:在整个 256x256 像素图像帧内检测手掌中心点及其旋转角度。

•第二阶段 — 手部关键点:将裁剪后的手部区域进行变换并缩放到 224x224,提取 21 个三维手部坐标,并判断左右手方向。

•第三阶段 — 手势分类:将 21 个关键点预处理为一个中心对齐、尺度不变的 64 个元素特征向量(包含手部方向信息),通过正向和镜像通道运行,从而对手势进行分类(如张开手掌、握拳、向上指、胜利、拇指向上、拇指向下、我爱你、无手势等)。

逐步实施指南

1:从主机下载模型包并推送到IQ9 EVK

我们将使用高通AI Hub CLI在您的主机计算机上下载两种模型版本(用于CPU基准测试的Float32和用于NPU加速的8位量化INT8 W8A8),然后通过SSH/SCP直接将它们推送至IQ9 EVK。

在您的主机Mac/Linux机器上(请确保您的~/qai-hub-env虚拟环境已激活):

(注意:CLI会将模型直接提取到您当前目录下的mediapipe_hand_gesture-tflite-w8a8和mediapipe_hand_gesture-tflite-float中。)

B. 将模型文件推送到IQ9 EVK

现在在板子上创建目标目录,并使用scp传输提取的.tflite模型文件:

验证模型是否已存在于板子上:

每个EVK上的目录应包含以下文件:

•palm_detector.tflite

•hand_landmark_detector.tflite

•canned_gesture_classifier.tflite

2:设备端系统准备与基础依赖

本指南其余部分将在板子上直接进行。登录您的IQ-9075 EVK:

更新系统软件包并安装OpenCV/GStreamer多媒体库:

3:配置设备端Python虚拟环境

在开发板上创建一个隔离的虚拟环境,以安全地管理Python包:

注意:每次在EVK上打开新的终端会话时,请始终运行 `source ~/mediapipe_env/bin/activate` 来执行您的脚本。

4:验证高通QNN委派驱动程序

高通神经网络(QNN)委派模块可将ai-edge-litert直接连接到Hexagon张量处理器(HTP/NPU)。请检查开发板上共享的驱动库是否可用:

如果该路径能成功解析,则说明开发板已完全准备好进行硬件NPU加速。

5:代码架构要点

在Python中,若要将多模型阶段绑定至Hexagon NPU,需使用LiteRT实例化QNN委派模块:

6:设置Python脚本并执行基准测试

在IQ-9075 EVK(已激活~/mediapipe_env虚拟环境)上,为项目代码创建一个专用文件夹:

main_npu.py(从“代码/附件”部分复制代码)

您也可以直接在开发板上使用nano命令创建这些文件:

运行NPU基准测试

在运行NPU脚本之前,必须导出ADSP_LIBRARY_PATH。该环境变量告诉主机操作系统(Ubuntu)确切地找到用于与Hexagon NPU处理器建立通信桥梁所需的底层FastRPC骨架文件和桩文件。如果没有此变量,应用程序将无法初始化NPU,很可能崩溃或静默回退到CPU。

插入您的USB网络摄像头并运行NPU加速脚本:

视觉输出:实时窗口显示绿色的手部边界框、黄色的骨架连接线、红色的关节地标、深蓝色的手势标签,以及以绿色显示的实时NPU延迟指标。

运行CPU基准测试

运行CPU基准脚本,以将性能与主机ARM核心进行比较:

视觉输出:相同的流水线可视化,显示黄色的延迟指标,代表4线程CPU执行情况。

基准测试结果:NPU vs CPU

以下是运行在搭载Ubuntu 24.04 LTS的高通IQ-9075 EVK上的端到端性能指标:

关键发现与结论

在NPU上实现多模型串联:将顺序模型卸载至高通Hexagon NPU可显著降低端到端延迟,同时释放主机CPU周期,以便用于下游机器人控制或逻辑处理。

VTCM 缓存优势:8位量化(w8a8)可使三种模型图均能完全容纳在Hexagon高速VTCM缓存中,避免内存带宽瓶颈。

边缘端支持能力:将视觉处理任务迁移至NPU,为实时边缘AI系统提供高能效、超响应的底层支持。

本文编译自hackster.io

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭