Ultralytics YOLO27:
Get Started

تحميل YOLOv5 من PyTorch Hub#

📚 يشرح هذا الدليل كيفية تحميل YOLOv5 🚀 من PyTorch Hub عبر https://pytorch.org/hub/ultralytics_yolov5.

قبل البدء#

ثبّت 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 الشيفرة تلقائيًا.

تحميل YOLOv5 باستخدام PyTorch Hub#

مثال بسيط#

يحمّل هذا المثال نموذج 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     tie

مثال تفصيلي#

يوضح هذا المثال الاستدلال على دفعات باستخدام مصادر صور PIL و OpenCV. يمكن طباعة results في وحدة التحكم، و حفظه في runs/hub، و عرضه على الشاشة في البيئات المدعومة، وإرجاعه على هيئة موترات أو إطارات بيانات 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(f"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
YOLO inference results on zidane.jpg YOLO inference results on bus.jpg

للاطلاع على جميع خيارات الاستدلال، راجع الطريقة AutoShape() forward في YOLOv5.

إعدادات الاستدلال#

تتضمن نماذج YOLOv5 سمات استدلال مختلفة، مثل عتبة الثقة وعتبة IoU وغيرها، ويمكن ضبطها باستخدام:

model.conf = 0.25  # ⁨عتبة ثقة NMS⁩
model.iou = 0.45  # ⁨عتبة IoU لـ NMS⁩
model.agnostic = False  # ⁨NMS دون اعتبار للفئة⁩
model.multi_label = False  # ⁨تسميات متعددة لكل صندوق في NMS⁩
model.classes = None  # ⁨(قائمة اختيارية) التصفية حسب الفئة، مثل = [0, 15, 16] للأشخاص والقطط والكلاب في COCO⁩
model.max_det = 1000  # ⁨الحد الأقصى لعدد الاكتشافات لكل صورة⁩
model.amp = False  # ⁨الاستدلال بدقة مختلطة تلقائية (AMP)⁩

results = model(im, size=320)  # ⁨حجم استدلال مخصص⁩

الجهاز#

يمكن نقل النماذج إلى أي جهاز بعد إنشائها:

model.cpu()  # CPU
model.cuda()  # GPU
model.to(device)  # ⁨أي device=torch.device⁩(0)

يمكن أيضًا إنشاء النماذج مباشرةً على أي device:

model = torch.hub.load("ultralytics/yolov5", "yolov5s", device="cpu")  # ⁨التحميل على CPU⁩
نصيحة

تُنقل صور الإدخال تلقائيًا إلى جهاز النموذج الصحيح قبل الاستدلال.

إخفاء المخرجات#

يمكن تحميل النماذج بصمت باستخدام _verbose=False:

model = torch.hub.load("ultralytics/yolov5", "yolov5s", _verbose=False)  # ⁨التحميل بصمت⁩

قنوات الإدخال#

لتحميل نموذج YOLOv5s مدرّب مسبقًا بأربع قنوات إدخال بدلًا من العدد الافتراضي، وهو 3:

model = torch.hub.load("ultralytics/yolov5", "yolov5s", channels=4)

في هذه الحالة، سيتكون النموذج من أوزان مدرّبة مسبقًا باستثناء طبقة الإدخال الأولى، التي لم يعد شكلها مطابقًا لشكل طبقة الإدخال المدرّبة مسبقًا. وستظل طبقة الإدخال مهيأة بأوزان عشوائية.

عدد الفئات#

لتحميل نموذج YOLOv5s مدرّب مسبقًا بعشر فئات إخراج بدلًا من العدد الافتراضي، وهو 80:

model = torch.hub.load("ultralytics/yolov5", "yolov5s", classes=10)

في هذه الحالة، سيتكون النموذج من أوزان مدرّبة مسبقًا باستثناء طبقات الإخراج، التي لم يعد شكلها مطابقًا لشكل طبقات الإخراج المدرّبة مسبقًا. وستظل طبقات الإخراج مهيأة بأوزان عشوائية.

فرض إعادة التحميل#

إذا واجهت مشكلات في الخطوات أعلاه، فقد يساعد ضبط force_reload=True على التخلص من ذاكرة التخزين المؤقت الحالية وفرض تنزيل جديد لأحدث إصدار من YOLOv5 من PyTorch Hub. توجد النسخ المخزنة مؤقتًا في ~/.cache/torch/hub؛ ويؤدي حذف هذا المجلد إلى النتيجة نفسها.

model = torch.hub.load("ultralytics/yolov5", "yolov5s", force_reload=True)  # ⁨فرض إعادة التحميل⁩

الاستدلال من لقطة شاشة#

لتشغيل الاستدلال على شاشة سطح المكتب:

import torch
from PIL import ImageGrab

# Model
model = torch.hub.load("ultralytics/yolov5", "yolov5s")

# Image
im = ImageGrab.grab()  # ⁨التقاط لقطة شاشة⁩

# Inference
results = model(im)

الاستدلال باستخدام وحدات GPU متعددة#

يمكن تحميل نماذج YOLOv5 على وحدات GPU متعددة بالتوازي باستخدام الاستدلال متعدد الخيوط:

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()

التدريب#

لتحميل نموذج YOLOv5 للتدريب بدلًا من الاستدلال، عيّن autoshape=False. ولتحميل نموذج بأوزان مهيأة عشوائيًا (للتدريب من البداية)، استخدم pretrained=False. يجب أن توفر نص التدريب الخاص بك في هذه الحالة. أو راجع البرنامج التعليمي لتدريب YOLOv5 على بيانات مخصصة لتدريب النموذج.

import torch

model = torch.hub.load("ultralytics/yolov5", "yolov5s", autoshape=False)  # ⁨تحميل نموذج مدرّب مسبقًا⁩
model = torch.hub.load("ultralytics/yolov5", "yolov5s", autoshape=False, pretrained=False)  # ⁨تحميل نموذج من البداية⁩

النتائج بترميز Base64#

للاستخدام مع خدمات API. راجع مثال Flask REST API للاطلاع على التفاصيل.

import base64
from io import BytesIO

from PIL import Image

results = model(im)  # inference

results.ims  # ⁨مصفوفة الصور الأصلية (على هيئة مصفوفة np) الممررة إلى النموذج للاستدلال⁩
results.render()  # ⁨يحدّث results.ims بالمربعات والتسميات⁩
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 تتضمن النتائج⁩

النتائج المقصوصة#

يمكن إرجاع النتائج وحفظها على هيئة قصاصات للاكتشافات:

results = model(im)  # inference
crops = results.crop(save=True)  # ⁨قاموس الاكتشافات المقصوصة⁩

نتائج Pandas#

يمكن إرجاع النتائج على هيئة إطارات بيانات Pandas:

results = model(im)  # inference
results.pandas().xyxy[0]  # ⁨إطار بيانات Pandas⁩
مخرجات pandas (انقر للتوسيع)
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     tie

النتائج المرتبة#

يمكن ترتيب النتائج حسب العمود، مثل ترتيب اكتشاف أرقام لوحات السيارات من اليسار إلى اليمين (المحور x):

results = model(im)  # inference
results.pandas().xyxy[0].sort_values("xmin")  # ⁨مرتبة من اليسار إلى اليمين⁩

نتائج JSON#

يمكن إرجاع النتائج بتنسيق JSON بعد تحويلها إلى إطارات بيانات .pandas() باستخدام الطريقة .to_json(). ويمكن تعديل تنسيق JSON باستخدام الوسيطة orient. للاطلاع على التفاصيل، راجع توثيق pandas .to_json().

results = model(im)  # inference
results.pandas().xyxy[0].to_json(orient="records")  # ⁨تنبؤات JSON للصورة1⁩
مخرجات JSON (انقر للتوسيع)
[
    {
        "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"
    }
]

نماذج مخصصة#

يحمّل هذا المثال نموذج YOLOv5s مخصصًا ومدرّبًا على 20 فئة من VOC، وهو 'best.pt'، باستخدام PyTorch Hub.

import torch

model = torch.hub.load("ultralytics/yolov5", "custom", path="path/to/best.pt")  # ⁨نموذج محلي⁩
model = torch.hub.load("path/to/yolov5", "custom", path="path/to/best.pt", source="local")  # ⁨مستودع محلي⁩

نماذج TensorRT وONNX وOpenVINO#

يدعم PyTorch Hub الاستدلال باستخدام معظم تنسيقات تصدير YOLOv5، بما فيها النماذج المدرّبة تدريبًا مخصصًا. راجع البرنامج التعليمي لتصدير TFLite وONNX وCoreML وTensorRT لمزيد من التفاصيل حول تصدير النماذج.

نصيحة
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.mlpackage")  # ⁨CoreML (لـ macOS فقط)⁩
model = torch.hub.load("ultralytics/yolov5", "custom", path="yolov5s.tflite")  # TFLite
model = torch.hub.load("ultralytics/yolov5", "custom", path="yolov5s_paddle_model/")  # PaddlePaddle

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

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

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

YOLOv5 CI

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

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

  • لا. ينزّل torch.hub.load("ultralytics/yolov5", ...) الشيفرة إلى ~/.cache/torch/hub والأوزان عند الاستخدام لأول مرة. ولا يلزم تثبيت سوى الحزم الموجودة في requirements.txt.

  • استخدم نقطة الدخول custom مع مسار نقطة التحقق: torch.hub.load("ultralytics/yolov5", "custom", path="runs/train/exp/weights/best.pt"). أضف source="local" ومسارًا إلى مستودع محلي للتحميل دون الوصول إلى الشبكة.

  • نعم. مرّر الملف المُصدّر إلى أداة التحميل نفسها custom، وسيختار YOLOv5 الواجهة الخلفية المطابقة استنادًا إلى امتداد الملف، مثل yolov5s.onnx أو yolov5s.engine أو yolov5s_openvino_model/.

  • مرّر force_reload=True لإزالة المستودع المخزّن مؤقتًا وجلب أحدث الشيفرة، أو احذف ~/.cache/torch/hub يدويًا. يؤدي ذلك أيضًا إلى الحصول على الإصدارات الجديدة من YOLOv5.

  • تعيد results.xyxy[0] موترًا يتكوّن من صفوف [x1, y1, x2, y2, confidence, class]، بينما تعيد results.pandas().xyxy[0] إطار بيانات يتضمن أسماء الفئات، وينشئ .to_json(orient="records") على إطار البيانات هذا مخرجات JSON.

التعليقات