YOLO Vision 2026:

用于 Ultralytics YOLO 的华为昇腾集成#

Huawei Ascend AI 处理器上部署计算机视觉模型,需要将其编译为由 Ascend AI Core 执行的 .om 离线模型格式。将 Ultralytics YOLO 模型导出到 Ascend 可以让你在广泛用于机器人、工业检测和智能摄像头的 Atlas 开发者板和 OrangePi AIPro 设备上运行快速、低功耗的推理。

什么是 Huawei Ascend?#

Huawei Ascend 是一系列与 CANN(华为异构计算架构 Compute Architecture for Neural Networks)搭配使用的 AI 处理器。CANN 搭载了 ATC(Ascend Tensor Compiler),这是一个主机端工具,可将标准的 ONNX 图转换为针对 Ascend AI Core 的硬件特定 .om 离线模型。

由于 ATC 完全在主机上运行,你可以在常规的 x86-64 或 ARM64 Linux 机器上编译模型,而无需连接任何 Ascend 硬件,然后将生成的 .om 复制到目标设备上进行推理。

在昇腾 NPU 上进行训练#

Ultralytics 支持使用 torch_npu 进行单 NPU 和多 NPU 训练,包括 AMP、验证、检查点、恢复和 AutoBatch。使用 device=npu:0 选择一个 NPU,或使用 device=npu:0,1 选择多个 NPU;分布式训练使用 HCCL。 请先安装兼容的 CANN、PyTorch 和 torch_npu 版本并加载 CANN 环境变量。有关安装和使用示例,请参阅 Ascend NPU 训练部分

Ascend 导出格式#

Ultralytics 导出器首先写入一个中间 ONNX 图,然后调用 ATC 将其编译为你通过 name 参数定位的 SoC。结果是一个自包含的模型目录,其中包含 .om 二进制文件及其 Ultralytics 元数据。

Ascend 模型的主要特点#

  • 专用 AI Core:编译后的模型在 Ascend AI Core 上执行,而不是在主机 CPU 上,这为实时相机管道提供了显著更高的吞吐量。
  • 主机端编译:ATC 不需要连接 NPU,因此导出可以在 CI、容器或笔记本电脑中运行。
  • ONNX 优先:标准的 Ultralytics ONNX 导出可直接馈送到 CANN 工具链中,无需任何专有的中间格式。
  • 静态形状:输入形状在编译时嵌入到 .om 中,消除了运行时的形状协商开销。
  • 多设备定位:通过更改 name,同一个 ONNX 图可以编译为任何受支持的 SoC。

支持的任务#

华为 Ascend 导出支持所有七个 Ultralytics 任务。语义分割和深度估计仅在 YOLO26 中可用,这是唯一带有这些检测头的系列。

任务YOLOv8YOLO11YOLO26
检测
分割
语义
深度
分类
Pose
OBB

支持的设备#

通过 name 传递目标 SoC;ATC 会将其作为 --soc_version 烧录到 .om 中,因此它必须与你部署的目标开发板相匹配。在本地,你可以为 CANN 安装提供内核支持的任何 SoC 进行编译。Ultralytics Platform 支持 Ascend310P1、Ascend310P3、Ascend310B1 和 Ascend310B4 目标设备。

name设备本地导出平台
Ascend310P3Atlas 300I Pro, Atlas 300V Pro
Ascend310P1Atlas 300I
Ascend310B4OrangePi AIPro 20T, Atlas 200I A2
Ascend310B1OrangePi AIPro 8T

导出到 Ascend:转换你的 YOLO 模型#

注意

Ascend 导出需要仅限 Linux 的 CANN 工具包。atc 编译器必须在你的 PATH 中——在导出之前加载 CANN 环境变量脚本,例如 source /usr/local/Ascend/ascend-toolkit/set_env.sh

安装#

安装 Ultralytics,然后从华为单独安装 CANN。

安装
# Install the required package for YOLO
pip install ultralytics

CANN 工具包由华为分发,不会自动安装。请从 Ascend 社区下载页面下载,或使用官方的 ascendai/cann 容器镜像,其中捆绑了 ATC 及其依赖项。

将工具包与你的目标 SoC 相匹配

ATC 只能为已安装算子内核的 SoC 系列进行编译。当请求 Ascend310B4 目标时,仅携带 ascend310p 内核的工具包会因 No supported Ops kernel and engine are found for ... Conv2D 而失败。请为你要部署的设备安装匹配的 Ascend-cann-kernels-<soc> 软件包。

用法#

Ascend 格式支持 ExportPredictValidate 模式。推理和验证在 Ascend 硬件上运行。导出你的模型,然后加载导出的模型以运行推理或验证其准确性。

导出
from ultralytics import YOLO

# Load a YOLO26 model
model = YOLO("yolo26n.pt")

# Export the model to Ascend format for an Atlas 200I / OrangePi AIPro board
model.export(format="ascend", name="Ascend310B4")

# Load the exported Ascend model and run inference on the device
ascend_model = YOLO("yolo26n_ascend_model")
results = ascend_model("https://ultralytics.com/images/bus.jpg")

导出参数#

参数类型默认值描述
formatstr'ascend'导出模型的的目标格式,定义了与 Ascend AI 处理器的兼容性。
namestr'Ascend310B4'作为 --soc_version 传递给 ATC 的目标 SoC,例如 Ascend310P3。你的 CANN 安装具有内核的任何 SoC 都是有效的;请参阅支持的设备。必须与你的部署设备匹配。
imgszinttuple640模型输入的理想图像大小,作为静态形状嵌入到 .om 中。
batchint1编译到离线模型中的静态 batch 大小。
quantizeint16量化精度。Ascend 导出仅支持 FP16,如果未指定,则自动启用 16。取代了已弃用的 half/int8 标志。
opsetint17中间 graph 的 ONNX opset。上限为 17,即 CANN ONNX 解析器接受的最高版本。
simplifyboolTrue使用 onnxslim 简化中间 ONNX 图。
nmsboolFalse向受支持的检测、分割、姿态和 OBB 模型添加非极大值抑制(NMS)。
为什么不可用 FP32?

Ascend AI Core 仅接受用于卷积的 DT_FLOAT16DT_INT8 输入,因此 FP32 离线模型无法在硬件上执行。请求 quantize=32 会引发错误,而不是静默生成无法运行的模型。

有关导出过程的更多详细信息,请访问 Ultralytics 关于导出的文档页面

输出结构#

成功导出后,将创建一个具有以下布局的模型目录:

yolo26n_ascend_model/
├── yolo26n_Ascend310B4.om  # Compiled Ascend offline model (AI Core executable)
└── metadata.yaml           # Model metadata (classes, image size, task, etc.)

.om 文件是 CANN 运行时在设备上加载的已编译离线模型。它的名称带有目标 SoC,以便工件具有自描述性;每个目录保留一个 .om,因为加载程序会挑选它在那里找到的单个模型。metadata.yaml 包含 Ultralytics 推理管道使用的类名、图像大小和其他信息。

部署导出的 YOLO Ascend 模型#

成功将 Ultralytics YOLO 模型导出到 Ascend 格式后,下一步是在 Ascend 硬件上部署它。

运行时安装#

推理需要设备上的 CANN 运行时以及包装了 CANN pyACL 绑定的 ais_bench Python 软件包。从华为 Ascend 工具仓库构建并安装它:

# On the Ascend device, with CANN installed and sourced
source /usr/local/Ascend/ascend-toolkit/set_env.sh

# Build and install the ais_bench inference wheel
git clone https://gitee.com/ascend/tools.git
cd tools/ais-bench_workload/tool/ais_bench
pip3 wheel ./backend -v
pip3 install ./aclruntime-*.whl
pip3 wheel ./ -v
pip3 install ./ais_bench-*.whl

将导出的 yolo26n_ascend_model 目录复制到设备上,然后像使用任何其他 Ultralytics 格式一样运行推理。

推荐工作流程#

  1. 使用 Ultralytics Train 模式训练你的模型,或从预训练的检查点开始。
  2. 在安装了 CANN 的任何 Linux 主机上导出到 Ascend,并传递与你的目标 SoC 匹配的 name
  3. 将导出的模型目录复制到 Ascend 设备。
  4. 使用 CANN 运行时和 ais_bench 进行部署以进行设备端推理。

实际应用场景#

在 Ascend 硬件上运行的 YOLO 模型适用于广泛的嵌入式和工业视觉应用:

  • 工业自动化:生产线上的高速质量检查和缺陷检测。
  • 智能监控:无需中央服务器即可在边缘网关上进行实时多相机目标检测。
  • 机器人:自主移动机器人和协作机械臂的车载感知。
  • 智慧城市:低功耗路侧单元上的交通监控和行人分析。

总结#

在本指南中,你已经了解了如何在 Huawei Ascend NPU 上训练 Ultralytics YOLO,以及如何使用 CANN ATC 编译器将模型导出到 Ascend .om 格式。导出完全在主机上运行,生成一个自包含的模型目录,并通过单个 name 参数定位任何受支持的 Ascend SoC。

有关使用情况的更多详细信息,请访问官方 CANN 文档

此外,如果你想了解有关其他 Ultralytics YOLO 集成的更多信息,请访问我们的集成指南页面以查找大量有用的资源。

常见问题解答#

  • 安装 Ultralytics 和 CANN 工具包,加载 CANN 环境变量以使 atc 在你的 PATH 上,然后使用 Python 中的 model.export(format="ascend", name="Ascend310B4") 或 CLI 中的 yolo export model=yolo26n.pt format=ascend name=Ascend310B4 进行导出。将 name 设置为你部署设备的 SoC。

  • 不会。ATC 编译器完全在主机上运行,因此编译可以在未连接 NPU 的标准 x86-64 或 ARM64 Linux 机器上进行。你只需要 Ascend 硬件来对导出的 .om 运行推理。

  • 你的 CANN 安装不包含你请求的 SoC 的算子内核。每个工具包都捆绑了特定 SoC 家族的内核,因此请安装与你的目标匹配的 Ascend-cann-kernels-<soc> 软件包,或使用为该设备家族构建的容器镜像。

  • Ascend AI Core 卷积只接受 DT_FLOAT16DT_INT8 张量。FP32 离线模型无法在硬件上执行,因此导出器会使用 --precision_mode=force_fp16 进行编译,并拒绝显式的 quantize=32 请求。

  • 你安装的 CANN 工具包为其提供内核的任何 SoC,通过 name 参数选择。有关四个经过验证的目标及其在 Ultralytics Platform 上的可用性,请参阅支持的设备

评论