تخطي إلى المحتوى

تحميل YOLOv5 من PyTorch Hub

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

قبل أن تبدأ

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

pip install -r https://raw.githubusercontent.com/ultralytics/yolov5/master/requirements.txt

💡 نصيحة للمحترفين: استنساخ https://github.com/ultralytics/yolov5 غير مطلوب 😃

تحميل 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, أظهرت إلى الشاشة على البيئات المدعومة، وإعادتها كـ الموترات (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 على zidane.jpg نتائج الاستدلال لـ YOLO على bus.jpg

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

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

تحتوي نماذج YOLOv5 على سمات استدلال متنوعة مثل عتبة الثقة، و عتبة 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

الجهاز

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

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

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

إسكات المخرجات

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

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

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

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

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

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

عدد الفئات

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

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

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

إعادة تحميل إجبارية

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

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

استنتاج لقطة الشاشة

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

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)

الاستدلال متعدد وحدات معالجة الرسوميات

يمكن تحميل نماذج YOLOv5 إلى وحدات معالجة الرسوميات (GPUs) متعددة بالتوازي مع الاستدلال متعدد الخيوط:

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)  # load pretrained
model = torch.hub.load("ultralytics/yolov5", "yolov5s", autoshape=False, pretrained=False)  # load scratch

نتائج 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

نتائج الاقتصاص

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

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

نتائج Pandas

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

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

نتائج مُرتَّبة

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

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

نتائج مقصوصة بالمربع

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

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

نتائج JSON

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

results = model(ims)  # inference
results.pandas().xyxy[0].to_json(orient="records")  # JSON img1 predictions
ناتج 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"
    }
]

نماذج مخصصة

يقوم هذا المثال بتحميل 20 فئة مخصصة VOC- نموذج YOLOv5s مُدرَّب. '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

نماذج TensorRT و ONNX و OpenVINO

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

💡 نصيحة للمحترفين: قد يكون 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/")  # PaddlePaddle

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

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

حالة المشروع

YOLOv5 CI

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



📅 تم الإنشاء منذ سنة واحدة ✏️ تم التحديث منذ 4 أشهر

تعليقات