Link to this sectionتحميل YOLOv5 من PyTorch Hub#
📚 يشرح هذا الدليل كيفية تحميل YOLOv5 🚀 من PyTorch Hub على الرابط https://pytorch.org/hub/ultralytics_yolov5.
Link to this sectionقبل البدء#
قم بتثبيت requirements.txt في بيئة Python>=3.8.0، بما في ذلك PyTorch>=1.8. يتم تنزيل النماذج ومجموعات البيانات تلقائيًا من أحدث إصدار لـ YOLOv5.
pip install -r https://raw.githubusercontent.com/ultralytics/yolov5/master/requirements.txtاستنساخ ultralytics/yolov5 غير مطلوب — حيث يقوم PyTorch Hub بجلب الكود تلقائيًا.
Link to this sectionتحميل YOLOv5 باستخدام PyTorch Hub#
Link to this sectionمثال بسيط#
يقوم هذا المثال بتحميل نموذج YOLOv5s مدرب مسبقًا من PyTorch Hub كـ model وتمرير صورة للاستدلال. 'yolov5s' هو أخف وأسرع نموذج YOLOv5. للحصول على تفاصيل حول جميع النماذج المتاحة، يرجى الاطلاع على README.
import torch
# Model
model = torch.hub.load("ultralytics/yolov5", "yolov5s")
# Image
im = "https://ultralytics.com/images/zidane.jpg"
# Inference
results = model(im)
results.pandas().xyxy[0]
# xmin ymin xmax ymax confidence class name
# 0 749.50 43.50 1148.0 704.5 0.874023 0 person
# 1 433.50 433.50 517.5 714.5 0.687988 27 tie
# 2 114.75 195.75 1095.0 708.0 0.624512 0 person
# 3 986.00 304.00 1028.0 420.0 0.286865 27 tieLink to this sectionمثال مفصل#
يوضح هذا المثال الاستدلال المجمع (batched inference) باستخدام مصادر صور PIL و OpenCV. يمكن طباعة results إلى وحدة التحكم (console)، أو حفظها في runs/hub، أو عرضها على الشاشة في البيئات المدعومة، وإرجاعها كـ tensors أو كإطارات بيانات pandas.
import cv2
import torch
from PIL import Image
# Model
model = torch.hub.load("ultralytics/yolov5", "yolov5s")
# Images
for f in "zidane.jpg", "bus.jpg":
torch.hub.download_url_to_file("https://ultralytics.com/images/" + f, f) # download 2 images
im1 = Image.open("zidane.jpg") # PIL image
im2 = cv2.imread("bus.jpg")[..., ::-1] # OpenCV image (BGR to RGB)
# Inference
results = model([im1, im2], size=640) # batch of images
# Results
results.print()
results.save() # or .show()
results.xyxy[0] # im1 predictions (tensor)
results.pandas().xyxy[0] # im1 predictions (pandas)
# xmin ymin xmax ymax confidence class name
# 0 749.50 43.50 1148.0 704.5 0.874023 0 person
# 1 433.50 433.50 517.5 714.5 0.687988 27 tie
# 2 114.75 195.75 1095.0 708.0 0.624512 0 person
# 3 986.00 304.00 1028.0 420.0 0.286865 27 tie
For all inference options see YOLOv5 AutoShape() forward method.
Link to this sectionإعدادات الاستدلال#
تحتوي نماذج YOLOv5 على العديد من سمات الاستدلال مثل عتبة الثقة (confidence threshold)، وعتبة IoU، وما إلى ذلك، والتي يمكن ضبطها من خلال:
model.conf = 0.25 # NMS confidence threshold
model.iou = 0.45 # NMS IoU threshold
model.agnostic = False # NMS class-agnostic
model.multi_label = False # NMS multiple labels per box
model.classes = None # (optional list) filter by class, i.e. = [0, 15, 16] for COCO persons, cats and dogs
model.max_det = 1000 # maximum number of detections per image
model.amp = False # Automatic Mixed Precision (AMP) inference
results = model(im, size=320) # custom inference sizeLink to this sectionالجهاز (Device)#
يمكن نقل النماذج إلى أي جهاز بعد إنشائها:
model.cpu() # CPU
model.cuda() # GPU
model.to(device) # i.e. device=torch.device(0)يمكن أيضًا إنشاء النماذج مباشرة على أي device:
model = torch.hub.load("ultralytics/yolov5", "yolov5s", device="cpu") # load on CPUيتم نقل صور الإدخال تلقائيًا إلى جهاز النموذج الصحيح قبل الاستدلال.
Link to this sectionإسكات المخرجات#
يمكن تحميل النماذج بصمت (دون مخرجات نصية) باستخدام _verbose=False:
model = torch.hub.load("ultralytics/yolov5", "yolov5s", _verbose=False) # load silentlyLink to this sectionقنوات الإدخال#
لتحميل نموذج YOLOv5s مدرب مسبقًا بـ 4 قنوات إدخال بدلاً من 3 الافتراضية:
model = torch.hub.load("ultralytics/yolov5", "yolov5s", channels=4)في هذه الحالة، سيتكون النموذج من أوزان مدربة مسبقًا باستثناء طبقة الإدخال الأولى تمامًا، والتي لم تعد بنفس شكل طبقة الإدخال المدربة مسبقًا. ستظل طبقة الإدخال مهيأة بأوزان عشوائية.
Link to this sectionعدد الفئات#
لتحميل نموذج YOLOv5s مدرب مسبقًا بـ 10 فئات إخراج بدلاً من 80 الافتراضية:
model = torch.hub.load("ultralytics/yolov5", "yolov5s", classes=10)في هذه الحالة، سيتكون النموذج من أوزان مدربة مسبقًا باستثناء طبقات الإخراج، التي لم تعد بنفس شكل طبقات الإخراج المدربة مسبقًا. ستظل طبقات الإخراج مهيأة بأوزان عشوائية.
Link to this sectionفرض إعادة التحميل#
إذا واجهت مشاكل في الخطوات أعلاه، فقد يساعد ضبط force_reload=True عن طريق تجاهل ذاكرة التخزين المؤقت الحالية وفرض تنزيل جديد لأحدث إصدار من YOLOv5 من PyTorch Hub. توجد نسخ ذاكرة التخزين المؤقت في ~/.cache/torch/hub؛ حذف هذا المجلد يؤدي إلى نفس النتيجة.
model = torch.hub.load("ultralytics/yolov5", "yolov5s", force_reload=True) # force reloadLink to this sectionاستدلال لقطة الشاشة#
لتشغيل الاستدلال على شاشة سطح المكتب لديك:
import torch
from PIL import ImageGrab
# Model
model = torch.hub.load("ultralytics/yolov5", "yolov5s")
# Image
im = ImageGrab.grab() # take a screenshot
# Inference
results = model(im)Link to this sectionالاستدلال متعدد الـ GPU#
يمكن تحميل نماذج YOLOv5 على وحدات GPU متعددة بالتوازي مع الاستدلال المترابط (threaded inference):
import threading
import torch
def run(model, im):
"""Performs inference on an image using a given model and saves the output; model must support `.save()` method."""
results = model(im)
results.save()
# Models
model0 = torch.hub.load("ultralytics/yolov5", "yolov5s", device=0)
model1 = torch.hub.load("ultralytics/yolov5", "yolov5s", device=1)
# Inference
threading.Thread(target=run, args=[model0, "https://ultralytics.com/images/zidane.jpg"], daemon=True).start()
threading.Thread(target=run, args=[model1, "https://ultralytics.com/images/bus.jpg"], daemon=True).start()Link to this sectionالتدريب#
لتحميل نموذج YOLOv5 للتدريب بدلاً من الاستدلال، اضبط autoshape=False. لتحميل نموذج بأوزان مهيأة عشوائيًا (للتدريب من الصفر) استخدم pretrained=False. يجب عليك توفير نص التدريب الخاص بك في هذه الحالة. بدلاً من ذلك، راجع دليل تدريب YOLOv5 على بيانات مخصصة لتدريب النموذج.
import torch
model = torch.hub.load("ultralytics/yolov5", "yolov5s", autoshape=False) # load pretrained
model = torch.hub.load("ultralytics/yolov5", "yolov5s", autoshape=False, pretrained=False) # load scratchLink to this sectionنتائج Base64#
للاستخدام مع خدمات API. راجع مثال Flask REST API للحصول على التفاصيل.
import base64
from io import BytesIO
from PIL import Image
results = model(im) # inference
results.ims # array of original images (as np array) passed to model for inference
results.render() # updates results.ims with boxes and labels
for im in results.ims:
buffered = BytesIO()
im_base64 = Image.fromarray(im)
im_base64.save(buffered, format="JPEG")
print(base64.b64encode(buffered.getvalue()).decode("utf-8")) # base64 encoded image with resultsLink to this sectionالنتائج المقصوصة (Cropped)#
يمكن إرجاع النتائج وحفظها كمقاطع كشف:
results = model(im) # inference
crops = results.crop(save=True) # cropped detections dictionaryLink to this sectionنتائج Pandas#
يمكن إرجاع النتائج كـ Pandas DataFrames:
results = model(im) # inference
results.pandas().xyxy[0] # Pandas DataFramePandas Output (click to expand)
print(results.pandas().xyxy[0])
# xmin ymin xmax ymax confidence class name
# 0 749.50 43.50 1148.0 704.5 0.874023 0 person
# 1 433.50 433.50 517.5 714.5 0.687988 27 tie
# 2 114.75 195.75 1095.0 708.0 0.624512 0 person
# 3 986.00 304.00 1028.0 420.0 0.286865 27 tieLink to this sectionالنتائج المرتبة#
يمكن ترتيب النتائج حسب العمود، على سبيل المثال لترتيب اكتشاف أرقام لوحات الترخيص من اليسار إلى اليمين (المحور x):
results = model(im) # inference
results.pandas().xyxy[0].sort_values("xmin") # sorted left-rightLink to this sectionنتائج JSON#
Results can be returned in JSON format once converted to .pandas() dataframes using the .to_json() method. The JSON format can be modified using the orient argument. See pandas .to_json() documentation for details.
results = model(ims) # inference
results.pandas().xyxy[0].to_json(orient="records") # JSON img1 predictionsJSON Output (click to expand)
[
{
"xmin": 749.5,
"ymin": 43.5,
"xmax": 1148.0,
"ymax": 704.5,
"confidence": 0.8740234375,
"class": 0,
"name": "person"
},
{
"xmin": 433.5,
"ymin": 433.5,
"xmax": 517.5,
"ymax": 714.5,
"confidence": 0.6879882812,
"class": 27,
"name": "tie"
},
{
"xmin": 115.25,
"ymin": 195.75,
"xmax": 1096.0,
"ymax": 708.0,
"confidence": 0.6254882812,
"class": 0,
"name": "person"
},
{
"xmin": 986.0,
"ymin": 304.0,
"xmax": 1028.0,
"ymax": 420.0,
"confidence": 0.2873535156,
"class": 27,
"name": "tie"
}
]Link to this sectionنماذج مخصصة#
يقوم هذا المثال بتحميل نموذج YOLOv5s مخصص بـ 20 فئة ومدرب على VOC باسم 'best.pt' باستخدام PyTorch Hub.
import torch
model = torch.hub.load("ultralytics/yolov5", "custom", path="path/to/best.pt") # local model
model = torch.hub.load("path/to/yolov5", "custom", path="path/to/best.pt", source="local") # local repoLink to this sectionنماذج TensorRT و ONNX و OpenVINO#
يدعم PyTorch Hub الاستدلال على معظم تنسيقات تصدير YOLOv5، بما في ذلك النماذج المدربة مخصصًا. راجع دليل تصدير TFLite و ONNX و CoreML و TensorRT للحصول على تفاصيل حول تصدير النماذج.
- يمكن أن يكون TensorRT أسرع بـ 2-5 مرات من PyTorch في اختبارات أداء GPU.
- يمكن أن يكون ONNX و OpenVINO أسرع بـ 2-3 مرات من PyTorch في اختبارات أداء CPU.
import torch
model = torch.hub.load("ultralytics/yolov5", "custom", path="yolov5s.pt") # PyTorch
model = torch.hub.load("ultralytics/yolov5", "custom", path="yolov5s.torchscript") # TorchScript
model = torch.hub.load("ultralytics/yolov5", "custom", path="yolov5s.onnx") # ONNX
model = torch.hub.load("ultralytics/yolov5", "custom", path="yolov5s_openvino_model/") # OpenVINO
model = torch.hub.load("ultralytics/yolov5", "custom", path="yolov5s.engine") # TensorRT
model = torch.hub.load("ultralytics/yolov5", "custom", path="yolov5s.mlmodel") # CoreML (macOS-only)
model = torch.hub.load("ultralytics/yolov5", "custom", path="yolov5s.tflite") # TFLite
model = torch.hub.load("ultralytics/yolov5", "custom", path="yolov5s_paddle_model/") # PaddlePaddleLink to this sectionالبيئات المدعومة#
توفر Ultralytics مجموعة من البيئات الجاهزة للاستخدام، كل منها مثبت مسبقًا بالتبعيات الأساسية مثل CUDA، وCUDNN، وPython، وPyTorch، لبدء مشاريعك.
- دفاتر ملاحظات GPU مجانية:
- Google Cloud: دليل التشغيل السريع لـ GCP
- Amazon: دليل التشغيل السريع لـ AWS
- Azure: دليل التشغيل السريع لـ AzureML
- Docker: دليل التشغيل السريع لـ Docker
Link to this sectionحالة المشروع#
تشير هذه الشارة إلى أن جميع اختبارات التكامل المستمر (CI) الخاصة بـ YOLOv5 GitHub Actions تمر بنجاح. تتحقق اختبارات CI هذه بصرامة من وظائف وأداء YOLOv5 عبر جوانب رئيسية مختلفة: التدريب، والتحقق، والاستدلال، والتصدير، والمعايير. وهي تضمن التشغيل المتسق والموثوق على macOS وWindows وUbuntu، مع إجراء اختبارات كل 24 ساعة وعند كل التزام (commit) جديد.