在 QCS8550 上部署 YOLOv10n:mms 一键下载 + QNN 2.36 & AidLite 环境更新

azouyana 2026-09-20 16:49:21

平台:Qualcomm QCS8550(KalamaP HDK) · 系统:Ubuntu 22.04 (AidLux) · 模型:YOLOv10n INT8(W8A8)

一、前言

端侧 AI 部署中,模型与推理运行时的版本匹配是绕不开的一环:

  • 模型侧:用哪个版本的 QNN SDK 量化编译(文件名里通常带 qnn236 / qnn248 等标识);
  • 设备侧:是否安装了对应版本的 QNN 运行时与 AidLite 后端。

本文记录在 QCS8550 板卡上完成以下流程的完整过程:

  1. 更新安装 AidLite SDK 与 QNN 2.36 运行环境;
  2. 使用 mms(ModelFarm 模型管理工具)一键下载 YOLOv10n INT8 模型;
  3. 运行官方 Demo,实测单次推理 约 2.1 ms

二、环境信息

项目信息
板卡 / SoCQualcomm QCS8550(KalamaP HDK)
CPU 架构aarch64
系统Ubuntu 22.04.2 LTS
推理框架AidLite SDK 2.5.0.284
模型后端QNN 2.36(运行时位于 /usr/local/lib/aidlux/qairt/qnn236
模型YOLOv10n,INT8(W8A8),输入 640×640

三、QNN & AidLite 版本更新

AidLite 相关组件通过 aid-pkg 安装与更新:

# 安装 AidLite SDK
sudo aid-pkg update
sudo aid-pkg install aidlite-sdk
sudo aid-pkg install aidlite-qnn236
  • aidlite-sdk:AidLite 推理框架主体(Python 包名为 pyaidlite);
  • aidlite-qnn236:QNN 2.36 版本后端支持,与用 QNN2.36 编译的模型配套使用。

安装完成后可以查看组件及版本:

aid-pkg list | grep -E "aidlite|qnn"

本文实测环境(节选):

组件版本
aidlite-sdk2.5.0.284
aidgen-qnn2362.4.0.139
QNN 运行时qnn236 / qnn240 / qnn248(/usr/local/lib/aidlux/qairt/

提示:不同 QNN 版本的模型要装对应版本的后端支持包;下载模型时也要选择匹配的后端(见下文 -b 参数)。

四、使用 mms 下载 YOLOv10n 模型

mms 是 ModelFarm 提供的模型下载命令行工具。
注册链接

1. 登录账号

首次使用需要先登录(否则下载时会提示 MMS login required):

mms login

2. 查询可用模型

mms list yolov10

输出(节选):

Model     Precision  Chipset  SOC               Backend
--------  ---------  -------  ----------------  -------
YOLOv10n  FP16       qcs8550  Qualcomm QCS8550  QNN2.36
YOLOv10n  INT8       qcs8550  Qualcomm QCS8550  QNN2.36
YOLOv10n  W8A16      qcs8550  Qualcomm QCS8550  QNN2.36
...

3. 下载模型

mms get -m yolov10n -p int8 -c qcs8550 -b qnn2.36 -d /home/aidlux/yolov10n

参数说明:

参数说明
-m模型名称(yolov10n / s / m / b / l / x)
-p精度:FP16 / INT8 / W8A16
-c芯片平台(qcs8550)
-b推理后端(qnn2.36)
-d下载目录(默认 /var/opt/modelfarm_models

下载输出:

Model download is ready.

Model: YOLOv10n
Precision: INT8
Chipset: qcs8550
Backend: QNN2.36

Downloading model from https://aiot.aidlux.com to directory: /home/aidlux/yolov10n
Downloading [YOLOv10n_qcs8550_w8a8.zip] ... done! [2.72MB in 285ms; 7.39MB/s]
Download complete!

五、解压与目录结构

cd /home/aidlux/yolov10n
unzip YOLOv10n_qcs8550_w8a8.zip -d YOLOv10n_qcs8550_w8a8
YOLOv10n_qcs8550_w8a8/
├── models/QCS8550/W8A8/cutoff_yolov10n_qcs8550_w8a8.qnn236.ctx.bin   # QNN 上下文模型
└── code/
    ├── README.md
    └── python/
        ├── run_test.py     # 推理入口
        ├── yolo.py         # YoloModel 封装(前处理 / 推理 / 后处理)
        ├── utils.py        # 后处理与结果绘制
        ├── test_utils.py
        └── bus.jpg         # 测试图片

六、运行推理 Demo

cd YOLOv10n_qcs8550_w8a8
python3 code/python/run_test.py \
  --target_model ./models/QCS8550/W8A8/cutoff_yolov10n_qcs8550_w8a8.qnn236.ctx.bin \
  --imgs ./code/python/bus.jpg \
  --invoke_nums 10

常用参数:

参数默认值说明
--target_model./models/QCS8550/W8A8/*.qnn236.ctx.bin模型路径
--imgs./code/python/bus.jpg输入图片
--invoke_nums10推理次数(用于测速)
--conf_thres0.25置信度阈值
--iou_thres0.45NMS IoU 阈值
--model_typeQNN推理框架类型
--save_path./code/python/result.jpg结果图保存路径

运行结果:

QNN invoke 10 times:
 --mean_invoke_time is 2.09808349609375
 --max_invoke_time is 2.6781558990478516
 --min_invoke_time is 1.9841194152832031
 --var_invoketime is 0.04239408326611738
====================================
===================
Detect 5 targets.
1 [0, 230, 802, 723] 0.9385228753089905 bus
2 [684, 401, 810, 875] 0.9123489260673523 person
3 [230, 401, 362, 855] 0.8749575614929199 person
4 [59, 401, 250, 914] 0.8749575614929199 person
5 [0, 552, 66, 868] 0.4038265645503998 person
  • 单次推理平均 2.10 ms(min 1.98 ms / max 2.68 ms),运行在 Hexagon DSP 上;
  • 检测结果:1 辆公交车(置信度 0.94)+ 4 个行人(0.91 / 0.87 / 0.87 / 0.40)。

检测结果图:

img

七、关键代码:AidLite 调用流程

摘自 code/python/yolo.py,核心流程共四步:

import aidlite

# 1. 创建模型实例,设置输入 / 输出规格
model = aidlite.Model.create_instance(model_path)
model.set_model_properties(
    [[1, 640, 640, 3]], aidlite.DataType.TYPE_FLOAT32,
    [[1, 4, 8400], [1, 80, 8400]], aidlite.DataType.TYPE_FLOAT32,
)

# 2. 创建配置:QNN 框架 + DSP 加速 + 量化模型
config = aidlite.Config.create_instance()
config.implement_type = aidlite.ImplementType.TYPE_LOCAL
config.framework_type = aidlite.FrameworkType.TYPE_QNN
config.accelerate_type = aidlite.AccelerateType.TYPE_DSP
config.is_quantify_model = 1

# 3. 构建解释器并初始化 / 加载模型
interpreter = aidlite.InterpreterBuilder.build_interpretper_from_model_and_config(model, config)
interpreter.init()
interpreter.load_model()

# 4. 填输入 -> 推理 -> 取输出(输出为 split 布局的 xyxy + 类别分数)
interpreter.set_input_tensor(0, input_data)
interpreter.invoke()
outputs = [interpreter.get_output_tensor(i) for i in range(2)]

后处理:置信度过滤 + 分类别 NMS(详见 code/python/utils.py)。

八、模型信息

项目信息
输入尺寸640 × 640
量化方式cutoff W8A8(INT8)
输出布局split
输出形状[[1, 4, 8400], [1, 80, 8400]]
目标 SoCQCS8550
QNN SDK2.36.0.250627

九、踩坑记录

  1. **下载提示 MMS login required**:mms 必须先 mms login 登录,然后再执行 mms get
  2. run_test.py 报找不到模型 / 图片:脚本默认路径均为相对路径,请在解压包的根目录下执行,或通过参数传绝对路径;
  3. QNN 版本要对齐:模型文件名中的 qnn236 即所需 QNN 版本,设备端需有对应后端(如 aidlite-qnn236 / aidgen-qnn236),下载时也用 -b qnn2.36 选择匹配的后端;若加载失败,优先检查这一项。

十、小结

aid-pkg + mms 两条命令链就能完成「环境准备 → 模型下载」全流程;YOLOv10n INT8 量化模型在 QCS8550 的 Hexagon DSP 上单次推理约 2.1 ms,完全满足实时检测需求。


本文实测环境:QCS8550 / Ubuntu 22.04 / AidLite 2.5.0.284 / QNN 2.36 / YOLOv10n INT8

...全文
26 回复 打赏 收藏 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
下载代码方式:https://pan.quark.cn/s/c66ecb4d06ce 同源策略:从安全角度出发,浏览器会对脚本发起的跨站请求施加限制,要求JavaScript或Cookie仅能获取同源(即协议、域名和端口完全一致)下的资源。正因如此,不同项目间的调用会受到浏览器的阻碍。以常见情境为例:WebApi作为数据服务层,它是一个独立的项目,而MVC项目则承担Web的展示功能,此时MVC项目需要调用WebApi中的接口以获取数据并在页面上呈现。由于WebApi与MVC属于两个独立的项目,运行后便会产生前面提及的跨域问题。WebApi的跨域问题主要源于浏览器的同源策略,这是一种安全措施,旨在限制JavaScript或Cookie仅能访问同一源(包括协议、域名和端口)下的内容。在实际开发过程中,当WebApi作为一个独立服务,例如数据服务层,而MVC项目作为前端展示层时,两者运行在不同的项目和端口下,浏览器将阻止MVC对WebApi的跨域请求,从而影响数据的正常获取。为了应对这一问题,我们可以采用CORS(跨域资源共享)机制。CORS通过在HTTP请求与响应头中嵌入特定标识,向浏览器明确哪些跨域请求是被允许的。例如,服务器可以在响应头中添加`Access-Control-Allow-Origin:http://localhost:8081`,表示允许来自http://localhost:8081的请求访问资源。解决WebApi跨域问题的具体实施步骤如下: 1. 构建一个包含MVC项目(Web)与Web API项目(WebApiCORS)的解决方案。 2. 在MVC项目中,例如Home控制器的Index视图,通过Ajax向WebApiCORS发起跨域请求。 3...

7,696

社区成员

发帖
与我相关
我的任务
社区描述
本论坛以AI、IoT、PC 、XR、Auto等核心板块组成,为开发者提供便捷及高效的学习和交流平台。 高通开发者专区主页:https://qualcomm.csdn.net/
物联网人工智能开源 企业社区 北京·东城区
社区管理员
  • csdnsqst0050
  • chipseeker
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧