Ultralytics YOLO26 模型导出实战指南:Export 模式详解与 ONNX / TensorRT / CoreML 等多格式部署
2026/9/8 21:24:13 网站建设 项目流程

Ultralytics YOLO26 模型导出实战指南:Export 模式详解与 ONNX / TensorRT / CoreML 等多格式部署

【免费下载链接】ultralyticsUltralytics YOLO26, YOLO11, YOLOv8 — object detection, instance segmentation, semantic segmentation, image classification, pose estimation, object tracking项目地址: https://gitcode.com/GitHub_Trending/ul/ultralytics

模型训练的终点是部署。Ultralytics 的Export(导出)模式允许把训练好的 PyTorch 权重一次性转换为 ONNX、TensorRT、CoreML、OpenVINO、LiteRT 等二十余种运行格式,让同一份模型能够跑在不同的硬件与推理框架上。本文以仓库文档 docs/en/modes/export.md 为主体,结合 ultralytics/engine/exporter.py 的源码实现,系统讲解导出参数、量化精度、格式选型与常见问题,帮助你把 YOLO26 模型稳定地送上目标部署环境。

一、什么是 Export 模式:为何需要导出模型

训练产出的best.pt是 PyTorch 原生格式,直接用它推理固然可行,但真实产品往往需要更快的推理速度、更小的模型体积、更强的算子优化或对特定硬件的适配——这就要通过 Export 模式把模型"翻译"成目标运行时能直接加载的中间表示或引擎文件。

在 Ultralytics 中,导出是六大模式(train / val / predict /export/ track / benchmark)之一。核心入口非常简单:

  • Python:model.export(format=...)
  • CLI:yolo export model=... format=...

导出动作完成后,Ultralytics 会打印该格式的后续使用示例(如yolo predict model=yolo26n.onnx),导出的产物可以直接用于predictval,例如yolo predict model=yolo26n.onnx。这意味着同一个推理链路上,只要换一个model=路径,就能无缝切换到导出的运行时后端。甚至无需任何本地环境,也可以在 Ultralytics Platform 的浏览器中直接完成导出(参见 docs/en/platform/train/models.md 中的 Export Model 说明)。

选择导出格式的收益

原文档给出的性能指引在仓库与集成文档中保持一致:

  • 导出为 ONNX 或 OpenVINO,在CPU上可获得最高约3 倍的推理加速;
  • 导出为 TensorRT,在NVIDIA GPU上可获得最高约5 倍的推理加速。

Export 模式的突出能力

  • 一键导出:Python / CLI 各一条命令即可切换目标格式;
  • 批处理能力:可通过batch参数导出支持批量推理的模型;
  • 推理优化:产物针对目标运行时做了算子级优化(如 ONNX 图简化、TensorRT 引擎构建);
  • 广泛兼容:覆盖从云端 GPU 到移动端、NPU、边缘设备的多种软硬件环境。

从源码结构看,ultralytics/engine/exporter.py 中的Exporter类(exporter.py#L508-L558)把「参数校验 → 设备选择 → 模型预处理 → 逐格式导出 → 结果检查」封装成一个完整的流水线,每个目标格式都对应独立的export_xxx()方法,全部通过@try_export装饰器包裹(exporter.py#L485-L505)——导出成功时输出耗时与产物体积,导出失败则抛出明确错误,同时会断言产物文件大于 0.1 MB,防止生成损坏或算子不支持的模型。

二、快速开始:导出你的第一个模型

以官方 YOLO26n 权重或自定义训练权重为例:

=== "Python"

```python from ultralytics import YOLO # 加载模型 model = YOLO("yolo26n.pt") # 加载官方模型 model = YOLO("path/to/best.pt") # 加载自定义训练模型 # 导出模型 model.export(format="onnx") ```

=== "CLI"

```bash yolo export model=yolo26n.pt format=onnx # 导出官方模型 yolo export model=path/to/best.pt format=onnx # 导出自定义训练模型 ```

前置条件:若此前仅安装了基础包,需要补充导出相关依赖,可执行pip install "ultralytics[export]"。这一点也在 exporter.py 顶部的模块 docstring 中有明确标注。

导出到不同格式时,目标产物命名遵循统一规则(以 YOLO26 为例,参考 exporter.py#L146-L277 中export_formats()Suffix列):

格式format=参数产物文件
PyTorch-yolo26n.pt
TorchScripttorchscriptyolo26n.torchscript
ONNXonnxyolo26n.onnx
OpenVINOopenvinoyolo26n_openvino_model/
TensorRTengineyolo26n.engine
CoreMLcoremlyolo26n.mlpackage
TensorFlow SavedModelsaved_modelyolo26n_saved_model/
TensorFlow GraphDefpbyolo26n.pb
TensorFlow Edge TPUedgetpuyolo26n_edgetpu.tflite
PaddlePaddlepaddleyolo26n_paddle_model/
MNNmnnyolo26n.mnn
NCNNncnnyolo26n_ncnn_model/
IMX500imxyolo26n_imx_model/
RKNNrknnyolo26n_rknn_model/
ExecuTorchexecutorchyolo26n_executorch_model/
Axelera AIaxelerayolo26n_axelera_model/
DEEPXdeepxyolo26n_deepx_model/
Qualcomm QNNqnnyolo26n_qnn.onnx
LiteRTlitertyolo26n.tflite
Hailohailoyolo26n_hailo_model/
Huawei Ascendascendyolo26n_ascend_model/
Apple Core AIcoreaiyolo26n.aimodel

源码中的格式别名与兼容处理

Exporter.__call__(exporter.py#L572-L603)会自动规范化format参数:tensorrt/trt归一到enginemlmodel/mlpackage/mlprogram/apple/ios归一到coremlhuawei/cann/om归一到ascend;而历史遗留的tflite/tfjs参数自 8.4.83 起被统一为 Google LiteRT 导出(litert)并输出弃用警告。若传入完全无法识别的格式,源码会尝试用difflib匹配最相近的合法格式,否则直接抛出 "Invalid export format" 错误。此外,format='engine'(TensorRT)必须依赖 GPU,源码在未指定设备时会自动分配device=0

三、导出参数全解

3.1 参数总表

下列参数控制导出的目标格式、输入尺寸、量化精度与部署行为(继承并展开自 docs/macros/export-args.md,其中多数默认值可在 ultralytics/cfg/default.yaml 的 Export settings 段核对):

参数类型默认值说明
formatstr'torchscript'目标导出格式,如'onnx''torchscript''engine'(TensorRT)等,每种格式对应不同的部署环境。
namestrNone需要指定硬件目标的格式使用:Hailo 架构('hailo8'/'hailo8l'/'hailo10h'/'hailo15h'/'hailo15l',默认'hailo8l')、Rockchip RKNN 芯片(默认'rk3588')、Huawei Ascend SoC(CANN--soc_version,默认'Ascend310B4')、Qualcomm QNN HTP 目标(默认'73')。注意它与 train/predict 等模式中project/name的运行命名对是两回事。
imgszinttuple640模型输入尺寸。整数表示正方形(如 640×640),元组为(height, width)。若不显式传入,则复用权重中记录的训练尺寸:官方 YOLO26 权重中 depth 记录 768、classify 记录 224、OBB 记录 1024,其余任务为 640;自定义微调模型则记录其训练时的imgsz。由 YAML 构建的模型没有训练记录,因此默认 640。
kerasboolFalseTensorFlow SavedModel 是否导出为 Keras 格式,兼容 TensorFlow Serving 等 API。
optimizeboolFalse仅 DEEPX 使用:开启更高编译优化以降低推理延迟,但会拉长编译时间。
quantizeintstrNone量化精度:16(FP16,缩小体积、在支持硬件上加速)、8(INT8/PTQ,进一步压缩、主要面向边缘设备,需要校准data/fraction);32/不设置表示 FP32。支持混合权重/激活精度导出的格式还接受'w8a8'/'w16a16'/'w8a16'/'w8a32'记法。它取代了已弃用的half/int8参数(half=True16int8=True8,仍会接受但给出弃用警告)。只有目标格式支持的精度才会被允许(详见第四节)。
dynamicboolFalse是否允许动态输入尺寸,适用于 TorchScript、ONNX、OpenVINO、TensorRT 与 CoreML,便于处理多变图像尺寸。
simplifyboolTrue对会生成中间 ONNX 图的导出使用onnxslim简化计算图,提升性能与兼容性。
opsetintNone中间 ONNX 图的 opset 版本,用于兼容不同解析器与运行时;不设置则用最新支持版本。
workspacefloatNoneNoneTensorRT 构建时的最大 workspace 大小(GiB),平衡显存与性能;None表示交给 TensorRT 自动分配到设备上限。
nmsboolFalse在支持的格式中把 NMS 后处理融合进导出模型(见 Export Formats 一节各格式支持情况),提升检测后处理效率。end2end 模型不可用;CoreML 仅检测模型支持。
conffloatNone在「导出期生成 NMS」的场景使用:nms=True导出、Hailo 非端到端检测导出,以及内部强制nms=True的 IMX 检测/姿态/分割导出。未设置时默认 0.25。
ioufloat0.7在同样生成导出期 NMS 的场景中使用的 IoU 阈值。
max_detint300导出模型输出保留的最大检测数量。作用于除 CoreML(其 NMS 无检测上限)之外所有nms=True导出,以及无 NMS 的端到端检测导出(YOLO26、YOLOv10,会按可用 anchor 数截断),还有 IMX 的检测/姿态/分割导出。
agnostic_nmsboolFalse在标准nms=True管线下启用类别无关 NMS(包含 CoreML 自己的 NMS 阶段),即跨类别抑制低分重叠框。Hailo、IMX 自行生成的 NMS 无此选项,始终保持类别相关。对端到端导出(YOLO26、YOLOv10)同样生效,但仅用于阻止同一检测框以多个类别标签重复出现(IoU=1.0 的重复),不会做 IoU 阈值层面的框间抑制。
batchint1导出模型的批大小,或 predict 时并发处理的最大图像数。Edge TPU 导出会被自动置为 1。
devicestrNone导出用设备:GPU(device=0)、CPU(device=cpu)、Apple silicon MPS(device=mps)、Huawei Ascend NPU(device=npudevice=npu:0)、NVIDIA Jetson DLA(device=dla:0/dla:1)。TensorRT 自动使用 GPU,且 TensorRT 11.0 不支持 DLA。
verboseboolFalseformat='engine'生效:把 TensorRT builder 日志提升到 VERBOSE 级别;其他格式忽略。
datastrNone数据集 YAML 路径,INT8 量化校准时必需;分类任务则接受数据集目录或内置数据集名。INT8 开启但未指定时,Ultralytics 会按需选择任务专用校准数据集,或回退到该任务默认数据集。
splitstr'val'用于构建 INT8 量化校准 dataloader 的数据集划分:'train'/'val'/'test'
fractionfloat/int/list1.0INT8 校准所用数据子集:比例、图像数量或[train, val, test]列表。1表示整份划分,大于 1 的整数表示图像数量,仅可选的 test 项接受0/0.0表示不使用;双元素列表表示 test 使用完整集。
end2endboolNone覆盖支持无 NMS 推理的 YOLO 模型(YOLO26、YOLOv10)的端到端模式。设为False可导出兼容传统 NMS 后处理流程的版本,详见 End-to-End Detection 指南。

3.2 关键参数背后的源码逻辑

  • 参数-格式匹配校验validate_args(exporter.py#L447-L482)会先取export_formats()中该格式允许的参数集合,再比对实际传入值。若某个参数对该格式无效(如给 PaddlePaddle 传dynamic),导出会直接以ERROR ❌️ argument '...' is not supported for format='...'中止,而不是等导出失败后才暴露问题。这是保证「导出的每一步都可预期」的重要防线。
  • 量化前置校验validate_args同时按第四节精度矩阵拦截不支持的组合,例如quantize=16(FP16)用于不在 FP16 支持集内的格式时会立即报错并提示该格式可用的精度选项。
  • 输入形状self.imgsz = check_imgsz(...)保证输入尺寸对齐模型 stride;随后用torch.zeros(batch, channels, *imgsz)构造虚拟输入做两次 dry-run 前向,拿到真实输出形状output_shape后再进入逐格式导出(exporter.py#L717、L846、L916-L930)。
  • 模型预处理:导出前会对模型做deepcopy、冻结参数(requires_grad=False)、切到evalfloat并对 Conv-BN 做fuse()(exporter.py#L854-L859);对 Detect 系列头会按当前imgszmax_det夹紧到可用 anchor 数量之内,保证 TensorRT 兼容性。
  • 硬件目标自动选择:源码为需要name的格式提供默认值——RKNN 默认rk3588并校验RKNN_CHIPS,RV1103/RV1106 等低端芯片强制 INT8;Ascend 默认Ascend310B4(合法值取决于本机安装的 CANN 内核包);QNN 默认73(Snapdragon 8 Gen 2)并接受v73等别名(exporter.py#L720-L772)。
  • 端到端分支自动回退:对不支持 top-k 算子的格式(RKNN、NCNN、ExecuTorch、Paddle、IMX、Edge TPU、QNN),以及 LiteRT INT8 静态量化场景,源码会自动关闭 end2end 分支并警告(exporter.py#L678-L688);TensorRT < 8.5.0 因缺少 Mod 算子同样会回退。

四、支持的导出格式与各自参数

下表整理了 YOLO26 支持的全部导出格式。任何格式都可以直接作为predictvalmodel=输入,例如yolo predict model=yolo26n.onnx;导出成功后在终端会给出对应的用法示例。

格式format参数产物元数据支持参数
PyTorch-yolo26n.pt-
TorchScripttorchscriptyolo26n.torchscriptimgsz,quantize,dynamic,nmsnms=True时还可配conf/iou/agnostic_nms),batch,device
ONNXonnxyolo26n.onnximgsz,quantize,dynamic,simplify,opset,nms(同左),batch,data,fraction,device
OpenVINOopenvinoyolo26n_openvino_model/imgsz,quantize,dynamic,nms(同左),batch,data,fraction,device
TensorRTengineyolo26n.engineimgsz,quantize,dynamic,simplify,opset,workspace,nms(同左),batch,data,fraction,device
CoreMLcoremlyolo26n.mlpackageimgsz,dynamic,quantize,nms(同左),batch,device
TF SavedModelsaved_modelyolo26n_saved_model/imgsz,keras,quantize,opset,nms(同左),batch,data,fraction,device
TF GraphDefpbyolo26n.pbimgsz,opset,batch,device
TF Edge TPUedgetpuyolo26n_edgetpu.tfliteimgsz,quantize,opset,data,fraction,device
PaddlePaddlepaddleyolo26n_paddle_model/imgsz,batch,device
MNNmnnyolo26n.mnnimgsz,batch,dynamic,quantize,simplify,opset,nms(同左),device
NCNNncnnyolo26n_ncnn_model/imgsz,quantize,batch,device
Sony IMX500imxyolo26n_imx_model/imgsz,quantize,data,fraction,nms(同左),device
Rockchip RKNNrknnyolo26n_rknn_model/imgsz,batch,name,quantize,simplify,opset,data,fraction,device
ExecuTorchexecutorchyolo26n_executorch_model/imgsz,batch,device
Axeleraaxelerayolo26n_axelera_model/imgsz,batch,quantize,data,fraction,device
DEEPXdeepxyolo26n_deepx_model/imgsz,quantize,simplify,opset,data,optimize,device
Qualcomm QNNqnnyolo26n_qnn.onnximgsz,batch,name,quantize,simplify,opset,data,fraction,device
LiteRTlitertyolo26n.tfliteimgsz,quantize,batch,data,fraction,device
Hailohailoyolo26n_hailo_model/imgsz,name,quantize,data,fraction,simplify,conf,iou
Huawei Ascendascendyolo26n_ascend_model/imgsz,batch,name,quantize,opset,simplify,nms(同左)
Apple Core AIcoreaiyolo26n.aimodelimgsz,batch,quantize

上表依据 docs/macros/export-table.md 渲染,并与源码export_formats()(exporter.py#L146-L277)中每个格式注册的Arguments列表一一对应——这正是validate_args校验合法参数的数据来源。几点补充:

  • IMX500 格式目前仅支持 YOLOv8n、YOLO11n 模型;
  • 大部分格式会携带模型元数据(描述、作者、版本、stride、task、imgsz、names、导出参数等),构建于 exporter.py#L934-L950,后续被写入 ONNX custom metadata、OpenVINOmetadata.yaml或 TFLite 元数据中;
  • 表格中"元数据"标记为 ❌ 的 TF GraphDef 格式不做导出期精度转换,也无法保存元数据。

五、量化精度:用quantize精确控制导出精度

quantize参数用于显式请求导出精度。字符串值大小写不敏感,Ultralytics 在导出前会把别名统一规范化:

请求值规范化值含义
8,"8","int8","w8a8"8INT8 权重与激活
16,"16","fp16","w16a16"16FP16 权重与激活
32,"32","fp32","w32a32"32FP32 导出;等同于不设置,但 CoreML NMS ML Programs 默认是 FP16
"w8a16""w8a16"INT8 权重 + 16 位激活(FP16;LiteRT 上为 INT16)
"w8a32""w8a32"INT8 权重 + FP32 激活(LiteRT 动态 INT8,无需校准)

历史遗留的half=Trueint8=True仍然会被接受,但会伴随弃用警告,并分别转发为quantize=16quantize=8

5.1 各格式精度支持矩阵

并非每种格式都支持每种精度。显式传入不支持的quantize请求,要么按该格式产生目标精度,要么在导出前直接失败:

格式FP32(32/未设置)FP16(16INT8(8W8A16("w8a16"备注
PyTorchN/AN/AN/A原生训练/检查点格式。
TorchScript✅ 仅 GPUFP16 TorchScript 导出需要device=0;CPU 导出为 FP32。
ONNXINT8 使用 ONNX Runtime 静态量化与校准数据。
OpenVINOINT8 使用 NNCF 训练后量化。
TensorRTINT8 需要代表性校准数据。
CoreML✅¹CoreML INT8 为权重量化;W8A16 使用 INT8 权重 + FP16 激活。¹ 未设置时 NMS ML Programs 默认 FP16。
TF SavedModelINT8 导出使用 TensorFlow 校准。
TF GraphDef无导出期精度转换。
Edge TPU✅ 自动Edge TPU 强制 INT8;未设置时自动启用。
PaddlePaddle无导出期精度转换。
MNNINT8 为 MNN 转换阶段的权重量化。
NCNN面向移动/嵌入式运行时的格式。
IMX500✅ 自动IMX500 强制量化;未设置时 INT8 自动启用。
RKNN✅ 依芯片而定RK3588/RK3576/RK3566/RK3568/RK3562/RK2118/RV1126B 支持 FP16 或 INT8;RV1103/RV1106 变体仅支持 INT8。
ExecuTorch无导出期精度转换。
Axelera✅ 自动Axelera 导出强制 INT8;未设置时自动启用。
DEEPX✅ 自动DEEPX 导出强制 INT8;未设置时自动启用。
Qualcomm QNN✅ 自动QNN HTP 导出固定为 INT8 权重 + 16 位激活。
LiteRT静态 INT8(8)与"w8a16"(INT8 权重 +INT16激活)需要校准数据;另支持"w8a32"动态 INT8(无需校准)。quantize=16不构成独立导出,FP32 模型运行期通过 GPU delegate 以 FP16 执行。
Huawei Ascend✅ 自动Ascend AI Core 卷积仅接受 FP16/INT8 输入,因此 ATC 编译 FP16;未设置时自动启用。

5.2 校准数据与源码级约束

对于 INT8 与 W8A16 导出,需要借助data提供代表性校准数据,例如data="coco8.yaml",除非目标集成文档声明了默认或自动启用行为。LiteRT 的"w8a32"(动态 INT8)方案则无需校准数据。

从源码看,这一整套约束由三处协作实现:

  • 支持集常量FP16_FORMATSINT8_FORMATSW8A16_FORMATSW8A32_FORMATSFP32_UNSUPPORTED_FORMATS定义了每个精度对应的格式白名单(exporter.py#L400-L444);
  • validate_args校验:逐一分发16/8/"w8a16"/"w8a32"/32分支断言,不符合即报错并列出该格式可用的quantize选项(exporter.py#L464-L478);
  • 自动行为兜底:Edge TPU / IMX / Axelera / DEEPX / QNN / Hailo / Ascend 这类强制量化格式会在未设置时自动启用 INT8(QNN 为 W8A16、Ascend 为 FP16),并对缺失的data回退到任务默认校准集(exporter.py#L624-L634、L831-L835)。

5.3 实操示例:INT8 量化导出

=== "Python"

```python from ultralytics import YOLO model = YOLO("yolo26n.pt") # 加载模型 model.export(format="onnx", quantize=8, data="coco8.yaml") ```

=== "CLI"

```bash yolo export model=yolo26n.pt format=onnx quantize=8 data=coco8.yaml # 导出带 INT8 量化的 ONNX ```

INT8 量化适用于 ONNX、TensorRT、OpenVINO、CoreML、Rockchip RKNN 等格式。为取得最优量化效果,建议用data参数指定一个有代表性的数据集。

六、导出模型的输出张量结构

把 YOLO 导出到 ONNX / TensorRT 等格式后,输出张量结构与任务类型、导出设置强相关。这对自定义推理实现尤为重要(在 exporter.py#L926-L930 中output_shape会被打印出来,便于核对)。

检测模型(如yolo26n.pt

  • 端到端导出(支持该模式的格式默认开启):输出形状为(batch_size, max_detections, 6),每个检测对应[x1, y1, x2, y2, confidence, class_id]。默认max_det=300时通常为(batch_size, 300, 6)。部分受算子约束的格式会自动回退到传统输出布局。
  • 非端到端导出,或使用end2end=False导出的 YOLO26:输出通常是单个张量,形状为(batch_size, 4 + num_classes, num_predictions),通道维度为框坐标加各类别分数,num_predictions取决于导出输入分辨率(可动态)。哪些格式保留端到端输出,参见 End-to-End Detection 指南。

分割模型(如yolo26n-seg.pt

通常返回两个输出:第一个张量形状为(batch_size, 4 + num_classes + mask_dim, num_predictions)(框、类别分数与 mask 系数),第二个张量形状为(batch_size, mask_dim, proto_h, proto_w)(mask 原型,配合系数生成实例 mask)。尺寸取决于导出输入分辨率(可动态)。

姿态模型(如yolo26n-pose.pt

输出张量形状通常为(batch_size, 4 + num_classes + keypoint_dims, num_predictions),其中keypoint_dims取决于姿态规格(关键点数量、是否包含置信度),num_predictions同样取决于导出输入分辨率(可动态)。

若需要处理这些输出的逐语言示例,仓库的 examples 目录(examples)与各集成文档提供了多语言实现供参考。

七、常见问题(FAQ)

7.1 如何把 YOLO26 导出为 ONNX?

直接使用 Python 或 CLI 即可:

=== "Python"

```python from ultralytics import YOLO # 加载模型 model = YOLO("yolo26n.pt") # 加载官方模型 model = YOLO("path/to/best.pt") # 加载自定义训练模型 # 导出模型 model.export(format="onnx") ```

=== "CLI"

```bash yolo export model=yolo26n.pt format=onnx # 导出官方模型 yolo export model=path/to/best.pt format=onnx # 导出自定义训练模型 ```

涉及不同输入尺寸等进阶选项时,参考 ONNX 集成指南。

7.2 使用 TensorRT 导出有哪些收益?

导出为 TensorRT 能带来显著的性能提升:YOLO26 导出到 TensorRT 可获得最高约 5 倍的 GPU 推理加速,适合实时推理应用。

  • 硬件针对性:为特定 NVIDIA 硬件定制优化;
  • 速度:借助深度算子优化获得更快推理;
  • 兼容性:与 NVIDIA 生态无缝集成。

具体集成方式参见 TensorRT 集成指南。

7.3 端到端模型(end2end)导出说明

YOLO26 与 YOLOv10 支持无 NMS 的端到端推理。默认情况下,在支持的格式中端到端导出自动启用。如果需要兼容传统的 NMS 后处理管线,可显式传入end2end=False;而 RKNN / NCNN / ExecuTorch / Paddle / IMX / Edge TPU / QNN 等不支持 top-k 算子的格式会强制回退为非端到端,LiteRT 的 INT8 静态量化同样会关闭端到端分支。详见 docs/en/guides/end2end-detection.md。

7.4 动态输入尺寸为何重要?如何开启?

动态输入尺寸允许导出模型处理任意分辨率的图像,在视频流处理、多来源图像等输入维度不固定的场景尤为有用。对 ONNX、TensorRT、CoreML、OpenVINO、TorchScript 等格式,使用dynamic=True即可:

=== "Python"

```python from ultralytics import YOLO model = YOLO("yolo26n.pt") model.export(format="onnx", dynamic=True) ```

=== "CLI"

```bash yolo export model=yolo26n.pt format=onnx dynamic=True ```

注意结合第三节表格约束:例如 CoreML 的dynamic=Truenms=True互斥、不支持分类与 RT-DETR 模型;MNN 不支持dynamic=Truenms=True同时开启;CoreMLbatch>1也要求开启dynamic。这些互斥约束均在源码 exporter.py#L789-L813 中有显式断言。

7.5 官方是否有 C++ 推理 API?

Ultralytics 目前没有为 YOLO 模型提供专用的 C++ 推理 API。做 C++ 部署时,先把模型导出为运行时格式(如 ONNX、TensorRT、TorchScript、MNN),再以该运行时自带的 C++ API 加载产物。例如检测模型执行yolo export model=yolo26n.pt format=onnx后用 ONNX Runtime C++ 加载.onnx,或用format=engine从 TensorRT C++ 应用中加载引擎文件。使用自定义 C++ 后处理时,必须匹配任务与导出设置对应的输出布局:YOLO26 端到端检测导出通常返回(batch, max_det, 6),而非端到端导出返回需要外部后处理的原始预测张量。

7.6 量化模型开启end2end=True后为何output0仍是 FP32?

quantize=16(FP16)或quantize=8(INT8)时,绝大多数张量会被降为低精度以减小体积、提升性能。但end2end=True会把后处理(包括类别索引)直接嵌入导出计算图,而output0中的类别索引在内部以浮点表示——FP16 因尾数精度有限无法可靠表示 2048 以上的整数值。为避免精度损失或类别 ID 出错,output0会被刻意保留为 FP32。这是预期行为,同样适用于其它低精度/量化导出。若确需全 FP16 输出,请以end2end=False导出并在外部完成后处理。

八、部署的下一步

导出只是部署的第一步。找到目标运行时的集成文档(ONNX、TensorRT、CoreML 等,完整列表见 integrations 索引),即可按其中的加载与推理示例把导出产物跑起来。仓库内针对各导出格式的冒烟测试集中在 tests/test_exports.py,是查阅「某个格式参数组合是否被 CI 覆盖」的第一手材料;Exporter类的完整字段与逐格式导出方法清单可继续阅读 ultralytics/engine/exporter.py。

一句话总结选型策略:CPU 部署优先考虑 ONNX/OpenVINO,NVIDIA GPU 实时应用优先 TensorRT,Apple 生态用 CoreML,移动/嵌入式端看 NCNN/LiteRT,NPU 与专用加速卡(RKNN、QNN、Ascend、Hailo、Edge TPU、Axelera、DEEPX、IMX500)再按硬件逐一匹配——所有选项都只是同一个model.export(format=...)参数的不同取值而已。

【免费下载链接】ultralyticsUltralytics YOLO26, YOLO11, YOLOv8 — object detection, instance segmentation, semantic segmentation, image classification, pose estimation, object tracking项目地址: https://gitcode.com/GitHub_Trending/ul/ultralytics

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询