Ultralytics YOLO27: 加入候补名单。
获取 YOLO 许可
返回 Ultralytics 术语表

ONNX (Open Neural Network Exchange)

ONNX 是一种开放格式,可将训练好的模型存储为由标准算子组成的计算图,因此在 PyTorch 中训练的模型可以在许多运行时上运行。

ONNX(开放神经网络交换)是一种开放标准文件格式,用于机器学习模型。.onnx 文件以标准算子构成的计算图以及模型权重的形式存储训练好的模型,因此在一种框架(例如 PyTorch)中训练的模型,可以在其他运行时和多种硬件上运行。Facebook 和 Microsoft 于 2017 年 9 月推出 ONNX;自 2019 年 11 月起,ONNX 一直是 Linux 基金会旗下 AI 基金会 LF AI & Data 的毕业项目。ONNX 通常是训练与模型部署之间的交接格式:一个导出的文件可供 ONNX Runtime、TensorRT、OpenVINO 以及许多边缘 AI加速器的编译器使用。

ONNX 文件包含什么#

ONNX 模型使用 Protocol Buffers 序列化,并包含四个部分:

  • 计算图:调用 Conv、MatMul 和 Relu 等算子的节点,通过带名称的张量相互连接。计算图的输入和输出包含数据类型与形状信息,每个维度可以是固定值,也可以是符号值,例如可变的批次大小。
  • 初始值:训练好的权重。Protocol Buffers 将单个文件的大小限制为 2 GB,因此更大的模型会将权重存储在与 .onnx 文件同目录的外部数据文件中。
  • 算子集版本:算子按算子集进行版本管理,运行时必须支持模型导出时使用的算子集。新算子集会添加算子而不更改旧算子,例如在算子集 23 中新增的 Attention 算子。
  • 元数据:生产者名称、模型版本和自定义键值对,例如类别名称。

第二个算子域 ONNX-ML 涵盖树集成模型和线性分类器等传统模型,因此 skl2onnx和 onnxmltools 等转换器可以将 scikit-learn、LightGBM和 XGBoost模型导出为相同格式。Netron等查看器可以逐个显示计算图节点。实际上,ONNX 位于许多训练框架和许多运行时之间:

运行 ONNX 模型#

ONNX Runtime是 Microsoft 的开源推理引擎,可在服务器、桌面设备、手机和浏览器上运行 ONNX 文件。加载模型时,它会优化计算图,例如折叠常量,并将卷积与其后的批归一化融合;随后,它会将计算图的每个部分交给适用于当前硬件的执行提供程序:NVIDIA GPU上的 CUDA 或 TensorRT、Intel 硬件上的 OpenVINO、Windows GPU 上的 DirectML、Apple 设备上的 Core ML、Qualcomm NPU 上的 QNN,以及浏览器中的 WebGPU。Microsoft 的本地推理框架 Windows ML 基于 ONNX Runtime 运行;TensorRT 和 OpenVINO 等其他引擎则会导入 ONNX 文件并将其编译为各自的格式。

Ultralytics YOLO26 可导出为 ONNX,使用 model.export(format="onnx");Ultralytics 的 TensorRT 导出 则会从同一个 ONNX 文件构建引擎。导出的文件无需 PyTorch 即可在 ONNX Runtime 中运行:

import onnxruntime as ort
from ultralytics import YOLO

# 将 YOLO26n 导出为 ONNX,并使用符号批次、高度和宽度维度
model = YOLO("yolo26n.pt")
onnx_path = model.export(format="onnx", dynamic=True)

# 在 ONNX Runtime 中加载计算图;它既不需要 PyTorch,也不需要 Ultralytics
session = ort.InferenceSession(onnx_path, providers=["CPUExecutionProvider"])
for tensor in session.get_inputs() + session.get_outputs():
    print(tensor.name, tensor.shape)

它会打印计算图的输入 images,其中包含符号批次、高度和宽度维度;还会打印原始预测输出 output0。任何 ONNX 运行时都使用这个签名向模型输入数据并读取结果。

  • ONNX Runtime:执行 ONNX 文件的推理引擎。这是一个由 Microsoft 主导的独立项目,人们常把它简称为“ONNX”。
  • TensorRT:NVIDIA 的编译器,可将 ONNX 文件转换为针对某种 GPU 类型和 TensorRT 版本优化的引擎。因此,团队会保留 ONNX 文件作为可移植的源文件,并针对每个目标重新构建引擎。
  • PyTorch 格式:.pt 检查点和 safetensors 文件存储权重,供代码重建模型;TorchScript 和 torch.export 则捕获计算图,供 PyTorch 自己的运行时使用。
  • 其他部署格式:OpenVINO IR、LiteRT .tflite 文件、Core ML 软件包,以及用于量化 LLM 的 GGUF 文件,都面向特定运行时。Apple 的 coremltools 可直接转换 PyTorch 模型,并在 6 版中移除了对 ONNX 输入的支持。

实际应用#

  • 跨平台应用:一个 ONNX 文件即可用于 Linux 服务器、通过 Windows ML 运行的 Windows 应用,以及通过 ONNX Runtime Mobile 运行的 Android 和 iOS 应用。
  • 浏览器推理:ONNX Runtime Web 使用 WebGPU 或 WebAssembly 在用户设备上运行模型,因此 姿态估计等功能所用的摄像头画面不会离开浏览器。
  • 边缘加速器:Hailo、Qualcomm 和 Rockchip 等厂商的 NPU 工具链接受 ONNX 模型作为输入并进行编译,通常还会通过 量化将模型转换为 INT8,以适配其芯片。
  • 生产环境中的传统模型:将梯度提升树和 scikit-learn 流水线转换为 ONNX 后,可通过 ONNX Runtime 在 C#、Java 和 C++ 服务中运行,服务流程中无需 Python 解释器。

探索解决方案

体育领域的计算机视觉

体育领域的计算机视觉

了解 Ultralytics YOLO 如何通过球员和球追踪、表现分析、教练洞察及运动员康复,推动体育视觉技术的发展。
了解详情
航空影像计算机视觉

航空影像计算机视觉

使用 Ultralytics YOLO 将无人机和航空影像转化为农业、水产养殖、保护工作和地理空间分析的实时洞察。
了解详情
航空航天中的计算机视觉

航空航天中的计算机视觉

使用 Ultralytics YOLO 将计算机视觉应用于航空航天领域,包括飞机检查、跑道 FOD 检测、机场地面作业和复合材料缺陷检测。
了解详情
安防领域的计算机视觉

安防领域的计算机视觉

使用 Ultralytics YOLO 模型守护每个场所。视觉 AI 可用于周界监控、威胁检测、车牌识别和工作场所安全。
了解详情
机器人领域的计算机视觉

机器人领域的计算机视觉

使用 Ultralytics YOLO 模型提升智能机器的能力。机器人领域的视觉 AI 可用于自主导航、感知、目标跟踪和实时控制。
了解详情
物流中的计算机视觉

物流中的计算机视觉

借助 Ultralytics YOLO 模型优化物流流程。视觉 AI 可用于包裹检查、分拣、车辆跟踪和仓库安全实时监控。
了解详情
零售中的计算机视觉

零售中的计算机视觉

借助 Ultralytics YOLO 模型重新构想零售。视觉 AI 可用于库存跟踪、货架监控、排队管理和更深入的客户洞察。
了解详情
医疗领域的计算机视觉

医疗领域的计算机视觉

借助 Ultralytics YOLO 模型构建医疗解决方案。医疗领域的视觉 AI 可加快医学影像处理、优化诊断并监测患者。
了解详情
制造业中的计算机视觉

制造业中的计算机视觉

利用 Ultralytics YOLO 模型优化制造流程。视觉 AI 可用于质量控制、缺陷检测、个人防护装备合规检查和装配线自动化。
了解详情
汽车领域的计算机视觉

汽车领域的计算机视觉

利用 Ultralytics YOLO 模型在汽车领域应用计算机视觉。视觉 AI 可提升道路安全、驾驶辅助和车辆自动化水平,让道路更智能。
了解详情
农业中的计算机视觉

农业中的计算机视觉

借助 Ultralytics YOLO 模型,将视觉 AI 引入智慧农业。为作物监测、牲畜追踪和精准农业提供支持,从而提高产量并实现更智能的生产。
了解详情

让我们携手构建 AI 的未来!

开启你的旅程,迎接机器学习的未来