How to Export a YOLO Model to ONNX for ZED Custom Object Detection

Open in ClaudeOpen in ChatGPT

Introduction

This page shows you how to export a YOLO model to an ONNX file for use with the ZED YOLO TensorRT inference example, or with the CUSTOM_YOLOLIKE_BOX_OBJECTS mode in the native ZED SDK Object Detection module.

This lets you train your own model using Ultralytics YOLO (v5, v8, v10, v11, v12, and YOLO26), YOLOv6, or YOLOv7.

You can also use the default model trained on the COCO dataset (80 classes) provided by the framework maintainers, or train a custom detector with the same architecture. The following tutorials walk you through the process of training a custom detector:

It enables the use of ZED 3D cameras with YOLO object detection, adding 3D localization and tracking to the most recent YOLO models using your own classes.

YOLO latency-accuracy and FLOPs-accuracy trade-offs

YOLO Comparison in terms of latency-accuracy (left) and FLOPs-accuracy (right) trade-offs (from YOLOv12)

Workflow

The process is as follows:

  1. Train your model or use an existing state-of-the-art (SOTA) model.
  2. Export it into an ONNX file.
  3. Load the ONNX file into the SDK or sample to generate an optimized model. This process uses the TensorRT framework to run inference and requires an initial step of inference engine generation.

ZED SDK samples are available on GitHub:

Keep track of the input resolution (imgsz) used at export time: when loading the model with the native CUSTOM_YOLOLIKE_BOX_OBJECTS mode, set ObjectDetectionParameters::custom_onnx_dynamic_input_shape to the same value. The input size must be a multiple of 32 (e.g. 608 or 640).

Ultralytics YOLO (v5, v8, v10, v11, v12, and YOLO26)

Installing ultralytics

ultralytics can be installed directly from pip using the following command:

1python -m pip install -U ultralytics

ONNX file export

In this documentation, we use the Ultralytics CLI for export. See the export mode documentation for the full list of options.

YOLO26

1yolo export model=yolo26n.pt format=onnx simplify=True dynamic=False imgsz=608

YOLO26 requires a recent ultralytics release (the 8.4.x series or newer). Older versions do not recognize the yolo26 model name. Upgrade with python -m pip install -U ultralytics if needed.

YOLOv12

1yolo export model=yolo12n.pt format=onnx simplify=True dynamic=False imgsz=608

YOLOv11

1yolo export model=yolo11n.pt format=onnx simplify=True dynamic=False imgsz=608

YOLOv10

1yolo export model=yolov10n.pt format=onnx simplify=True dynamic=False imgsz=608

YOLOv8

1yolo export model=yolov8n.pt format=onnx simplify=True dynamic=False imgsz=608

YOLOv5

1yolo export model=yolov5n.pt format=onnx simplify=True dynamic=False imgsz=608

Variants

For each model, the variant (n, s, m, l, x) can be selected, for example:

1yolo export model=yolo12x.pt format=onnx simplify=True dynamic=False imgsz=608

Dynamic size

The model can also use dynamic dimensions:

1yolo export model=yolo12m.pt format=onnx simplify=True dynamic=True

Custom model

For a custom model, simply change the weight file:

1yolo export model=yolov8l_custom_model.pt format=onnx simplify=True dynamic=False imgsz=512

Please refer to the corresponding documentation for more details https://github.com/ultralytics/ultralytics

YOLOv6

The sample was mainly tested with YOLOv6 v3.0 but should work with other versions with minor or no modifications.

Installing yolov6

YOLOv6 can be installed by cloning the repository and installing its requirements:

1git clone https://github.com/meituan/YOLOv6
2cd YOLOv6
3pip install -r requirements.txt
4pip install onnx>=1.10.0

ONNX file export

1wget https://github.com/meituan/YOLOv6/releases/download/0.3.0/yolov6s.pt
2python ./deploy/ONNX/export_onnx.py \
3 --weights yolov6s.pt \
4 --img 640 \
5 --batch 1 \
6 --simplify

For a custom model, simply change the weight file:

1python ./deploy/ONNX/export_onnx.py \
2 --weights yolov6l_custom_model.pt \
3 --img 640 \
4 --batch 1 \
5 --simplify

Please refer to the corresponding documentation for more details https://github.com/meituan/YOLOv6/tree/main/deploy/ONNX

YOLOv7

Installing yolov7

YOLOv7 can be installed by cloning the repository and installing its requirements:

1git clone https://github.com/WongKinYiu/yolov7.git
2cd yolov7
3python -m pip install -r requirements.txt

ONNX file export

In this documentation, we’ll use the export script export.py

1python export.py --weights ./yolov7-tiny.pt --grid --simplify --topk-all 100 --iou-thres 0.65 --conf-thres 0.35 --img-size 640 640

The --end2end option must NOT be used to run the inference with the ZED SDK for compatibility reasons.

For a custom model, simply change the weight file:

1python export.py --weights ./yolov7_custom_model.pt --grid --simplify --topk-all 100 --iou-thres 0.65 --conf-thres 0.35 --img-size 512 512

Please refer to the corresponding documentation for more details https://github.com/WongKinYiu/yolov7/tree/main?tab=readme-ov-file#export

YOLOv5

Installing yolov5

YOLOv5 can be installed by cloning the repository and installing its requirements:

1git clone https://github.com/ultralytics/yolov5 # clone
2cd yolov5
3pip install -r requirements.txt # install

ONNX file export

1python export.py --weights yolov5s.pt --include onnx --imgsz 640

For a custom model, simply change the weight file:

1python export.py --weights yolov5l_custom_model.pt --include onnx

Please refer to the corresponding documentation for more details https://docs.ultralytics.com/yolov5/.