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

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

探索开放神经网络交换格式(ONNX)。了解如何Ultralytics 导出ONNX 快速跨平台部署与硬件优化。

ONNX 开放神经网络交换格式)是一种开源格式,旨在表示机器学习模型,实现不同人工智能框架和工具之间的互操作性。它充当深度学习的通用翻译器,使开发者能够在一个框架(如PyTorch)中构建模型,然后将其转换为另一个框架(如TensorFlow)进行训练或部署。 PyTorch、TensorFlow,并将其无缝部署到另一种针对推理优化的环境中。 通过定义通用运算符集与标准文件格式ONNX 将模型从研究环境迁移至生产环境时所需的复杂定制转换脚本。这种灵活性对现代AI工作流至关重要——模型训练可能在高性能云GPU上进行,而部署目标却涵盖边缘设备、移动终端或网页浏览器等多元硬件。

ONNX 现代人工智能ONNX 作用

在快速演变的人工智能领域,研究人员和工程师通常会为开发生命周期的不同阶段选用不同的工具。数据科学家可能更PyTorch 实验和训练PyTorch 灵活性,而生产工程师则需要TensorRT的优化性能。 TensorRTOpenVINO 部署。 由于缺乏标准交换格式,模型在这些生态系统间的迁移过程既困难又易出错。

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

使用ONNX的主要优势

采用开放神经网络交换格式为人工智能项目带来多重战略优势:

  • 框架互操作性:开发者可在不同框架间自由切换,无需受限于单一生态系统。您可通过Ultralytics Python 训练模型,并将其导出用于C++应用程序或基于Web的JavaScript环境。
  • 硬件优化: 许多硬件制造商提供与ONNX对接的专用执行提供程序。这意味着单个 .onnx 该文件可在NVIDIA 、Intel 移动NPU(神经处理单元)上加速处理,使用工具如 OpenVINO 或CoreML。
  • 更快的推理: ONNX 采用图优化技术——例如节点融合和常量折叠——可显著降低推理延迟。这对自动驾驶汽车或高速生产线等实时应用至关重要。
  • 简化部署:工程团队无需为每个训练框架维护独立的部署管道,可统一采用ONNX 交付格式,从而简化ModelOps流程

实际应用

ONNX 的多功能性ONNX 众多行业的核心工具。以下是其应用的两个具体实例:

1. 移动设备边缘人工智能

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

2. 跨平台网络推理

在电子商务中,"虚拟试穿"功能可能利用姿势估计 ,将服装叠加到用户的网络摄像头画面上。 该模型可能Python训练,但部署目标是网页浏览器。ONNX转换,模型可ONNX Web直接在用户浏览器中运行。此方案利用客户端设备能力(WebGL或WebAssembly)执行计算机视觉任务,确保流畅且保护隐私的体验——视频数据始终不离开用户计算机。

与相关术语的比较

ONNX 模型格式和工具很有帮助:

  • ONNX与TensorRT对比:虽然ONNX 交换格式TensorRT 则是专为NVIDIA 设计的推理引擎优化器。 常见工作流程是ONNX 模型导出ONNX , 再将该ONNX 文件解析至TensorRT , TensorRT NVIDIA 实现最大吞吐量。
  • vs.TensorFlow SavedModel: SavedModel TensorFlow 的原生序列化格式 TensorFlow。虽然Google 表现稳定, 但其通用兼容性ONNX。常有工具可将SavedModel转换ONNX 获得更广泛的 平台支持。
  • vs.CoreML:CoreML 是苹果公司 的设备端机器学习框架。虽然两者有所区别,但模型通常会从PyTorch 转换PyTorch ONNX, 再从ONNX CoreML 或直接转换),以便在 iPhone 和 iPad 上高效运行。

ONNX 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 实现,使高性能计算机视觉技术几乎可在任何环境中应用。

加入Ultralytics 社区

加入人工智能的未来。与全球创新者联系、协作和共同成长

立即加入