Ultralytics YOLO27: Bekleme listesine katıl.
Başla

TFLite, ONNX, CoreML, TensorRT Dışa Aktarma#

Bu kılavuz, eğitilmiş bir YOLOv5 modelinin PyTorch üzerinden ONNX, TensorRT, CoreML ve daha fazlasını içeren çeşitli dağıtım biçimlerine nasıl aktarılacağını açıklar.

Başlamadan Önce#

Depoyu klonla ve Python>=3.8.0 ortamında requirements.txt dosyasındaki gereksinimleri, PyTorch>=1.8 dâhil olmak üzere yükle. Modeller ve veri kümeleri, en son YOLOv5 sürümünden otomatik olarak indirilir.

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

YOLOv5 Colab notebook ekinde bir TensorRT dışa aktarma örneği bulunur (GPU gerektirir). Open In Colab

Desteklenen Dışa Aktarma Biçimleri#

YOLOv5 çıkarımı resmî olarak 12 biçimde desteklenir:

Performans İpuçları
  • CPU'da 3 kata kadar hız artışı için ONNX veya OpenVINO biçiminde dışa aktar. CPU Kıyaslamalarına bak.
  • GPU'da 5 kata kadar hız artışı için TensorRT biçiminde dışa aktar. GPU Kıyaslamalarına bak.
Biçimexport.py --includeModel
PyTorch-yolov5s.pt
TorchScripttorchscriptyolov5s.torchscript
ONNXonnxyolov5s.onnx
OpenVINOopenvinoyolov5s_openvino_model/
TensorRTengineyolov5s.engine
CoreMLcoremlyolov5s.mlpackage
TensorFlow SavedModelsaved_modelyolov5s_saved_model/
TensorFlow GraphDefpbyolov5s.pb
TensorFlow Litetfliteyolov5s.tflite
TensorFlow Edge TPUedgetpuyolov5s_edgetpu.tflite
TensorFlow.jstfjsyolov5s_web_model/
PaddlePaddlepaddleyolov5s_paddle_model/

Kıyaslamalar#

Aşağıdaki kıyaslamalar, YOLOv5 öğretici notebook'u Open In Colab ile Colab Pro üzerinde çalıştırılır. Sonuçları yeniden üretmek için:

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      mAP50-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      mAP50-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

Eğitilmiş YOLOv5 Modelini Dışa Aktarma#

Bu komut, önceden eğitilmiş bir YOLOv5s modelini TorchScript ve ONNX biçimlerine aktarır. yolov5s.pt, mevcut modeller arasında en küçük ikinci model olan 'small' modelidir. Diğer seçenekler önceden eğitilmiş kontrol noktaları yolov5n.pt, yolov5m.pt, yolov5l.pt ve yolov5x.pt ile bunların P6 karşılıkları (ör. yolov5s6.pt) ya da kendi özel eğitim kontrol noktan (ör. runs/train/exp/weights/best.pt) olabilir.

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

Daha küçük dosya boyutları için modelleri FP16 yarı duyarlıkta dışa aktarmak üzere --half ekle.

Çıktı:

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/

Dışa aktarılan modeller, özgün PyTorch modelinin yanına kaydedilir:

Exported YOLOv5 model files saved alongside the PyTorch weights

Dışa aktarılan modelleri görselleştirmek için Netron Viewer önerilir:

Exported YOLOv5 model graph visualized in Netron

Dışa Aktarılan Model Kullanım Örnekleri#

detect.py, dışa aktarılan modeller üzerinde çıkarım çalıştırır:

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
python detect.py --weights yolov5s_openvino_model # OpenVINO
python detect.py --weights yolov5s.engine         # TensorRT
python detect.py --weights yolov5s.mlpackage      # 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, dışa aktarılan modeller üzerinde doğrulama çalıştırır:

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
python val.py --weights yolov5s_openvino_model # OpenVINO
python val.py --weights yolov5s.engine         # TensorRT
python val.py --weights yolov5s.mlpackage      # 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

Dışa aktarılan YOLOv5 modellerini PyTorch Hub ile kullan:

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.mlpackage")  # CoreML (yalnızca macOS)
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"  # veya file, Path, PIL, OpenCV, numpy, list

# Inference
results = model(img)

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

OpenCV DNN çıkarımı#

ONNX modelleriyle OpenCV çıkarımı:

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++ Çıkarımı#

Dışa aktarılan ONNX modelinde YOLOv5 OpenCV DNN C++ çıkarım örnekleri:

YOLOv5 OpenVINO C++ çıkarım örnekleri:

TensorFlow.js Web Tarayıcısı Çıkarımı#

Desteklenen Ortamlar#

Ultralytics, projelerine hızlıca başlaman için CUDA, cuDNN, Python ve PyTorch gibi temel bağımlılıkların önceden yüklendiği, kullanıma hazır çeşitli ortamlar sunar.

Proje Durumu#

YOLOv5 CI

Bu rozet, tüm YOLOv5 GitHub Actions Sürekli Entegrasyon (CI) testlerinin başarıyla geçtiğini gösterir. Bu CI testleri, YOLOv5'in işlevselliğini ve performansını eğitim, doğrulama, çıkarım, dışa aktarma ve karşılaştırmalı testler gibi temel alanlarda titizlikle denetler. Testler her 24 saatte bir ve her yeni gönderimde gerçekleştirilerek macOS, Windows ve Ubuntu'da tutarlı ve güvenilir çalışma sağlanır.

Sık Sorulan Sorular#

  • CPU dağıtımı için ONNX veya OpenVINO kullan; bunlar PyTorch'tan 3 kata kadar daha hızlı çalışır. NVIDIA GPU'lar içinse 5 kata kadar daha hızlı çalışan TensorRT'yi kullan. CoreML, Apple aygıtlarını; TensorFlow Lite veya Edge TPU ise Android ve Coral donanımlarını hedefler.

  • --half ekle. Çoğu biçimde yarı hassasiyet GPU gerektirir; bu nedenle --device 0 değerini de ilet. CoreML istisnadır ve FP16 dışa aktarma işlemini CPU'da yapabilir.

  • Evet. --dynamic ekle. ONNX dışa aktarımlarında toplu iş, yükseklik ve genişlik eksenleri dinamik olur ve izleme CPU'da yapılır; bu nedenle --device 0 değerini belirtme. TensorRT dışa aktarımlarında görüntü boyutu sabit kalır ve yalnızca toplu iş boyutu değişir: yine de --device 0 gerekir ve --batch-size, motorun kabul ettiği en büyük toplu iş boyutunu ayarlar.

  • Dışa aktarılan dosyayı detect.py --weights, val.py --weights veya torch.hub.load("ultralytics/yolov5", "custom", "yolov5s.onnx") öğesine ilet. YOLOv5, dosya uzantısına göre doğru arka ucu seçer.

Yorumlar

Bir soru sor, sonuçlarını paylaş veya başka birine yardım et.