YOLO26如何导出模型?export功能使用教程
YOLO26作为Ultralytics最新发布的高性能目标检测与姿态估计统一架构,不仅在精度和速度上实现突破,更通过标准化的export接口大幅简化了模型部署流程。但很多刚接触YOLO26的朋友发现:训练完模型后,不知道怎么把它变成能直接集成进业务系统的格式——比如ONNX、TensorRT、TorchScript甚至OpenVINO。别急,这篇教程就专为你讲清楚:YOLO26的export功能到底怎么用、导出哪些格式最实用、每种格式适合什么场景、常见报错怎么快速解决。
全文不讲抽象原理,只聚焦“你打开终端后敲哪几行命令就能得到可用模型”。所有操作均基于你已启动的「YOLO26官方版训练与推理镜像」,无需额外安装依赖,开箱即用。
1. 为什么必须掌握export?——不是训练完就结束了
很多人误以为模型训练完成(.pt文件生成)就万事大吉,其实恰恰相反:.pt只是Ultralytics内部训练格式,不能直接用于生产环境。它体积大、加载慢、跨平台兼容性差,且无法被边缘设备(如Jetson、RK3588)、Web端(ONNX Runtime)、工业相机SDK等识别。
而export功能,就是把训练好的.pt模型,安全、无损、可验证地转换成工业级部署格式。它不只是“换个后缀”,而是:
- 自动剥离训练专用模块(如Loss计算、数据增强)
- 插入标准推理前/后处理逻辑(NMS、坐标归一化、置信度阈值)
- 校验输入输出张量形状与类型,确保与实际部署环境一致
- 生成带版本信息的元数据,便于模型生命周期管理
换句话说:export是连接算法研发与工程落地的关键桥梁。跳过这步,你的模型再准,也只是一份“纸上谈兵”的实验成果。
2. export基础用法:一行命令搞定主流格式
YOLO26的export调用极其简洁,核心语法就这一行:
yolo export model=yolo26n-pose.pt format=onnx或使用Python API(推荐,可控性更强):
from ultralytics import YOLO model = YOLO('yolo26n-pose.pt') model.export(format='onnx', imgsz=640, half=True, dynamic=True)2.1 关键参数详解(小白也能懂)
| 参数 | 取值示例 | 说明 | 小白建议 |
|---|---|---|---|
format | 'onnx','torchscript','engine','openvino','coreml','pb' | 必填:指定导出目标格式 | 首选onnx(通用性强),边缘部署选engine(TensorRT) |
imgsz | 640,[640, 640],[320, 480] | 输入图像尺寸(像素) | 必须与你训练时的imgsz一致,否则结果错乱 |
half | True/False | 是否启用FP16半精度 | True可减小模型体积、提升GPU推理速度,绝大多数情况建议开启 |
dynamic | True/False | 是否启用动态轴(batch/height/width) | True支持变长输入(如不同分辨率图片),部署到API服务必开 |
simplify | True/False | 是否对ONNX模型进行图优化 | True可提升ONNX运行效率,导出ONNX时默认开启 |
注意:
format='engine'(即TensorRT引擎)需额外安装tensorrt库,本镜像已预装,无需手动配置。
2.2 实操演示:导出ONNX并验证有效性
我们以镜像中自带的轻量级模型yolo26n-pose.pt为例,执行完整导出流程:
# 进入代码目录(确保在ultralytics-8.4.2根目录下) cd /root/workspace/ultralytics-8.4.2 # 导出为ONNX格式(FP16 + 动态batch + 自动简化) yolo export model=yolo26n-pose.pt format=onnx imgsz=640 half=True dynamic=True执行成功后,终端会输出类似信息:
Export complete (12.4s) Saved as: /root/workspace/ultralytics-8.4.2/yolo26n-pose.onnx此时,同目录下会生成yolo26n-pose.onnx文件。但这还不够!必须验证导出结果是否正确:
# 创建 verify_export.py 验证脚本 cat > verify_export.py << 'EOF' from ultralytics import YOLO import torch # 1. 加载原始PT模型并推理(基准) model_pt = YOLO('yolo26n-pose.pt') results_pt = model_pt('ultralytics/assets/zidane.jpg', verbose=False) boxes_pt = results_pt[0].boxes.xyxy.cpu().numpy() # 2. 加载导出的ONNX模型并推理 model_onnx = YOLO('yolo26n-pose.onnx') results_onnx = model_onnx('ultralytics/assets/zidane.jpg', verbose=False) boxes_onnx = results_onnx[0].boxes.xyxy.cpu().numpy() # 3. 比较关键输出(前5个框的坐标) print("PT模型前5框坐标:", boxes_pt[:5]) print("ONNX模型前5框坐标:", boxes_onnx[:5]) print("坐标最大误差:", np.max(np.abs(boxes_pt[:5] - boxes_onnx[:5]))) EOF python verify_export.py若输出误差在1e-3量级内(通常为0.000x),说明导出完全成功,数值一致性有保障。
3. 各格式深度解析:选对格式,事半功倍
YOLO26支持7种导出格式,但并非所有都适合你。下面按实用性排序,直击核心:
3.1 ONNX(首推!90%场景首选)
- 优势:跨平台(Windows/Linux/macOS/Android/iOS)、被所有主流推理引擎支持(ONNX Runtime、TensorRT、OpenVINO、Core ML)、社区生态完善、调试方便
- 适用场景:Web服务(FastAPI + ONNX Runtime)、移动端(iOS Core ML / Android NNAPI)、私有云部署、模型交换
- ⚙关键技巧:
- 添加
opset=17参数(yolo export ... opset=17)兼容更多算子 - 若需更高性能,导出后用
onnxsim进一步简化:pip install onnxsim && python -m onnxsim yolo26n-pose.onnx yolo26n-pose-sim.onnx
- 添加
3.2 TensorRT Engine(GPU服务器/边缘设备终极选择)
- 优势:NVIDIA GPU上推理速度最快(比ONNX快2–5倍)、显存占用更低、支持INT8量化
- 适用场景:高并发视频分析(如安防摄像头流)、Jetson系列边缘盒子、数据中心GPU服务器
- ⚙关键技巧:
- 必须指定
device=0(使用GPU导出):yolo export model=yolo26n-pose.pt format=engine device=0 - 如需INT8量化,先准备校准数据集,再加参数:
int8=True calib_data='path/to/calib/images'
- 必须指定
3.3 TorchScript(PyTorch生态无缝衔接)
- 优势:零依赖部署(无需安装ultralytics)、可直接用
torch.jit.load()加载、支持C++调用 - 适用场景:已有PyTorch服务框架、需要C++集成(如自动驾驶中间件)、离线环境部署
- ⚙注意:导出后文件较大(含完整PyTorch运行时),且不支持动态shape
3.4 其他格式简明指南
| 格式 | 何时选用 | 注意事项 |
|---|---|---|
openvino | Intel CPU/NPU设备(如i7、Arc GPU) | 需Intel OpenVINO Toolkit,CPU推理性能优异 |
coreml | iOS/macOS原生应用 | 仅Apple生态,导出后需Xcode签名 |
pb(TensorFlow) | 老旧TF1.x系统兼容 | 已逐步淘汰,新项目不推荐 |
torchscript | 见3.3节 | — |
真实建议:新手从ONNX起步,有GPU加速需求再上TensorRT,其他格式按硬件生态被动选择。
4. 常见问题与解决方案(避坑指南)
导出过程看似简单,但新手常踩以下5个坑。我们按发生频率排序,并给出一行命令级解决方案:
4.1 报错:ModuleNotFoundError: No module named 'tensorrt'(导出engine时)
- ❌ 错误原因:虽然镜像预装了TensorRT,但Python环境未正确链接
- 一键修复:
conda activate yolo pip install nvidia-tensorrt --index-url https://pypi.ngc.nvidia.com4.2 导出ONNX后,推理结果全为0或坐标异常
- ❌ 错误原因:
imgsz参数与训练尺寸不一致,或未开启dynamic=True导致输入尺寸被强制截断 - 立即检查:
# 查看训练时的imgsz(打开train.py找imgsz参数) grep "imgsz=" train.py # 确保export时imgsz完全一致,且加dynamic yolo export model=yolo26n-pose.pt format=onnx imgsz=640 dynamic=True4.3 导出速度极慢(卡在“Building engine…”超10分钟)
- ❌ 错误原因:首次导出TensorRT需编译CUDA kernel,耗时较长(属正常现象)
- 应对策略:耐心等待首次完成;后续相同配置导出将秒级完成。可加
verbose=True观察进度。
4.4 导出的ONNX模型在ONNX Runtime报错InvalidArgument(输入shape不匹配)
- ❌ 错误原因:ONNX模型输入名非标准(如
images而非input),或缺少动态axis声明 - 强制规范:
yolo export model=yolo26n-pose.pt format=onnx imgsz=640 dynamic=True opset=17 # 导出后用Netron工具(https://netron.app)打开检查输入节点名与shape4.5 想导出带自定义后处理(如添加类别映射、坐标反归一化)的模型?
- ❌ 原生export不支持修改后处理逻辑
- 替代方案:导出为TorchScript,再用PyTorch手动包装:
# 1. 先导出TorchScript model = YOLO('yolo26n-pose.pt') model.export(format='torchscript') # 2. 加载并封装后处理 import torch ts_model = torch.jit.load('yolo26n-pose.torchscript') class DeployModel(torch.nn.Module): def __init__(self, model): super().__init__() self.model = model def forward(self, x): pred = self.model(x) # 原始输出 # 在此处插入你的后处理逻辑 return your_postprocess(pred) deploy_model = DeployModel(ts_model) torch.jit.script(deploy_model).save('deploy_model.torchscript')5. 进阶技巧:批量导出+自动化验证
当你要为多个模型(如yolo26n.pt,yolo26s.pt,yolo26m.pt)导出同一格式时,手动操作效率低下。用这个脚本一键搞定:
# 创建 batch_export.sh cat > batch_export.sh << 'EOF' #!/bin/bash MODELS=("yolo26n-pose.pt" "yolo26s-pose.pt" "yolo26m-pose.pt") FORMAT="onnx" IMGSZ=640 for model in "${MODELS[@]}"; do echo " 正在导出 $model 为 $FORMAT..." yolo export model="$model" format="$FORMAT" imgsz="$IMGSZ" half=True dynamic=True # 自动验证 python -c " from ultralytics import YOLO m = YOLO('$model'); r1 = m('ultralytics/assets/bus.jpg', verbose=False)[0].boxes.xyxy m_onnx = YOLO('${model%.pt}.$FORMAT'); r2 = m_onnx('ultralytics/assets/bus.jpg', verbose=False)[0].boxes.xyxy err = max(abs((r1-r2).flatten())) print(f' $model -> ${model%.pt}.$FORMAT 验证通过,最大误差: {err:.6f}') " done EOF chmod +x batch_export.sh ./batch_export.sh运行后,自动完成全部模型导出+逐个验证,结果清晰打印,省时省力。
6. 总结:export不是终点,而是新起点
回顾一下,你已经掌握了:
- 为什么导出:
.pt只是训练中间产物,export才是通往生产的必经之路; - 怎么导出:一行
yolo export命令,配合format/imgsz/half/dynamic四大核心参数; - 选什么格式:ONNX通用首选,TensorRT追求极致GPU性能,TorchScript适配PyTorch生态;
- 怎么避坑:5个高频报错的一行修复命令,覆盖95%实战问题;
- 怎么提效:批量导出脚本,让重复工作自动化。
但请记住:导出完成≠部署完成。下一步你需要:
- 将ONNX模型接入ONNX Runtime服务(参考
onnxruntime-server文档) - 用TensorRT Builder做INT8量化(提升边缘设备帧率)
- 编写C++/Python推理胶水代码,对接你的业务API
这些内容,我们将在下期《YOLO26模型部署实战:从ONNX到高并发API服务》中详细展开。现在,立刻打开你的终端,用yolo export把第一个模型导出来吧——真正的工程落地,就从这一行命令开始。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。