YOLOv8-det 示例
此文档讲述使用 QAI AppBuilder Python API 利用 Qualcomm® Hexagon™ Processor (NPU) 推理 YOLOv8-det 目标检测模型。
示例支持设备
| 设备 | SoC |
|---|---|
| Dragon Q6A | QCS6490 |
| Dragon Q8B | SC8280XP |
| Fogwise® AIRbox Q900 | QCS9075 |
安装 QAI AppBuilder
-
请根据 QAI AppBuilder 安装方法 安装 QAI AppBuilder。
-
请根据 创建 ADSP 环境变量 配置 ADSP 环境变量。
运行示例
安装依赖
在已激活的虚拟环境中安装示例依赖:
pip3 install requests tqdm qai-hub py3-wget Pillow torch torchvision opencv-python-headless
运行脚本
-
进入上游示例目录
Devicecd qai-appbuilder/samples -
准备输入数据(示例自带输入文件时可直接运行;也可按脚本参数指定)

input image
修正输出顺序(QCS6490 / SC8280XP / QCS9075 必做)
在 Dragon Q6A(--chipset 6490)与 AIRbox Q900(--chipset 9075)上实测:AI Hub 下发的包常为下列布局:
| 输出下标 | 形状 | 含义 |
|---|---|---|
0 | [1, 8400] | scores |
1 | [1, 8400] | class_idx |
2 | [1, 8400, 4] | boxes |
而上游 yolov8_det.py 默认按 [boxes, scores, class_idx] 解析,会导致 NMS 阶段:
IndexError: index ... is out of bounds for dimension 0 with size ...
在运行前,对 ComputerVision/Object_Detection/yolov8_det/yolov8_det.py 中 Inference() 内解析输出的代码做如下替换(建议先备份):
将:
# Run the inference.
model_output = yolov8.Inference(image)
pred_boxes = torch.tensor(model_output[0].reshape(1, -1, 4))
pred_scores = torch.tensor(model_output[1].reshape(1, -1))
pred_class_idx = torch.tensor(model_output[2].reshape(1, -1))
替换为:
# Run the inference.
model_output = yolov8.Inference(image)
# Output layout differs by model package:
# - some packages: [boxes, scores, class_idx]
# - QCS6490 / QCS9075 hub packages often: [scores, class_idx, boxes]
import numpy as _np
a0, a1, a2 = _np.array(model_output[0]), _np.array(model_output[1]), _np.array(model_output[2])
if a2.ndim == 3 and a2.shape[-1] == 4:
pred_scores = torch.tensor(a0.reshape(1, -1))
pred_class_idx = torch.tensor(a1.reshape(1, -1))
pred_boxes = torch.tensor(a2.reshape(1, -1, 4))
else:
pred_boxes = torch.tensor(a0.reshape(1, -1, 4))
pred_scores = torch.tensor(a1.reshape(1, -1))
pred_class_idx = torch.tensor(a2.reshape(1, -1))
该写法会按最后一个输出是否为 [..., 4] 自动选择布局,兼容 6490 / 9075 与其它输出顺序。
执行推理
- QCS6490
- SC8280XP
- QCS9075
python3 ComputerVision/Object_Detection/yolov8_det/yolov8_det.py --chipset 6490
SC8280XP 与 QCS6490 同为 Hexagon V68,下载模型时使用 --chipset 6490,并同样建议应用上方输出顺序修正。
python3 ComputerVision/Object_Detection/yolov8_det/yolov8_det.py --chipset 6490
python3 ComputerVision/Object_Detection/yolov8_det/yolov8_det.py --chipset 9075
预期结果
完成输出顺序修正后,在 QCS6490 / QCS9075 上推理成功均会生成:
ComputerVision/Object_Detection/yolov8_det/output.png
无图形界面时可能打印 Error: no DISPLAY environment variable specified;只要 output.png 已生成且退出码为 0,可忽略。
- 运行结果示意(示意图片,实际结果取决于输入与模型版本)

output image
也可使用启动器(仍需先完成脚本中的输出顺序修正):
python3 run_inference.py --model yolov8_det --args "--chipset 6490"
# 或 QCS9075:
# python3 run_inference.py --model yolov8_det --args "--chipset 9075"