YOLO26如何导出ONNX模型?推理格式转换详细步骤

YOLO26如何导出ONNX模型?推理格式转换详细步骤

在深度学习部署过程中,模型格式的兼容性至关重要。ONNX(Open Neural Network Exchange)作为一种开放的模型交换格式,能够实现跨框架、跨平台的模型部署,广泛应用于边缘设备、服务器推理引擎(如ONNX Runtime、TensorRT)等场景。

本文将基于最新YOLO26 官方版训练与推理镜像环境,详细介绍如何将训练好的 YOLO26 模型导出为 ONNX 格式,并完成推理验证,帮助开发者快速实现模型格式转换与工程化落地。


1. 镜像环境说明

本镜像基于YOLO26 官方代码库构建,预装了完整的深度学习开发环境,集成了训练、推理及评估所需的所有依赖,开箱即用。

  • 核心框架:pytorch == 1.10.0
  • CUDA版本:12.1
  • Python版本:3.9.5
  • 主要依赖:torchvision==0.11.0,torchaudio==0.10.0,cudatoolkit=11.3,numpy,opencv-python,pandas,matplotlib,tqdm,seaborn等。

该环境已预置ultralytics库及其相关工具链,支持直接调用model.export()方法进行模型导出,无需额外安装复杂依赖。


2. 导出ONNX模型的完整流程

### 2.1 准备工作:激活环境与进入项目目录

首先,启动镜像后需激活 Conda 环境并切换至项目目录:

conda activate yolo cd /root/workspace/ultralytics-8.4.2

确保当前路径下存在已训练好的权重文件(如yolo26n.pt),或使用镜像内置的预下载权重。


### 2.2 使用Ultralytics API导出ONNX模型

YOLO26 提供了简洁的.export()接口,可一键完成 PyTorch 到 ONNX 的转换。

✅ 示例代码:export_onnx.py

创建一个新脚本export_onnx.py,内容如下:

# -*- coding: utf-8 -*- """ @File :export_onnx.py @Desc :将 YOLO26 模型导出为 ONNX 格式 """ from ultralytics import YOLO if __name__ == '__main__': # 加载模型(可以是 .pt 或 .yaml) model = YOLO(model='yolo26n.pt') # 支持 nano/small/medium/large 等变体 # 导出为 ONNX 格式 success = model.export( format='onnx', # 输出格式 dynamic=True, # 启用动态输入尺寸(推荐) simplify=True, # 简化计算图(优化推理性能) opset=12, # ONNX 算子集版本(建议 11~13) imgsz=640, # 输入图像大小(H=W) device='cuda' # 使用 GPU 加速导出(若可用) ) if success: print("✅ ONNX 模型导出成功!") else: print("❌ 模型导出失败,请检查日志。")
🔍 参数详解:
参数说明
format='onnx'指定输出格式为 ONNX
dynamic=True允许输入尺寸动态变化(batch_size、height、width 可变)
simplify=True调用onnx-simplifier工具简化模型结构,减少冗余节点
opset=12ONNX 算子集版本,兼容大多数推理引擎
imgsz=640指定输入分辨率,默认正方形输入

⚠️ 注意:若未安装onnxonnxsim,请先执行:

pip install onnx onnxsim

运行导出命令:

python export_onnx.py

成功后将在当前目录生成yolo26n.onnx文件。


### 2.3 验证ONNX模型有效性

导出完成后,应验证 ONNX 模型是否结构正确、可加载、可推理。

✅ 示例代码:validate_onnx.py
# -*- coding: utf-8 -*- """ @File :validate_onnx.py @Desc :验证 ONNX 模型是否可正常加载和推理 """ import cv2 import numpy as np import onnxruntime as ort # 加载 ONNX 模型 session = ort.InferenceSession('yolo26n.onnx', providers=['CUDAExecutionProvider']) # 获取输入信息 input_name = session.get_inputs()[0].name input_shape = session.get_inputs()[0].shape print(f"Input Name: {input_name}") print(f"Input Shape: {input_shape}") # 读取测试图像 image = cv2.imread('./ultralytics/assets/zidane.jpg') ori_h, ori_w = image.shape[:2] # 图像预处理(resize + normalize + transpose) input_img = cv2.resize(image, (640, 640)) input_img = input_img.astype(np.float32) / 255.0 input_img = input_img.transpose(2, 0, 1) # HWC -> CHW input_img = np.expand_dims(input_img, axis=0) # NCHW # 执行推理 outputs = session.run(None, {input_name: input_img}) print(f"推理完成,输出数量: {len(outputs)}") # 查看第一个输出(通常是检测框) output = outputs[0] print(f"输出形状: {output.shape}") # 通常为 [1, num_boxes, 84](分类+坐标)
🧪 输出示例:
Input Name: images Input Shape: [None, 3, 640, 640] 推理完成,输出数量: 1 输出形状: (1, 8400, 84)

✅ 若能成功打印输出形状,则说明 ONNX 模型有效。


3. ONNX模型优化技巧

虽然 Ultralytics 默认导出的 ONNX 模型已具备基本可用性,但为进一步提升推理效率,建议进行以下优化。

### 3.1 使用 onnxsim 进行模型简化

即使设置了simplify=True,有时仍需手动运行简化工具以彻底清除冗余节点。

pip install onnxsim python -m onnxsim yolo26n.onnx yolo26n-sim.onnx

该命令会生成更轻量、结构更清晰的yolo26n-sim.onnx,适用于 TensorRT 或 OpenVINO 等后端。


### 3.2 修改输入/输出节点名称(可选)

某些推理框架对输入名有特定要求(如必须为"input")。可通过修改 ONNX 图结构实现重命名。

示例代码片段(使用 onnx 库):
import onnx # 加载模型 model = onnx.load('yolo26n.onnx') # 修改输入名 model.graph.input[0].name = 'input' # 保存修改后的模型 onnx.save(model, 'yolo26n-renamed.onnx')

💡 此操作常用于适配 TensorRT 的严格命名规则。


### 3.3 动态维度设置说明

dynamic=True时,ONNX 模型支持灵活的输入尺寸。其输入定义如下:

input: float[batch_size, 3, height, width]

可在推理时指定任意heightwidth(需为32倍数),例如(1, 3, 320, 320)(4, 3, 736, 1280)

若需固定输入尺寸(如嵌入式部署),可在导出时设置dynamic=False


4. 常见问题与解决方案

### 4.1 导出失败:缺少 onnx 或 onnxsim 包

错误提示

ModuleNotFoundError: No module named 'onnx'

解决方法

pip install onnx onnxsim

### 4.2 推理报错:Unsupported ONNX operator GatherND

原因分析: 部分旧版本 ONNX Runtime 不支持 YOLO 中使用的高级索引操作(如GatherND)。

解决方案

  • 升级 ONNX Runtime 至最新版本:
    pip install --upgrade onnxruntime-gpu
  • 或尝试降低opset版本(如设为 11)再导出。

### 4.3 输出节点无法解析(shape mismatch)

现象: 输出 shape 为[1, 8400, 84],但不知如何解码为边界框。

说明: 这是 YOLOv8/v26 的标准输出格式:

  • 8400是 anchor 数量(特征图总点数)
  • 84= 4(bbox)+ 80(COCO类别)

解码建议: 使用非极大值抑制(NMS)后处理,参考 Ultralytics 官方postprocess()实现逻辑,或借助onnxruntime-yolov8工具包自动解析。


### 4.4 GPU 导出失败:CUDA out of memory

解决策略

  • 减小imgsz(如改为 320)
  • 设置device='cpu'在 CPU 上导出
  • 关闭simplify后再单独运行简化步骤

5. 总结

5. 总结

本文围绕YOLO26 如何导出 ONNX 模型展开,结合官方训练与推理镜像环境,系统地介绍了从模型导出、格式验证到性能优化的全流程:

  1. 一键导出:利用model.export(format='onnx')接口,轻松完成格式转换;
  2. 动态输入支持:通过dynamic=True实现多尺寸输入适配;
  3. 模型简化:启用simplify=True或手动调用onnxsim提升推理效率;
  4. 推理验证:使用 ONNX Runtime 成功加载并运行推理,确认模型完整性;
  5. 常见问题应对:涵盖依赖缺失、算子不兼容、内存溢出等典型场景。

最终生成的 ONNX 模型可用于部署至 ONNX Runtime、TensorRT、OpenVINO、NCNN 等主流推理引擎,打通从训练到生产的“最后一公里”。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1185870.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OTA bootloader 嵌入式 上位机 升级解决方案, 安全加密,稳定升级 MIIOT

OTA bootloader 嵌入式 上位机 升级解决方案, 安全加密,稳定升级 MIIOT ,米家OTA 经过可靠性测试搞过嵌入式的人都懂,OTA升级要是翻车,那真是半夜三点爬起来修设备的节奏。今天就聊聊怎么让设备在空中升级的时候既稳如…

STM32 IAP固件升级程序源代码。 STM32通过串口,接 收上位机、APP、或者服务器来...

STM32 IAP固件升级程序源代码。 STM32通过串口,接 收上位机、APP、或者服务器来的数据,更新设备的固件,也就是说上位机端(需用户自己编写)可以通过wifi转串口,网口转串口,GPRS转串口模块等&…

MGeo地址相似度识别性能报告:长尾地址匹配能力评估

MGeo地址相似度识别性能报告:长尾地址匹配能力评估 1. 技术背景与评估目标 在地理信息处理、位置服务和数据融合等应用场景中,地址相似度识别是实现实体对齐的核心技术之一。由于中文地址存在表述多样、结构不规范、别名广泛等特点,尤其是“…

麦橘超然开源协议分析:Apache 2.0意味着什么?

麦橘超然开源协议分析:Apache 2.0意味着什么? 1. 引言 1.1 技术背景与项目定位 随着生成式人工智能的快速发展,图像生成模型逐渐从研究实验室走向实际应用。在这一趋势下,麦橘超然(MajicFLUX) 作为基于 …

UNet人像卡通化可解释性研究:注意力机制可视化分析尝试

UNet人像卡通化可解释性研究:注意力机制可视化分析尝试 1. 研究背景与问题提出 近年来,基于深度学习的人像风格迁移技术取得了显著进展,其中UNet架构因其强大的编码-解码能力,在图像到图像转换任务中广泛应用。阿里达摩院ModelS…

轻松搞定长文本标准化|基于FST ITN-ZH镜像的高效转换方案

轻松搞定长文本标准化|基于FST ITN-ZH镜像的高效转换方案 在自然语言处理的实际应用中,中文逆文本标准化(Inverse Text Normalization, ITN)是一个常被忽视但至关重要的环节。语音识别系统输出的往往是口语化、非结构化的表达&am…

Qwen2.5-7B部署省成本:CPU/NPU/GPU模式切换实战

Qwen2.5-7B部署省成本:CPU/NPU/GPU模式切换实战 1. 引言 随着大模型在企业级应用和边缘计算场景中的普及,如何在不同硬件条件下高效部署中等体量模型成为工程落地的关键挑战。通义千问 2.5-7B-Instruct 作为阿里于 2024 年 9 月发布的 70 亿参数指令微…

IQuest-Coder-V1显存溢出?梯度检查点部署解决方案

IQuest-Coder-V1显存溢出?梯度检查点部署解决方案 1. 背景与问题引入 1.1 IQuest-Coder-V1-40B-Instruct 模型特性概述 IQuest-Coder-V1-40B-Instruct 是面向软件工程和竞技编程的新一代代码大语言模型,属于 IQuest-Coder-V1 系列中的指令优化变体。该…

汽车ESP系统仿真建模,基于carsim与simulink联合仿真做的联合仿真,采用单侧双轮制...

汽车ESP系统仿真建模,基于carsim与simulink联合仿真做的联合仿真,采用单侧双轮制动的控制方法。 有完整的模型和说明 汽车电子稳定程序(ESP)就像车辆的"防上头助手",关键时刻一把拽住快要失控的车身。但要让…

转盘程序 使用松下XH PLC编程 用了威纶通TK6071IQ屏,PLC用的是松下XH的

转盘程序 使用松下XH PLC编程 用了威纶通TK6071IQ屏,PLC用的是松下XH的,包括HMI跟PLC程序及视屏教成,有些同行有机会接触到转盘的工程,但不知道怎么入手。 这里说到XH两个运动控制指令,F381 JOGST指令跟F382 ORGST原点…

国标27930协议头部特征码

充电桩上位机,可以自己全自动分析报文,支持快,慢充!充电桩上位机这玩意儿最近被我们玩出花了——真不是吹牛,这货现在能自己把报文嚼碎了分析。我昨天刚拿它测了个直流快充桩,插枪瞬间直接给我刷出来十六进…

智能客服系统搭建:bert-base-chinese实战指南

智能客服系统搭建:bert-base-chinese实战指南 1. 引言 随着企业对自动化服务需求的不断增长,智能客服系统已成为提升客户体验、降低人力成本的核心工具。在众多自然语言处理(NLP)技术中,基于预训练模型的语义理解能力…

阿里通义Z-Image-Turbo广告设计实战:社交媒体配图高效生成流程

阿里通义Z-Image-Turbo广告设计实战:社交媒体配图高效生成流程 1. 引言 1.1 社交媒体视觉内容的效率挑战 在当前数字营销环境中,社交媒体平台对视觉内容的需求呈指数级增长。品牌运营、内容创作者和广告团队需要频繁产出高质量、风格统一且符合场景调…

FSMN VAD输出JSON时间戳,方便对接后续处理流程

FSMN VAD输出JSON时间戳,方便对接后续处理流程 1. 引言:语音活动检测在实际工程中的核心价值 在语音识别、会议记录、电话质检等智能音频处理系统中,语音活动检测(Voice Activity Detection, VAD) 是不可或缺的前置环…

uds31服务与ECU诊断会话切换协同机制分析

uds31服务与ECU诊断会话切换协同机制深度解析车载电子系统的复杂性正在以惊人的速度增长。一辆高端智能汽车中,ECU(电子控制单元)的数量已突破上百个,遍布动力、底盘、车身和信息娱乐系统。面对如此庞大的分布式架构,如…

YOLO-v8.3快速上手:5分钟实现图像中物体检测的代码实例

YOLO-v8.3快速上手:5分钟实现图像中物体检测的代码实例 YOLO-v8.3 是 Ultralytics 公司在 YOLO 系列持续迭代中的最新优化版本之一,基于 YOLOv8 架构进一步提升了推理速度与检测精度的平衡。该版本在保持轻量化的同时增强了对小目标的识别能力&#xff…

DeepSeek-R1-Distill-Qwen-1.5B数学能力测试:复杂公式推导实战案例

DeepSeek-R1-Distill-Qwen-1.5B数学能力测试:复杂公式推导实战案例 1. 引言 1.1 技术背景与挑战 在当前大模型快速发展的背景下,数学推理能力已成为衡量语言模型智能水平的重要指标之一。传统语言模型在处理数学问题时往往依赖模式匹配和表面语法理解…

TensorFlow-v2.9游戏AI:AlphaZero简化版实现

TensorFlow-v2.9游戏AI:AlphaZero简化版实现 1. 技术背景与问题提出 近年来,深度强化学习在游戏AI领域取得了突破性进展。以DeepMind提出的AlphaZero为代表,该算法通过自我对弈和蒙特卡洛树搜索(MCTS)结合深度神经网…

11 套 QT_c++ 和 C# 工业上位机 MES 编程实战分享

11套QT_c和C#工业上位机MES编程全部都是现场应用。 1,C#多工位力位移监控! 完整应用,vs2015开发,用到dx控件,我会赠送。 这是一个工业应用,下位机为plc。 设备启动后上下位机通信完成全自动动作。 tcpip扫码&#xff…

Wan2.2一文详解:从模型加载到视频输出的每一步操作细节

Wan2.2一文详解:从模型加载到视频输出的每一步操作细节 1. 技术背景与核心价值 随着AIGC技术的快速发展,文本到视频(Text-to-Video)生成已成为内容创作领域的重要方向。传统视频制作流程复杂、成本高昂,而自动化视频…