深圳Yolo 视觉
深圳
立即加入
词汇表

ONNX (开放神经网络交换中心)

探索开放神经网络交换 (ONNX) 格式。了解如何将 Ultralytics YOLO26 导出为 ONNX 格式,以实现快速、跨平台部署和硬件优化。

ONNX(开放神经网络交换) 是一种开源格式,旨在表示机器学习模型,允许各种 AI 框架和工具之间的互操作性。它充当深度学习的通用转换器,使开发人员能够在某个框架中(例如 PyTorch、TensorFlow 或 Scikit-learn)构建模型,并将其无缝部署到针对推理优化的另一个环境中。通过定义一组通用算子和标准文件格式,ONNX 消除了对复杂、自定义转换脚本的需求,而这些脚本在历史上是将模型从研究阶段转移到生产阶段所必需的。这种灵活性对于现代 AI 工作流至关重要,其中训练可能在强大的云 GPU 上进行,而部署目标则是边缘设备、手机或网络浏览器等多样化硬件。

ONNX在现代AI中的作用

在快速发展的人工智能领域,研究人员和工程师经常使用不同的工具来完成开发生命周期的不同阶段。数据科学家可能更喜欢 PyTorch 在实验和训练方面的灵活性,而生产工程师则需要 TensorRT 或 OpenVINO 针对部署优化的性能。如果没有标准的交换格式,在这些生态系统之间移动模型将变得困难且容易出错。

ONNX 通过提供计算图的共享定义来弥合这一差距。当模型导出到 ONNX 时,它被序列化为一种与框架无关的格式,该格式捕获了网络结构(层、连接)和参数(权重、偏差)。这使得专门针对硬件加速进行优化的推理引擎(例如 ONNX Runtime)能够在多个平台(包括 Linux、Windows、macOS、Android 和 iOS)上高效执行模型。

使用 ONNX 的主要优势

采用开放神经网络交换格式为AI项目提供了多项战略优势:

  • 框架互操作性:开发者可以在不同框架之间切换,而不会被锁定在单一生态系统中。您可以使用用户友好的Ultralytics Python API训练模型,并将其导出用于C++应用程序或基于Web的JavaScript环境。
  • 硬件优化: 许多硬件制造商提供专门的执行提供程序,与 ONNX 接口。这意味着一个单一的 .onnx 文件可以在NVIDIA GPU、Intel CPU或移动NPU(神经网络处理单元)上使用诸如 OpenVINO 或CoreML之类的工具进行加速。
  • 更快的推理:ONNX Runtime 应用图优化(例如节点融合和常量折叠),可以显著减少推理延迟。这对于自动驾驶汽车或高速生产线等实时应用至关重要。
  • 简化部署:工程团队无需为每个训练框架维护单独的部署流程,而是可以统一使用 ONNX 作为交付格式,从而简化 ModelOps 流程。

实际应用

ONNX 的多功能性使其成为各个行业的重要组成部分。以下是其应用的两个具体示例:

1. 移动设备上的边缘AI

设想一个专为实时作物健康监测设计的移动应用程序。该模型可能在一个强大的云服务器上使用大量的植物图像数据集进行训练。然而,该应用程序需要在农民的智能手机上离线运行。通过将训练好的模型导出为ONNX格式,开发人员可以使用ONNX Runtime Mobile将其集成到移动应用程序中。这使得手机处理器可以在本地运行目标检测,即时识别病虫害,而无需互联网连接。

2. 跨平台网络推理

在电子商务中,一项“虚拟试穿”功能可能使用姿势估计将服装叠加到用户的网络摄像头画面上。该模型的训练可能在python中进行,但部署目标是网络浏览器。使用ONNX,模型可以通过ONNX Runtime Web直接在用户的浏览器中进行转换和运行。这利用了客户端设备的性能(WebGL或WebAssembly)来执行计算机视觉任务,确保了流畅且保护隐私的体验,因为视频数据从未离开用户的计算机。

与相关术语的比较

区分ONNX与其他模型格式和工具有助于理解:

  • 对比 TensorRT:ONNX 是一种 交换格式,而 TensorRT 则是专为 NVIDIA GPU 设计的 推理引擎 和优化器。常见的工作流程是先将模型导出为 ONNX 格式,然后将该 ONNX 文件解析到 TensorRT 中,以在 NVIDIA 硬件上实现最大吞吐量。
  • 对比 TensorFlow SavedModel:SavedModel 是 TensorFlow 的原生序列化格式。虽然在 Google 生态系统中表现稳健,但其通用兼容性不如 ONNX。通常存在将 SavedModel 转换为 ONNX 的工具,以获得更广泛的平台支持。
  • 对比 CoreML:CoreML 是 Apple 用于设备端机器学习的框架。尽管它们有所区别,但模型经常从 PyTorch 转换为 ONNX,然后再从 ONNX 转换为 CoreML(或直接转换),以便在 iPhone 和 iPad 上高效运行。

使用 Ultralytics 导出到 ONNX

Ultralytics 生态系统简化了将YOLO26等最先进模型转换为ONNX格式的过程。导出功能直接内置于库中,自动处理复杂的图遍历和算子映射。

以下示例演示了如何将预训练的YOLO26模型导出为ONNX格式以进行部署:

from ultralytics import YOLO

# Load the YOLO26n model (Nano version recommended for edge deployment)
model = YOLO("yolo26n.pt")

# Export the model to ONNX format
# The 'dynamic' argument enables variable input sizes
path = model.export(format="onnx", dynamic=True)

print(f"Model exported successfully to: {path}")

一旦导出,此 .onnx 文件即可用于 Ultralytics 平台 进行管理,或使用 ONNX Runtime 直接部署到边缘设备,使高性能计算机视觉几乎可在任何环境中实现。

让我们一起共建AI的未来!

开启您的机器学习未来之旅