在搭载 NPU 的 AMD AI PC 上部署端到端对象检测模型
Jan 24, 2026
简介
设备端 AI 时代正在加速到来,而采用 AMD Ryzen AI 的 PC 正处在这场变革的前沿。凭借专用的神经处理单元 (NPU)、集成 GPU 和高性能 CPU,开发者如今可以在本地部署复杂的计算机视觉模型,实现低延迟推理,而无需依赖云端。
对象检测是众多 AI 应用(从自动驾驶系统到零售分析)的基石。要在边缘设备上高效运行此类工作负载,需要进行细致的优化。关于如何在 AMD AI PC 上部署对象检测模型,本博客提供了一个按每一步详细说明的端到端工作流程,具体涵盖:
- 将模型导出为 ONNX 格式,实现跨平台兼容性
- 使用 AMD Quark 工具进行量化,减小模型大小并提升 NPU 吞吐量
- 利用 AMD ONNX Runtime 和 NPU 加速进行部署
- 评估准确性、延迟和效率
我们将以 YOLO-World 为例,展示如何在保持准确性的同时充分提升 NPU 性能,为开发者提供实用的 AI 应用落地方案。
环境
硬件要求
- AMD 锐龙 AI 系列处理器,NPU 驱动程序版本为 32.0.203.280 或更高
- Windows 11 x86-64(建议更新至最新版本)
软件要求
- 安装 anaconda 或 miniforge
- 下载并安装 Ryzen AI Python 软件包
创建和克隆新的 conda 环境:
conda create --name ryzen-ai-1.6.1-yoloworld --clone ryzen-ai-1.6.1
conda activate ryzen-ai-1.6.1-yoloworld
代码和模型
- Yolo-World 测试代码: Ryzen AI-SW-GitHub
- 原始浮点模型:yolov8s-worldv2
浮点模型概述
本演示采用经过训练的 Yolo World 模型,其规格如下:
- 版本:Yolov8s-worldv2
- 输入分辨率:640×640
- 格式:FP32
- 基准精度:
- AP50-95:0.415
- AP50:0.498
该模型将作为量化和性能评估的参考基准。
将 Yolo World 导出为 ONNX
YoloWorld 支持直接导出为 ONNX 格式。可使用 Python 脚本直接导出。
导出命令
python .\ultra_yolo_to_onnx.py --pt-model .\models\yolov8s-worldv2 --input-size 640
关键注意事项
- 使用 opset ≥ 20
- 导出后,使用 Netron 验证模型
支持的算子
确保模型中的所有算子均受 AMD NPU 支持。
YOLO World 中支持的主要算子包括:
| 算子 | 支持 |
| Conv | Y |
| Batchnormal | Fuse |
| Sigmoid | Y |
| Exp | Y |
| Add/Mul | Y |
| Transpose | Y |
| Reshape | Y |
| Clip | Y |
| Softmax | Y |
| Cast | Y |
| Normalize | Y |
| Div | Y |
| Mul | Y |
| Maxpool | Y |
| Resize | Y |
| Slice | Y |
| Einsum | Y |
| NMS | 在 CPU 上 |
如需详细了解所有受支持的算子,请访问:AMD Ryzen AI 文档
量化工作流程
准备校准数据集
校准数据集必须:
- 能够代表实际的部署数据
- 覆盖光照、目标尺寸和类别分布
- 包含 100–1000 张图像
运行量化工具
示例(特定于平台的命令):
python quark_quant.py --onnx yolo-world-models/yolov8s-world.onnx ^
--quant A16W8_ADAROUND ^
-exclude-post
关键配置字段:
| 字段 | 说明 |
| quant | 量化类型,可使用 A8W8/A16W8 及其他类型 |
| exclide-post | 建议用于激活操作 |
| num-calib-images | 用于校准的图像数量(默认 512) |
| lr | 学习率(默认 0.1) |
| iters | 迭代次数(默认 3000) |
部署工作流程
将模型加载到运行时
Python API 示例:
session = ort.InferenceSession(model_path,
providers=["VitisAIExecutionProvider"])
完整的推理流水线
1. preprocess
img_resized, pad_top_left, scale = preprocess_image(
img, input_size_wh, bgr2rgb=True
)
2. inference
outputs = session.run(output_names=None, input_feed={input_name: img_resized})
3. decode + nms
img_detections = postprocess_output(
outputs[0],
pad_top_left,
scale,
yolo_id_to_coco_id_map,
min_score_thres,
nms_iou_thresh,
img_width,
img_height,
)
推荐的预处理步骤:
- 使用 Letterbox 方式将尺寸调整为 (640,640)
- 归一化至 0–1 区间
- 通道顺序设为 BGR 转 RGB
- 填充方式使用“居中对齐”
测试 mAP 与性能
您可以替换模型和设备,以测试 CPU 模式。
python eval_on_coco.py –-model yolo-world-models/ yolov8l-worldv2-A16W8_ADAROUND-640x640-exclude-post –-device npu
python infer_single.py -–model yolo-world-models/ yolov8l-worldv2-A16W8_ADAROUND-640x640-exclude-post -–image test_img.jpg –-device npu --runtime-seconds 60
注意事项
- 预处理必须与训练时完全一致
- 在嵌入式平台上避免使用动态形状
- 验证特征映射图布局
- 校准数据集极为重要
结果
下面是 yolov8s-worldv2 的结果表:
| yolov8s-worldv2 | mAP | mAP50 | mAP75 | 延迟 (毫秒) |
模型大小 |
| 浮点模型 | 35.9 | 49.7 | 39 | 53.21 | 48.06k |
| 量化模型 | 35.6 | 49.6 | 38.7 | 90.68 | 12.46k |
| NPU E2E 准确度 | 35.6 | 49.5 | 38.7 | 22.85 | 17.39k |
结语
在本博客中,我们展示了在 AMD AI PC 上部署对象检测模型的完整工作流程,从将 YOLO-World 导出为 ONNX、进行量化一直到 NPU 部署和评估。
关键要点包括:
- 通过使用 A16W8_ADAROUND 进行量化,可在保持精度的同时显著减小模型大小
- 正确的校准和预处理对于实现稳定的部署性能至关重要
AMD AI 生态系统正在快速发展,现在正是探索设备端 AI 流水线的绝佳时机。我们鼓励开发者:
- 尝试不同的量化方案,优化自己的工作负载
- 在 Ryzen AI PC 上对自定义模型进行基准测试,充分发挥 NPU 潜能
- 通过分享见解、性能结果和最佳实践,为 AMD AI 开发者社区做出贡献
通过遵循此工作流程,您将可以充分释放 AMD NPU 潜能,顺畅运行生产就绪的实时对象检测模型,高效而精准地将强大 AI 能力落地至边缘环境。