TFLite, ONNX, CoreML, TensorRT Export (original) (raw)

📚 This guide explains how to export a trained YOLOv5 🚀 model from PyTorch to various deployment formats including ONNX, TensorRT, CoreML and more.

Before You Start

Clone repo and install requirements.txt in a Python>=3.8.0 environment, including PyTorch>=1.8. Models and datasets download automatically from the latest YOLOv5 release.

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

For TensorRT export example (requires GPU) see our Colab notebook appendix section. Open In Colab

Supported Export Formats

YOLOv5 inference is officially supported in 12 formats:

Performance Tips

Format export.py --include Model
PyTorch - yolov5s.pt
TorchScript torchscript yolov5s.torchscript
ONNX onnx yolov5s.onnx
OpenVINO openvino yolov5s_openvino_model/
TensorRT engine yolov5s.engine
CoreML coreml yolov5s.mlmodel
TensorFlow SavedModel saved_model yolov5s_saved_model/
TensorFlow GraphDef pb yolov5s.pb
TensorFlow Lite tflite yolov5s.tflite
TensorFlow Edge TPU edgetpu yolov5s_edgetpu.tflite
TensorFlow.js tfjs yolov5s_web_model/
PaddlePaddle paddle yolov5s_paddle_model/

Benchmarks

Benchmarks below run on a Colab Pro with the YOLOv5 tutorial notebook Open In Colab. To reproduce:

python benchmarks.py --weights yolov5s.pt --imgsz 640 --device 0

Colab Pro V100 GPU

`benchmarks: weights=/content/yolov5/yolov5s.pt, imgsz=640, batch_size=1, data=/content/yolov5/data/coco128.yaml, device=0, half=False, test=False Checking setup... YOLOv5 🚀 v6.1-135-g7926afc torch 1.10.0+cu111 CUDA:0 (Tesla V100-SXM2-16GB, 16160MiB) Setup complete ✅ (8 CPUs, 51.0 GB RAM, 46.7/166.8 GB disk)

Benchmarks complete (458.07s) Format mAP@0.5:0.95 Inference time (ms) 0 PyTorch 0.4623 10.19 1 TorchScript 0.4623 6.85 2 ONNX 0.4623 14.63 3 OpenVINO NaN NaN 4 TensorRT 0.4617 1.89 5 CoreML NaN NaN 6 TensorFlow SavedModel 0.4623 21.28 7 TensorFlow GraphDef 0.4623 21.22 8 TensorFlow Lite NaN NaN 9 TensorFlow Edge TPU NaN NaN 10 TensorFlow.js NaN NaN `

Colab Pro CPU

`benchmarks: weights=/content/yolov5/yolov5s.pt, imgsz=640, batch_size=1, data=/content/yolov5/data/coco128.yaml, device=cpu, half=False, test=False Checking setup... YOLOv5 🚀 v6.1-135-g7926afc torch 1.10.0+cu111 CPU Setup complete ✅ (8 CPUs, 51.0 GB RAM, 41.5/166.8 GB disk)

Benchmarks complete (241.20s) Format mAP@0.5:0.95 Inference time (ms) 0 PyTorch 0.4623 127.61 1 TorchScript 0.4623 131.23 2 ONNX 0.4623 69.34 3 OpenVINO 0.4623 66.52 4 TensorRT NaN NaN 5 CoreML NaN NaN 6 TensorFlow SavedModel 0.4623 123.79 7 TensorFlow GraphDef 0.4623 121.57 8 TensorFlow Lite 0.4623 316.61 9 TensorFlow Edge TPU NaN NaN 10 TensorFlow.js NaN NaN `

Export a Trained YOLOv5 Model

This command exports a pretrained YOLOv5s model to TorchScript and ONNX formats. yolov5s.pt is the 'small' model, the second-smallest model available. Other options are yolov5n.pt, yolov5m.pt, yolov5l.pt and yolov5x.pt, along with their P6 counterparts i.e. yolov5s6.pt or you own custom training checkpoint i.e. runs/exp/weights/best.pt. For details on all available models please see our README table.

python export.py --weights yolov5s.pt --include torchscript onnx

Tip

Add --half to export models at FP16 half precision for smaller file sizes

Output:

`export: data=data/coco128.yaml, weights=['yolov5s.pt'], imgsz=[640, 640], batch_size=1, device=cpu, half=False, inplace=False, train=False, keras=False, optimize=False, int8=False, dynamic=False, simplify=False, opset=12, verbose=False, workspace=4, nms=False, agnostic_nms=False, topk_per_class=100, topk_all=100, iou_thres=0.45, conf_thres=0.25, include=['torchscript', 'onnx'] YOLOv5 🚀 v6.2-104-ge3e5122 Python-3.8.0 torch-1.12.1+cu113 CPU

Downloading https://github.com/ultralytics/yolov5/releases/download/v6.2/yolov5s.pt to yolov5s.pt... 100% 14.1M/14.1M [00:00<00:00, 274MB/s]

Fusing layers... YOLOv5s summary: 213 layers, 7225885 parameters, 0 gradients

PyTorch: starting from yolov5s.pt with output shape (1, 25200, 85) (14.1 MB)

TorchScript: starting export with torch 1.12.1+cu113... TorchScript: export success ✅ 1.7s, saved as yolov5s.torchscript (28.1 MB)

ONNX: starting export with onnx 1.12.0... ONNX: export success ✅ 2.3s, saved as yolov5s.onnx (28.0 MB)

Export complete (5.5s) Results saved to /content/yolov5 Detect: python detect.py --weights yolov5s.onnx Validate: python val.py --weights yolov5s.onnx PyTorch Hub: model = torch.hub.load('ultralytics/yolov5', 'custom', 'yolov5s.onnx') Visualize: https://netron.app/ `

The 3 exported models will be saved alongside the original PyTorch model:

YOLO export locations

Netron Viewer is recommended for visualizing exported models:

YOLO model visualization

Exported Model Usage Examples

detect.py runs inference on exported models:

python detect.py --weights yolov5s.pt # PyTorch python detect.py --weights yolov5s.torchscript # TorchScript python detect.py --weights yolov5s.onnx # ONNX Runtime or OpenCV DNN with dnn=True python detect.py --weights yolov5s_openvino_model # OpenVINO python detect.py --weights yolov5s.engine # TensorRT python detect.py --weights yolov5s.mlmodel # CoreML (macOS only) python detect.py --weights yolov5s_saved_model # TensorFlow SavedModel python detect.py --weights yolov5s.pb # TensorFlow GraphDef python detect.py --weights yolov5s.tflite # TensorFlow Lite python detect.py --weights yolov5s_edgetpu.tflite # TensorFlow Edge TPU python detect.py --weights yolov5s_paddle_model # PaddlePaddle

val.py runs validation on exported models:

python val.py --weights yolov5s.pt # PyTorch python val.py --weights yolov5s.torchscript # TorchScript python val.py --weights yolov5s.onnx # ONNX Runtime or OpenCV DNN with dnn=True python val.py --weights yolov5s_openvino_model # OpenVINO python val.py --weights yolov5s.engine # TensorRT python val.py --weights yolov5s.mlmodel # CoreML (macOS Only) python val.py --weights yolov5s_saved_model # TensorFlow SavedModel python val.py --weights yolov5s.pb # TensorFlow GraphDef python val.py --weights yolov5s.tflite # TensorFlow Lite python val.py --weights yolov5s_edgetpu.tflite # TensorFlow Edge TPU python val.py --weights yolov5s_paddle_model # PaddlePaddle

Use PyTorch Hub with exported YOLOv5 models:

`import torch

Model

model = torch.hub.load("ultralytics/yolov5", "custom", "yolov5s.pt") model = torch.hub.load("ultralytics/yolov5", "custom", "yolov5s.torchscript ") # TorchScript model = torch.hub.load("ultralytics/yolov5", "custom", "yolov5s.onnx") # ONNX Runtime model = torch.hub.load("ultralytics/yolov5", "custom", "yolov5s_openvino_model") # OpenVINO model = torch.hub.load("ultralytics/yolov5", "custom", "yolov5s.engine") # TensorRT model = torch.hub.load("ultralytics/yolov5", "custom", "yolov5s.mlmodel") # CoreML (macOS Only) model = torch.hub.load("ultralytics/yolov5", "custom", "yolov5s_saved_model") # TensorFlow SavedModel model = torch.hub.load("ultralytics/yolov5", "custom", "yolov5s.pb") # TensorFlow GraphDef model = torch.hub.load("ultralytics/yolov5", "custom", "yolov5s.tflite") # TensorFlow Lite model = torch.hub.load("ultralytics/yolov5", "custom", "yolov5s_edgetpu.tflite") # TensorFlow Edge TPU model = torch.hub.load("ultralytics/yolov5", "custom", "yolov5s_paddle_model") # PaddlePaddle

Images

img = "https://ultralytics.com/images/zidane.jpg" # or file, Path, PIL, OpenCV, numpy, list

Inference

results = model(img)

Results

results.print() # or .show(), .save(), .crop(), .pandas(), etc. `

OpenCV DNN inference

OpenCV inference with ONNX models:

`python export.py --weights yolov5s.pt --include onnx

python detect.py --weights yolov5s.onnx --dnn # detect python val.py --weights yolov5s.onnx --dnn # validate `

C++ Inference

YOLOv5 OpenCV DNN C++ inference on exported ONNX model examples:

YOLOv5 OpenVINO C++ inference examples:

TensorFlow.js Web Browser Inference

Supported Environments

Ultralytics provides a range of ready-to-use environments, each pre-installed with essential dependencies such as CUDA, CUDNN, Python, and PyTorch, to kickstart your projects.

Project Status

YOLOv5 CI

This badge indicates that all YOLOv5 GitHub Actions Continuous Integration (CI) tests are successfully passing. These CI tests rigorously check the functionality and performance of YOLOv5 across various key aspects: training, validation, inference, export, and benchmarks. They ensure consistent and reliable operation on macOS, Windows, and Ubuntu, with tests conducted every 24 hours and upon each new commit.

📅 Created 1 year ago ✏️ Updated 1 month ago

glenn-jocher RizwanMunawar UltralyticsAssistant