Ultralytics YOLO27:
Get Started

تصدير TFLite وONNX وCoreML وTensorRT#

📚 يشرح هذا الدليل كيفية تصدير نموذج YOLOv5 🚀 مدرّب من PyTorch إلى تنسيقات متنوعة للنشر، بما فيها ONNX وTensorRT وCoreML وغيرها.

قبل البدء#

استنسخ المستودع وثبّت requirements.txt في بيئة Python>=3.8.0، بما في ذلك PyTorch>=1.8. تُنزّل النماذج ومجموعات البيانات تلقائيًا من إصدار YOLOv5 الأحدث.

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

للاطلاع على مثال لتصدير TensorRT (يتطلب GPU)، راجع قسم الملحق في دفتر الملاحظات على Colab. Open In Colab

تنسيقات التصدير المدعومة#

يُدعم الاستدلال باستخدام YOLOv5 رسميًا بـ 12 تنسيقًا:

نصائح لتحسين الأداء
  • صدّر إلى ONNX أو OpenVINO لزيادة سرعة CPU بمقدار يصل إلى 3 أضعاف. راجع معايير أداء CPU.
  • صدّر إلى TensorRT لزيادة سرعة GPU بمقدار يصل إلى 5 أضعاف. راجع معايير أداء GPU.
التنسيقexport.py --includeالنموذج
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/

المعايير المرجعية#

أُجريت المعايير أدناه على Colab Pro باستخدام دفتر YOLOv5 التعليمي Open In Colab. لإعادة إجرائها:

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

GPU من نوع V100 على Colab Pro#

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

CPU على Colab Pro#

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

تصدير نموذج YOLOv5 مدرّب#

يصدّر هذا الأمر نموذج YOLOv5s مدرّبًا مسبقًا إلى تنسيقي TorchScript وONNX. yolov5s.pt هو النموذج «الصغير»، وهو ثاني أصغر النماذج المتاحة. وتشمل الخيارات الأخرى yolov5n.pt وyolov5m.pt وyolov5l.pt وyolov5x.pt، إضافة إلى نظائرها من P6، مثل yolov5s6.pt، أو نقطة تحقق خاصة بك من التدريب المخصص، مثل runs/train/exp/weights/best.pt. للاطلاع على تفاصيل جميع النماذج المتاحة، راجع الجدول في ملف README.

python export.py --weights yolov5s.pt --include torchscript onnx
نصيحة

أضف --half لتصدير النماذج بدقة FP16 النصفية لتقليل أحجام الملفات، راجع التفاصيل.

المخرجات:

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/

ستُحفَظ النماذج المُصدَّرة بجوار نموذج PyTorch الأصلي:

YOLO export locations

يُوصى باستخدام عارض Netron لتصوير النماذج المُصدَّرة:

YOLO model visualization

أمثلة على استخدام النماذج المُصدَّرة#

يشغّل detect.py الاستدلال على النماذج المُصدَّرة:

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 التحقق من صحة النماذج المُصدَّرة:

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

استخدم PyTorch Hub مع نماذج YOLOv5 المُصدَّرة:

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⁩
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 (لـ 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"  # ⁨أو ملف، Path، PIL، OpenCV، numpy، قائمة⁩

# Inference
results = model(img)

# Results
results.print()  # ⁨or .show(), .save(), .crop(), .pandas()، إلخ.⁩

الاستدلال باستخدام OpenCV DNN#

الاستدلال باستخدام OpenCV ونماذج ONNX:

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++#

أمثلة على الاستدلال باستخدام YOLOv5 وOpenCV DNN بلغة C++ على نموذج ONNX مُصدَّر:

أمثلة على الاستدلال باستخدام YOLOv5 وOpenVINO بلغة C++:

الاستدلال في متصفح الويب باستخدام TensorFlow.js#

البيئات المدعومة#

توفر Ultralytics مجموعة من البيئات الجاهزة للاستخدام، وكل منها مثبت مسبقًا به التبعيات الأساسية مثل CUDA وCUDNN وPython وPyTorch، لتتمكن من بدء مشاريعك.

حالة المشروع#

YOLOv5 CI

تشير هذه الشارة إلى اجتياز جميع اختبارات التكامل المستمر (CI) الخاصة بـ إجراءات YOLOv5 على GitHub بنجاح. وتتحقق اختبارات CI بدقة من وظائف YOLOv5 وأدائه في جوانب رئيسية متعددة: التدريب والتحقق والاستدلال والتصدير واختبارات الأداء. وهي تضمن التشغيل المتسق والموثوق على macOS وWindows وUbuntu، مع إجراء الاختبارات كل 24 ساعة وعند كل إيداع جديد.

الأسئلة الشائعة#

  • استخدم ONNX أو OpenVINO للنشر على CPU، إذ يقدّمان سرعة تصل إلى 3 أضعاف سرعة PyTorch، واستخدم TensorRT مع وحدات GPU من NVIDIA، إذ يقدّم سرعة تصل إلى 5 أضعاف. يستهدف CoreML أجهزة Apple، بينما يستهدف TensorFlow Lite أو Edge TPU أجهزة Android وعتاد Coral.

  • أضف --half. تتطلب الدقة النصفية GPU في معظم التنسيقات، لذا مرّر --device 0 أيضًا؛ أما CoreML فهو استثناء، إذ يمكنه التصدير بدقة FP16 على CPU.

  • نعم. أضف --dynamic. يتضمن تصدير ONNX محاور ديناميكية للدفعة والارتفاع والعرض، ويُتتبَّع على CPU، لذا احذف --device 0. أما تصدير TensorRT فيُبقي حجم الصورة ثابتًا ويغيّر بُعد الدفعة فقط: ولا يزال يتطلب --device 0، ويحدد --batch-size أكبر دفعة تقبلها وحدة الاستدلال.

  • مرّر الملف المُصدَّر إلى detect.py --weights أو val.py --weights أو torch.hub.load("ultralytics/yolov5", "custom", "yolov5s.onnx"). يختار YOLOv5 الواجهة الخلفية الصحيحة استنادًا إلى امتداد الملف.

التعليقات