7,696
社区成员
发帖
与我相关
我的任务
分享平台:Qualcomm QCS8550(KalamaP HDK) · 系统:Ubuntu 22.04 (AidLux) · 模型:YOLOv10n INT8(W8A8)
端侧 AI 部署中,模型与推理运行时的版本匹配是绕不开的一环:
qnn236 / qnn248 等标识);本文记录在 QCS8550 板卡上完成以下流程的完整过程:
mms(ModelFarm 模型管理工具)一键下载 YOLOv10n INT8 模型;| 项目 | 信息 |
|---|---|
| 板卡 / SoC | Qualcomm 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 |
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-sdk | 2.5.0.284 |
| aidgen-qnn236 | 2.4.0.139 |
| QNN 运行时 | qnn236 / qnn240 / qnn248(/usr/local/lib/aidlux/qairt/) |
提示:不同 QNN 版本的模型要装对应版本的后端支持包;下载模型时也要选择匹配的后端(见下文
-b参数)。
mms 是 ModelFarm 提供的模型下载命令行工具。
注册链接
首次使用需要先登录(否则下载时会提示 MMS login required):
mms login
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
...
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 # 测试图片
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_nums | 10 | 推理次数(用于测速) |
--conf_thres | 0.25 | 置信度阈值 |
--iou_thres | 0.45 | NMS IoU 阈值 |
--model_type | QNN | 推理框架类型 |
--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
检测结果图:

摘自 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]] |
| 目标 SoC | QCS8550 |
| QNN SDK | 2.36.0.250627 |
MMS login required**:mms 必须先 mms login 登录,然后再执行 mms get;run_test.py 报找不到模型 / 图片:脚本默认路径均为相对路径,请在解压包的根目录下执行,或通过参数传绝对路径;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