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

YOLOX-S 昇腾 NPU 适配

模型介绍

YOLOX 是 Megvii (旷视) 推出的高性能目标检测模型,采用 Anchor-Free 的设计。本仓库适配的是 YOLOX-S (Small) 模型,在 COCO 数据集上预训练。

  • 骨干网络: CSPDarkNet (Modified CSPNet + DarkNet)
  • 颈部网络: YOLOPAFPN (PANet Feature Pyramid)
  • 检测头: Decoupled Head (解耦检测头) + SimOTA 标签分配
  • 参数量: 8.97M

原始模型地址

  • https://github.com/Megvii-BaseDetection/YOLOX
  • https://www.modelscope.cn/models/Mr7Cat/yolox/files

任务类型

目标检测 (Object Detection) — 80 类 COCO 物体检测

模型框架

  • 原始框架: PyTorch
  • NPU 推理框架: PyTorch 2.2.0 + torch_npu 2.2.0

输入格式

  • [batch, 3, 640, 640],BGR 图像,填充值 114,保持宽高比(letterbox resize)

输出格式

  • 检测框: [x1, y1, x2, y2] 坐标,已缩放回原图尺寸
  • 类别: COCO 80 类 (0-79)
  • 置信度: obj_conf * cls_conf

依赖环境

  • Python 3.11
  • PyTorch 2.2.0 + torch_npu 2.2.0
  • Ascend CANN 8.5.1
  • Ascend NPU (Ascend910)

NPU 适配说明

YOLOX 基于 PyTorch 框架开发,因此 NPU 适配无需模型转换。

  • NPU 推理: 直接加载 PyTorch 权重,通过 model.to("npu:0") 将模型移至 NPU 设备
  • CPU 推理: 使用 PyTorch 在 CPU 上运行

适配流程

  1. 下载 YOLOX-S PyTorch 预训练权重
  2. 在 CPU 和 NPU 上分别运行推理
  3. 对比检测结果

环境准备

# 设置 YOLOX 源码路径
export PYTHONPATH=/tmp/YOLOX:$PYTHONPATH

# 安装依赖
pip install -r requirements.txt

requirements.txt 内容

numpy>=1.21.0
opencv-python-headless>=4.6.0
torch>=2.0.0
torch_npu>=2.0.0

推理命令

CPU 推理

python3 inference.py --device cpu --image test.jpg

NPU 推理

python3 inference.py --device npu --image test.jpg

CPU vs NPU 精度对比

python3 compare_cpu_npu.py --image test.jpg

推理结果

CPU 推理结果

CPU Inference

NPU 推理结果

NPU Inference

CPU/NPU 精度测试方法

精度对比脚本 compare_cpu_npu.py 执行以下步骤:

  1. CPU 推理: 使用 PyTorch 在 CPU 上运行 YOLOX-S 模型
  2. NPU 推理: 使用 PyTorch + torch_npu 在 NPU 上运行 YOLOX-S 模型
  3. 精度对比: 对 CPU 和 NPU 输出的检测框按类别和 IoU 匹配,计算匹配率、平均 IoU、置信度差异

精度指标

  • 匹配率 (Match Rate): 成功匹配的检测框占 CPU 检测数的比例
  • 检测框 IoU: 匹配检测框的交并比
  • 置信度差异 (Score Difference): 匹配框的置信度差异

CPU/NPU 精度测试结果

Comparison

详细对比数据

物体CPU 置信度NPU 置信度IoU匹配
bicycle0.95450.95461.0000✅
dog0.91310.91311.0000✅
bicycle0.61510.61490.9992✅
truck0.61190.61240.9996✅
potted plant0.43880.43941.0000✅
potted plant0.10290.10271.0000✅
... 共 21 个匹配

性能与精度汇总

指标CPU (PyTorch)NPU (torch_npu)
推理耗时0.6722s0.7244s
检测物体数2121
匹配率—100.00%
平均检测框 IoU—0.9998
平均置信度差异—0.10%

精度分析

  • 所有 21 个检测框均成功匹配,匹配率 100%
  • 平均检测框 IoU 为 0.9998,表明 NPU 与 CPU 的检测框位置几乎完全一致
  • 平均置信度差异仅 0.10%,说明推理结果的数值精度极高
  • YOLOX 基于 PyTorch 框架,在 NPU 上直接运行无需模型转换,因此精度完全保留

性能对比

指标CPUNPU
推理耗时0.6722s0.7244s
推理框架PyTorch (CPU)PyTorch (NPU)

NPU 推理耗时略高于 CPU,主要由于 NPU 模型加载和内存传输开销。对于批量推理场景,NPU 的并行计算优势会更明显。

结论

  • ✅ CPU 推理流程正常运行
  • ✅ NPU 推理流程正常运行
  • ✅ 21/21 检测框完全匹配 (100%)
  • ✅ 平均检测框 IoU 0.9998
  • ✅ 平均置信度差异 0.10%,远小于 1% 精度要求
  • ✅ YOLOX-S 在 NPU 上的推理精度与 CPU 几乎完全一致

推理成功证据

本仓库提供完整的推理脚本,支持 CPU 和 NPU 双平台推理:

# NPU 推理
python3 inference.py --device npu

# CPU 推理
python3 inference.py --device cpu

推理完成后会输出推理结果和耗时,表明模型在 NPU 上推理成功。

模型标签

#+NPU #+目标检测 #+CV #+昇腾 #+YOLOX #+YOLOX-S #+COCO

文件说明

文件说明
inference.pyCPU/NPU 推理脚本
compare_cpu_npu.pyCPU vs NPU 精度对比脚本
requirements.txtPython 依赖
yolox_s_cpu.pthYOLOX-S 预训练权重
test.jpg测试图片 (YOLOX 官方 dog 图片)
cpu_inference.pngCPU 推理截图
npu_inference.pngNPU 推理截图
compare_screenshot.png精度对比截图