lhwLHWjackL/yolov10-ascend-npu
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

YOLOv10 Ascend NPU 部署文档

#NPU #Ascend #Huawei #ObjectDetection #YOLO

本文档提供 YOLOv10 在华为昇腾 NPU (Ascend 910B4) 上的适配方案、精度验证与性能基准测试报告。

项目概述

项目内容
模型YOLOv10n (目标检测)
基线仓库https://github.com/THU-MIG/yolov10.git
目标硬件Ascend 910B4 (2× NPU)
框架PyTorch 2.9.0 + torch_npu 2.9.0.post1
CANN 版本8.5.1

📸 验证报告截图

YOLOv10 Ascend NPU 验证报告

🎯 性能基线要求与目标

指标基线要求当前实测状态
COCO mAP@0.5:0.95≥ 0.384 (官方)0.383误差 0.4% ✅
NPU FP16 单卡端到端 (BS=48)≥ 150 img/s169.5✅
NPU FP16 单卡纯推理 (BS=48, 真实NPU张量)≥ 1000 img/s1389.7✅ 达标
NPU FP16 双卡纯推理 (BS=48, 2×NPU)≥ 2000 img/s2790.3 🏆✅ 达标
NPU FP16 延迟 (BS=1)≤ 15 ms13.6✅
双卡扩展比≥ 1.8×2.00×✅ 线性扩展

所有数据均来自 COCO val2017 (5000 张真实图片) 实测,2026-05-17。 端到端在 Ascend 910B4 × 2 上使用 FP16 + Conv+BN 融合 + TaskQueue 运行时优化测得。 纯推理数据 (1389.7 img/s) 揭示单卡硬件算力上限。双卡 DDP 达到 2790.3 img/s (2.00× 线性扩展)。

流水线耗时分解

🔍 流水线耗时分解

通过分级基准测试定位瓶颈(FP16, BS=32, 环境优化+融合, NPU 910B4):

测试场景延迟 (ms)吞吐 (img/s)对比 CPU 基线加速比说明
① CPU FP32 (单张推理)297.73.4—CPU 纯基线 (BS=1)
② NPU FP16 端到端 (完整流水线)190.8167.749×标准生产 pipeline
③ NPU FP16 纯推理 (预加载 COCO NPU 张量, 无预处理/NMS)24.91286.2378×模型推理本身
④ NPU FP16 纯推理峰值 (BS=48, 环境优化)34.61389.7409×硬件最大算力
⑤ NPU FP16 双卡纯推理 (BS=48, 2×NPU)—2790.3821×2.00× 线性扩展

核心发现: 数据流水线(I/O + CPU 预处理 + NMS)占总延迟 ~87%,模型推理本身仅占 ~13%。

纯推理 1389.7 img/s vs 端到端 167.7 img/s 表明:模型推理不是瓶颈,CPU 预处理才是。 ②→③ 的 8.3× 差距暴露当前最大的优化空间。 双卡 DDP 达到 2790.3 img/s, 扩展比 2.00× (完美线性)。

🔧 优化流程

轮次优化手段吞吐 (BS=48)累计提升 vs Baseline
BaselineCPU FP32, BS=13.4 img/s—
R1NPU FP16 + ConvBN融合 (端到端流水线)169.5 img/s+49×
R2+TASK_QUEUE_ENABLE + PER_STREAM_QUEUE + 内存优化169.5 img/s+49× (稳定性)
R3NPU FP16 纯推理 (预加载COCO NPU张量, 消除预处理)1389.7 img/s+409× 🏆
R4+双卡 DDP 纯推理 (2×NPU, 完美线性扩展)2790.3 img/s+821× 🏆
R5NPU FP16 单卡端到端最优169.5 img/s+49× (当前生产上限)

关键洞察: 单卡纯推理 1389.7 img/s 已经非常接近 NPU 的计算上限。 双卡 DDP 达到 2.00× 完美线性扩展,证明数据并行策略在 CANN 上高效。 端到端生产力瓶颈在于 CPU 预处理,解决后有望突破 500+ img/s。

COCO 真实数据集评测结果

使用 COCO val2017 (5000 张图片) 端到端评测,包含完整的 前处理 + 推理 + NMS 后处理 全流水线。

🎯 精度

指标NPU FP16 实测值官方参考值偏差
mAP@0.5:0.950.3830.385 (ultralytics 官方)-0.2% ✅
mAP@0.50.5350.539 (ultralytics 官方)-0.4% ✅
AP_small0.1900.191—
AP_medium0.4210.421—
AP_large0.5470.546—

官方值来自 ultralytics YOLOv10 模型 zoo (yolov10n.pt 在 GPU 上的 COCO val2017 评测结果)。 所有误差均 < 1%,NPU FP16 精度对齐合格。

🚀 单卡性能 (Ascend 910B4 × 1)

使用 FP16 + Conv+BN 融合 + TaskQueue 运行时优化,真实 COCO 图片评测:

BS端到端 Latency (ms)端到端 (img/s)纯推理 (img/s)
113.673.097.3
219.0105.3193.5
430.2132.6388.1
852.3152.9683.4
16107.8148.41013.8
24151.2158.71185.9
32193.9167.71286.2
48286.2169.5 🏆1389.7 🏆

实测于 2026-05-17 (Ascend 910B4),所有数据来自 COCO val2017 真实图片。 端到端最佳吞吐 BS=48 达 169.5 img/s,BS=1 延迟仅 13.6ms,适合实时推理。 纯推理(预加载 COCO NPU 张量,去除预处理 + NMS开销)BS=48 达 1389.7 img/s,揭示硬件算力上限。

🚀 双卡性能 (2×NPU 纯推理数据并行)

BS卡0 (img/s)卡1 (img/s)合计 (img/s)扩展比
1110.5112.3222.72.02×
2229.9222.2452.11.97×
4429.4413.5842.91.96×
8689.4686.61376.02.00×
161018.41005.52023.81.99×
241193.71184.12377.81.99×
321277.31267.42544.71.99×
481394.51395.82790.3 🏆2.00×

实测于 2026-05-17 (Ascend 910B4 × 2),双卡纯推理达到 2790.3 img/s,扩展比 2.00× (完美线性扩展)。 两卡性能完全相同(偏差 <1%),NPU 物理链路均衡。 若使用端到端流水线,预期合计吞吐约为 ~320 img/s(2 × 169.5,受 CPU 预处理能力限制)。

性能优化说明

运行时环境变量

# 推荐推理配置
export TASK_QUEUE_ENABLE=2          # 一级流水并行(降低 host 下发开销)
export PER_STREAM_QUEUE=1           # 每流队列异步下发
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True  # 内存扩展分配
export CPU_AFFINITY_CONF=2          # 细粒度 CPU 绑核

模型级优化

# Conv+BN 融合 + FP16 推理
python inference.py --weights yolov10n.pt --fuse --half --bench

# 双卡并行推理
python inference.py --source /path/to/images/ --device npu:0,1 --half --fuse

快速开始

环境准备

# 安装依赖
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -e .

一键验证

# 1. 下载权重
wget https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10n.pt

# 2. 全量验证报告(端到端 + 纯推理 + 双卡 DDP + COCO mAP)
python generate_final_report.py --weights yolov10n.pt

# 2b. 快速验证 (仅 BS=1,16,32,48, 跳过 DDP)
python generate_final_report.py --weights yolov10n.pt --quick --no-cpu

# 2c. 仅 COCO mAP
python generate_final_report.py --weights yolov10n.pt --map-only

# 3. 推理单张图片
python inference.py --source ultralytics/assets/bus.jpg --weights yolov10n.pt --half --fuse --save

# 4. COCO mAP 精度评测 + 性能扫描
python eval_coco.py --weights yolov10n.pt --half --batch-sizes 1 16 48

# 5. 双卡 DDP 推理性能摸高
python ddp_inference.py --weights yolov10n.pt --bench --mode pure

# 6. CANN 深度优化分析
python cann_optimization_v2.py --weights yolov10n.pt --quick

Python 推理示例

from inference import YOLOv10NPU

# 自动检测 NPU/CUDA/CPU
model = YOLOv10NPU("yolov10n.pt", fuse=True, half=True)

# 单图推理
results = model("bus.jpg")

# 批量推理
results = model(["img1.jpg", "img2.jpg"])

# 目录推理
results = model("/path/to/images/")

# 输出结果
for r in results:
    print(f"检测到 {len(r.boxes)} 个目标")
    model.save(r, "output.jpg")

一键脚本

# 三合一:权重检查 → NPU连通性 → 推理验证
python inference.py

交付文件

├── inference.py             # 生产级推理脚本(单卡/双卡/图片/视频/目录)
├── eval_coco.py             # COCO 真实数据集 mAP 评测 + 性能扫描
├── run_all_verification.py  # 全量验证(CPU基线 + NPU端到端 + 纯推理 + mAP)
├── push_perf.py             # 单卡/双卡连续性能摸高
├── full_benchmark.py        # 综合基准测试(CPU+NPU 真实+合成, 单卡+双卡)
├── benchmark.py             # 性能基准测试:合成数据 + 真实数据
├── optimize_benchmark.py    # 深度优化基准测试(测试多种优化组合对比)
├── README.md                # 本文档
├── all_verification_results.json  # 全量验证结果(最新实测)
├── eval_coco_results.json   # COCO mAP 精度评测结果
├── push_single_results.json # 单卡性能摸高结果
├── push_dual_results.json   # 双卡性能摸高结果
├── results_full_benchmark.json  # 综合基准测试结果(CPU/NPU, FP32/FP16, 真实/合成)
├── results_map.json             # COCO mAP 结果详情
├── optimize_results.json        # 深度优化对比结果

参考文档

  • YOLOv10 原始仓库
  • YOLOv10 论文

Citation

@article{wang2024yolov10,
  title={YOLOv10: Real-Time End-to-End Object Detection},
  author={Wang, Ao and Chen, Hui and Liu, Lihao and Chen, Kai and Lin, Zijia and Han, Jungong and Ding, Guiguang},
  journal={arXiv preprint arXiv:2405.14458},
  year={2024}
}