Meet YOLO26: next-gen vision AI.

Link to this sectionتحميل YOLOv5 من PyTorch Hub#

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

Link to this sectionقبل البدء#

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

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     tie

Link to this sectionمثال مفصل#

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

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 size

Link 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إخفاء المخرجات (Silence Outputs)#

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

model = torch.hub.load("ultralytics/yolov5", "yolov5s", _verbose=False)  # load silently

Link to this sectionقنوات الإدخال#

لتحميل نموذج YOLOv5s مدرب مسبقاً بـ 4 قنوات إدخال بدلاً من القيمة الافتراضية 3:

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

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

Link to this sectionعدد الفئات (Classes)#

لتحميل نموذج YOLOv5s مدرب مسبقاً بـ 10 فئات إخراج بدلاً من القيمة الافتراضية 80:

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

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

Link to this sectionفرض إعادة التحميل (Force Reload)#

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

model = torch.hub.load("ultralytics/yolov5", "yolov5s", force_reload=True)  # force reload

Link 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الاستنتاج باستخدام وحدات معالجة رسومية متعددة (Multi-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 scratch

Link 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 results

Link to this sectionنتائج مقصوصة (Cropped)#

يمكن إرجاع النتائج وحفظها كمقتطفات كشف (detection crops):

results = model(im)  # inference
crops = results.crop(save=True)  # cropped detections dictionary

Link to this sectionنتائج Pandas#

يمكن إرجاع النتائج كـ Pandas DataFrames:

results = model(im)  # inference
results.pandas().xyxy[0]  # Pandas DataFrame
Pandas 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     tie

Link to this sectionنتائج مرتبة#

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

results = model(im)  # inference
results.pandas().xyxy[0].sort_values("xmin")  # sorted left-right

Link 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 predictions
JSON 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 مخصص مدرب على VOC بـ 20 فئة باستخدام الملف '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 repo

Link to this sectionنماذج TensorRT و ONNX و OpenVINO#

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

نصيحة
  • TensorRT يمكن أن يكون أسرع بمرتين إلى 5 مرات من PyTorch في معايير GPU.
  • ONNX و OpenVINO يمكن أن يكونا أسرع بمرتين إلى 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/")  # PaddlePaddle

Link to this sectionالبيئات المدعومة#

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

Link to this sectionحالة المشروع#

YOLOv5 CI

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

المساهمون

التعليقات