(本文为我个人学习记录)

YOLO26 是 Ultralytics 公司在 2026 年 1 月 发布的新一代实时目标检测模型,核心论文早在 2025 年 9 月就已经公开。

YOLO26 主打三个核心亮点:边缘设备优先全端到端无 NMSCPU 速度大幅提升,不管是部署在小设备,还是日常训练推理,都比前代更顺手。

一、快速上手

我之前写的PyTorch 快速入门(2026)中的第一章详细介绍了环境配置,在此基础上只需要安装Ultralytics库就行。

正常情况下,直接用 conda 安装即可:

pip install ultralytics

Ultralytics 提供了非常好用的 CLI 命令行界面,不用写 Python 代码,不用复杂配置,终端输一条命令就能训练、推理、验证。

举个最常用例子:训练检测模型,10 轮,初始学习率 0.01

yolo train data=coco8.yaml model=yolo26n.pt epochs=10 lr0=0.01

如果想深度修改、二次开发,也可以把整个ultralytics项目拉到本地。集成到 Python 项目中。

# 导入Ultralytics YOLO库
from ultralytics import YOLO

# 加载预训练的YOLO26n模型
model = YOLO("yolo26n.pt")

# 在COCO8数据集上训练模型,训练100轮
train_results = model.train(
    data="coco8.yaml",  # 数据集配置文件路径
    epochs=100,         # 训练的轮数
    imgsz=640,          # 训练使用的图像尺寸
    device="cpu",       # 运行设备(例如:'cpu'、显卡编号0、多卡[0,1,2,3])
)

# 在验证集上评估模型性能
metrics = model.val()

# 对单张图像进行目标检测
results = model("path/to/image.jpg")  # 对图像进行预测
results[0].show()                     # 显示检测结果

# 将模型导出为ONNX格式,用于部署
path = model.export(format="onnx")  # 返回导出模型的保存路径

二、模型导出

Ultralytics YOLO26 中的导出模式提供了多种选项,可将您训练好的模型导出为不同格式,使其能够在各种平台和设备上部署。

from ultralytics import YOLO

# 加载模型
model = YOLO("yolo26n.pt")  # 加载官方预训练模型
model = YOLO("path/to/best.pt")  # 加载自定义训练好的模型

# 导出模型
model.export(format="onnx")

下表详细说明了将 YOLO 模型导出为不同格式的配置和选项。这些设置对于优化导出模型的性能、大小以及在各种平台和环境中的兼容性至关重要。正确的配置可确保模型已准备好部署在预期应用中,并具有最佳效率。

参数 类型 默认值 描述
format str 'torchscript' 导出模型的目标格式,如 onnxtorchscriptengine(TensorRT)等,不同格式适配不同部署环境
imgsz int / tuple 640 模型输入图像尺寸,单值表示正方形(如 640×640),元组格式为 (高度, 宽度)
keras bool False 启用 Keras 格式导出,对应 TensorFlow SavedModel,兼容 TensorFlow 服务与 API
optimize bool False 导出 TorchScript 时开启移动端优化,可减小模型体积、提升推理速度;不兼容 NCNN 与 CUDA 设备
half bool False 启用 FP16 半精度量化,缩小模型并加速推理;不兼容 INT8 量化与纯 CPU 导出,仅支持部分格式(如 ONNX)
int8 bool False 启用 INT8 量化,进一步压缩模型、加速推理,多用于边缘设备;搭配 TensorRT 时执行训练后量化(PTQ)
dynamic bool False 让 TorchScript/ONNX/OpenVINO/TensorRT/CoreML 支持动态输入尺寸,适配不同大小图像;搭配 TensorRT+INT8 时自动设为 True
simplify bool True 用 onnxslim 简化 ONNX 模型图,提升推理性能与引擎兼容性
opset int None 指定 ONNX opset 版本,适配不同解析器与运行时;未设置则使用最新支持版本
workspace float / None None 设置 TensorRT 优化最大工作空间(单位:GiB),平衡内存与性能;设为 None 由 TensorRT 自动分配(最高设备上限)
nms bool False 为支持的模型添加非极大值抑制(NMS),提升后处理效率;不适用于端到端模型
batch int 1 设定模型推理批量大小,即预测模式下并发处理的最大图像数;Edge TPU 导出时自动设为 1
device str None 指定导出设备:GPU(0)、CPU(cpu)、Apple 芯片(mps)、华为昇腾 NPU(npu/npu:0)、Jetson DLA(dla:0/dla:1);TensorRT 自动使用 GPU
data str 'coco8.yaml' 数据集配置文件路径,对 INT8 量化校准至关重要;开启 INT8 未指定时,默认用 coco8.yaml 校准
fraction float 1.0 指定 INT8 量化校准所用数据集比例,可使用子集校准,节省资源;开启 INT8 未指定时,使用完整数据集
end2end bool None 覆盖 YOLO26/YOLOv10 等无 NMS 模型的端到端模式;设为 False 可导出兼容传统 NMS 后处理的模型

YOLO26 支持多种模型导出格式,具体可参考下表。你只需在导出时指定 format 参数,例如 format='onnx'format='engine'。导出完成后,可直接使用模型进行预测或验证,例如执行 yolo predict model=yolo26n.onnx,命令行也会自动给出使用示例。此外

格式 format 参数 模型文件 元数据 支持参数
PyTorch - yolo26n.pt -
TorchScript torchscript yolo26n.torchscript imgsz, half, dynamic, optimize, nms, batch, device
ONNX onnx yolo26n.onnx imgsz, half, dynamic, simplify, opset, nms, batch, device
OpenVINO openvino yolo26n_openvino_model/ imgsz, half, dynamic, int8, nms, batch, data, fraction, device
TensorRT engine yolo26n.engine imgsz, half, dynamic, simplify, workspace, int8, nms, batch, data, fraction, device
CoreML coreml yolo26n.mlpackage imgsz, dynamic, half, int8, nms, batch, device
TF SavedModel saved_model yolo26n_saved_model/ imgsz, keras, int8, nms, batch, data, fraction, device
TF GraphDef pb yolo26n.pb imgsz, batch, device
TF Lite tflite yolo26n.tflite imgsz, half, int8, nms, batch, data, fraction, device
TF Edge TPU edgetpu yolo26n_edgetpu.tflite imgsz, int8, data, fraction, device
TF.js tfjs yolo26n_web_model/ imgsz, half, int8, nms, batch, data, fraction, device
PaddlePaddle paddle yolo26n_paddle_model/ imgsz, batch, device
MNN mnn yolo26n.mnn imgsz, batch, int8, half, device
NCNN ncnn yolo26n_ncnn_model/ imgsz, half, batch, device
IMX500 imx yolo26n_imx_model/ imgsz, int8, data, fraction, nms, device
RKNN rknn yolo26n_rknn_model/ imgsz, batch, name, device
ExecuTorch executorch yolo26n_executorch_model/ imgsz, batch, device
Axelera axelera yolo26n_axelera_model/ imgsz, batch, int8, data, fraction, device

元数据:指模型附带的类别、尺寸、配置等说明信息,有元数据可直接使用,无需额外配置。

下面介绍几种常用的格式。

1.TorchScript

TorchScript 侧重模型的可移植性,支持在无完整 Python 环境的场景中运行,非常适合需要在多设备、多平台上部署计算机视觉模型的场景。

Ultralytics YOLO26 全系模型均支持一键导出,可轻松集成到你常用的部署流程中,开箱即用。

from ultralytics import YOLO

# 加载 YOLO26 官方预训练模型
model = YOLO("yolo26n.pt")

# 导出 TorchScript 模型(指定用CPU导出)
model.export(format="torchscript", device="cpu")

# 加载导出好的 TorchScript 模型
torchscript_model = YOLO("yolo26n.torchscript")

# 运行推理(关键:强制指定 device="cpu")
results = torchscript_model("https://ultralytics.com/images/bus.jpg", device="cpu", save=True)

将YOLO26模型导出到TorchScript对于从研究转向实际应用至关重要。该过程涉及两种技术:追踪(tracing)和脚本化(scripting)。追踪记录模型执行期间的操作,而脚本化则允许使用Python的一个子集来定义模型。这些技术确保像YOLO26这样的模型即使在其通常的Python环境之外也能发挥作用。

以下是 TorchScript 备受开发者青睐的核心特性

  • 静态图执行:TorchScript 采用模型计算的静态图表示,与 PyTorch 动态图不同。计算图在执行前一次性定义并编译,可显著提升推理阶段性能。
  • 模型序列化:支持将 PyTorch 模型保存为跨平台格式,无需依赖原始 Python 代码即可加载,便于在各类运行环境中部署。
  • JIT 编译:通过即时(JIT)编译将模型转为优化的中间表示,对计算图进行编译,让模型在目标设备上高效运行。
  • 跨语言集成:可将模型导出至 C++、Java、JavaScript 等多种语言,方便把 PyTorch 模型集成到不同语言开发的系统中。
  • 渐进式转换:支持分步将模型的不同模块转为 TorchScript,处理复杂模型或针对性优化代码时更加灵活。

2.ONNX

部署计算机视觉模型时,往往需要选用兼具灵活性与多平台兼容性的模型格式。

将 Ultralytics YOLO26 模型导出为 ONNX 格式,能够大幅简化部署流程,并保障模型在各类运行环境中都具备最优性能。ONNX 全称为开放式神经网络交换格式,最初由 Facebook 与 Microsoft 联合发起开发,后续得到 IBM、亚马逊 AWS、谷歌等众多企业的共同维护与支持。该项目旨在制定一种开放的模型文件标准,统一神经网络的表示形式,让机器学习模型能够跨人工智能框架、跨硬件平台通用。

同时,ONNX 可实现模型在不同框架间的无缝转换。例如在 PyTorch 中训练完成的模型,可导出为 ONNX 格式,再便捷导入 TensorFlow 等其他框架中继续使用。

from ultralytics import YOLO

# 加载 YOLO26 官方预训练模型
model = YOLO("yolo26n.pt")

# 将模型导出为 ONNX 格式(指定使用 CPU)
model.export(format="onnx", device="cpu")

# 加载导出后的 ONNX 模型
onnx_model = YOLO("yolo26n.onnx")

# 使用 ONNX 模型进行预测(指定使用 CPU,避免报错)
results = onnx_model("https://ultralytics.com/images/bus.jpg", device="cpu", save=True)

ONNX 能够适配各类框架与平台,得益于以下几项核心特性:

  通用模型表示:ONNX 定义了一套标准算子与统一数据格式,涵盖卷积、网络层等常用运算。各类模型转为 ONNX 格式时,网络结构与权重参数都会被转换成这套通用规范,保证所有支持 ONNX 的框架都能正常解析和运行模型。

版本管理与向后兼容:ONNX 为内置算子建立了完善的版本管理机制。即便标准持续迭代更新,旧版本导出的模型依然可以正常使用。良好的向后兼容特性,有效避免了模型因版本迭代而过时废弃。

基于计算图的模型结构:ONNX 以计算图的形式描述模型,图中节点代表各类运算操作,边代表张量数据的传输流向。这种通用的图结构表达方式,能够很好地适配同样采用计算图设计的各类深度学习框架。

完善的工具生态:ONNX 拥有丰富的周边工具链,支持模型转换、结构可视化、推理优化等功能,大幅降低了开发使用门槛,让开发者可以轻松实现模型在不同框架间的无缝迁移与部署。

3.TensorRT

部署计算机视觉模型到高性能场景时,往往需要选用能极致提升推理速度与运行效率的模型格式,在 NVIDIA GPU 设备上进行部署时更是如此。

将 Ultralytics YOLO26 模型导出为 TensorRT 格式,能够充分适配 NVIDIA 硬件特性,显著提升模型的推理速度与运行效率。

from ultralytics import YOLO

# 加载 YOLO26 预训练模型
model = YOLO("yolo26n.pt")

# 导出为 TensorRT 格式(必须指定 device=0,否则会报错)
model.export(format="engine", device=0)

# 加载导出好的 TensorRT 模型
tensorrt_model = YOLO("yolo26n.engine")

# 执行推理(必须指定 device=0)
results = tensorrt_model("https://ultralytics.com/images/bus.jpg", device=0)

TensorRT 是由 NVIDIA 推出的高性能推理软件开发工具包,专为深度学习高速推理设计,十分适配目标检测等实时业务场景。

该工具可对运行在 NVIDIA GPU 上的深度学习模型进行深度优化,从而实现更快、更高效的运算性能。TensorRT 会通过层融合、INT8/FP16 精度量化、动态张量内存管理、内核自动调优等技术对模型进行全方位优化。将模型转换为 TensorRT 格式,能够充分挖掘 NVIDIA GPU 的硬件算力潜力。

TensorRT 模型具备多项核心优化特性,能够显著提升深度学习推理的运行效率与性能表现:

精度校准:TensorRT 支持模型精度校准,可根据实际业务需求灵活调整推理精度。支持 INT8、FP16 等低精度运算格式,在保证精度损失可控的前提下,大幅提升推理速度。

层融合优化:在模型优化阶段,TensorRT 可将神经网络中多个连续网络层合并为单次运算,有效减少内存读写与冗余计算开销,进一步加快推理速率。

动态张量内存管理:推理过程中,TensorRT 会智能调度与管理张量内存,合理优化内存分配与复用策略,降低内存占用,提升 GPU 显存利用效率。

自动内核调优:TensorRT 能够自动为网络每一层适配最优的 GPU 计算内核,通过自适应择优调度,充分挖掘 NVIDIA 显卡的硬件算力潜力。

4.OpenVINO

本节将介绍把 YOLO26 模型导出为 OpenVINO 格式的方法。该格式最高可实现3 倍 CPU 推理加速,同时能够在 Intel 独显与 NPU 硬件上为 YOLO 模型提供推理优化。

from ultralytics import YOLO

# 加载 YOLO26n 模型
model = YOLO("yolo26n.pt")

# 导出 OpenVINO 模型(成功导出,你已经做到了)
model.export(format="openvino")

# 加载 OpenVINO 模型
ov_model = YOLO("yolo26n_openvino_model/")

# ✅ 关键:必须指定 device,否则会报错
# 使用 Intel CPU 运行(最稳、不报错)
results = ov_model("https://ultralytics.com/images/bus.jpg", device="cpu", save=True)

# 如果你想使用 Intel 核显
# results = ov_model("https://ultralytics.com/images/bus.jpg", device="intel:gpu")

OpenVINO 全称为 Open Visual Inference & Neural Network Optimization,是一款面向 AI 推理模型优化与部署的综合性工具包。尽管名称带有视觉相关字样,但 OpenVINO 的应用场景并不局限于计算机视觉,同样支持自然语言、音频、时间序列等各类人工智能任务。

OpenVINO 核心优势

  1. 推理性能优异OpenVINO 可充分调度英特尔 CPU、核显、独显及 FPGA 等硬件算力,为模型提供高性能推理能力。

  2. 支持异构硬件部署统一的开发接口支持一次开发、多硬件适配,可灵活部署至英特尔全系硬件,包括 CPU、GPU、FPGA、VPU 等设备。

  3. 内置模型优化器支持导入并转换优化来自 PyTorch、TensorFlow、Keras、ONNX、PaddlePaddle、Caffe 等主流框架的模型,适配性极强。

  4. 上手便捷文档丰富工具包提供八十余例教程工程,涵盖 YOLO26 模型优化等实战场景,全方位覆盖使用与开发流程,降低学习与落地门槛。

OpenVINO 导出文件结构

模型导出为 OpenVINO 格式后,会生成独立文件夹,内部包含三类核心文件:

  • XML 文件:用于描述神经网络的拓扑结构与网络层级关系;
  • BIN 文件:以二进制形式存储模型权重与偏置参数;
  • 映射文件:记录原始模型输出张量与 OpenVINO 张量名称的对应关系。

通过这组文件,即可依托 OpenVINO 推理引擎完成模型部署与推理任务。

三、模型部署

对于深度学习模型来说,模型部署指让训练好的模型在特定环境中运行的过程。相比于软件部署,模型部署会面临更多的难题:

1)运行模型所需的环境难以配置。深度学习模型通常是由一些框架编写,比如 PyTorch、TensorFlow。由于框架规模、依赖环境的限制,这些框架不适合在手机、开发板等生产环境中安装。

2)深度学习模型的结构通常比较庞大,需要大量的算力才能满足实时运行的需求。模型的运行效率需要优化。

1.ONNX

目前,在数家机构的共同维护下,ONNX 已经对接了多种深度学习框架和多种推理引擎。因此,ONNX 被当成了深度学习框架到推理引擎的桥梁,就像编译器的中间语言一样。由于各框架兼容性不一,我们通常只用 ONNX 表示更容易部署的静态图。

第二章我们已经知道了如何将格式导出为ONNX格式,如果导入成功,目录下会新增一个"yolo26n.onnx"的 ONNX 模型文件。我们可以用下面的脚本来验证一下模型文件是否正确。

import onnx

# 你的 ONNX 模型路径
onnx_path = "yolo26n.onnx"

# 加载模型
onnx_model = onnx.load(onnx_path)

# 检查模型是否合法
try:
    onnx.checker.check_model(onnx_model)
    print(f"✅ 模型 {onnx_path} 结构完全正确,无损坏!")

except onnx.checker.ValidationError as e:
    print(f"❌ 模型 {onnx_path} 存在错误:")
    print(e)

except Exception as e:
    print(f"❌ 加载/检查失败:{e}")

接下来,让我们来看一看 ONNX 模型具体的结构是怎么样的。我们可以使用 Netron(开源的模型可视化工具)来可视化 ONNX 模型。把 srcnn.onnx 文件从本地的文件系统拖入网站,即可看到模型的可视化结构图。

ONNX Runtime 是由微软维护的一个跨平台机器学习推理加速器,也就是我们前面提到的”推理引擎“。ONNX Runtime 是直接对接 ONNX 的,即 ONNX Runtime 可以直接读取并运行 .onnx 文件, 而不需要再把 .onnx 格式的文件转换成其他格式的文件。

ONNX Runtime 提供了 Python 接口。接着刚才的脚本,我们可以添加如下代码运行模型

import onnxruntime
import numpy as np
import cv2

# ===================== 1. 加载图片 + 预处理 =====================
img = cv2.imread("bus.jpg")
ori_img = img.copy()
h, w = img.shape[:2]

img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
img = cv2.resize(img, (640, 640))
img = img.astype(np.float32) / 255.0
img = img.transpose(2, 0, 1)
input_tensor = np.expand_dims(img, axis=0)

# ===================== 2. 核心推理(官方标准格式) =====================
session = onnxruntime.InferenceSession("yolo26n.onnx")
input_name = session.get_inputs()[0].name
output_names = [o.name for o in session.get_outputs()]
outputs = session.run(output_names, {input_name: input_tensor})

# ===================== 3. 解析 + 画框 + 保存图片 =====================
class_names = ['person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train', 'truck', 'boat', 'traffic light', 'fire hydrant', 'stop sign', 'parking meter', 'bench', 'bird', 'cat', 'dog', 'horse', 'sheep', 'cow', 'elephant', 'bear', 'zebra', 'giraffe', 'backpack', 'umbrella', 'handbag', 'tie', 'suitcase', 'frisbee', 'skis', 'snowboard', 'sports ball', 'kite', 'baseball bat', 'baseball glove', 'skateboard', 'surfboard', 'tennis racket', 'bottle', 'wine glass', 'cup', 'fork', 'knife', 'spoon', 'bowl', 'banana', 'apple', 'sandwich', 'orange', 'broccoli', 'carrot', 'hot dog', 'pizza', 'donut', 'cake', 'chair', 'couch', 'potted plant', 'bed', 'dining table', 'toilet', 'tv', 'laptop', 'mouse', 'remote', 'keyboard', 'cell phone', 'microwave', 'oven', 'toaster', 'sink', 'refrigerator', 'book', 'clock', 'vase', 'scissors', 'teddy bear', 'hair drier', 'toothbrush']
conf_thres = 0.4

for det in outputs[0][0]:
    x1, y1, x2, y2, conf, cls = det
    if conf < conf_thres: continue

    x1 = int(x1 * w / 640)
    y1 = int(y1 * h / 640)
    x2 = int(x2 * w / 640)
    y2 = int(y2 * h / 640)

    label = f"{class_names[int(cls)]} {conf:.2f}"
    cv2.rectangle(ori_img, (x1, y1), (x2, y2), (0, 255, 0), 2)
    cv2.putText(ori_img, label, (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 1)


cv2.imwrite("result.jpg", ori_img)


print("输出形状:", outputs[0].shape)
print("完成!已保存 result.jpg")

输出形状:(1, 300, 6)

拆解:

  • 1:batch 大小(1 张图片)
  • 300:最多检测出 300 个目标框
  • 6:每个框的 6 个参数→ [x1, y1, x2, y2, confidence, class_id]

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐