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

PyTorch المحور

📚 يشرح هذا الدليل كيفية التحميل YOLOv5 🚀 من PyTorch Hub على https:// 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

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

التحميل YOLOv5 مع PyTorch المحور

مثال بسيط

يقوم هذا المثال بتحميل نموذج 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, أظهر للشاشة على البيئات المدعومة، ويتم إرجاعها على أنها الموترون أو الباندا إطارات البيانات.

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 نتائج الاستدلال على زيدان.jpg YOLO نتائج الاستدلال على الحافلة.jpg

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

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

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

model.conf = 0.25  # NMS confidence threshold
iou = 0.45  # NMS IoU threshold
agnostic = False  # NMS class-agnostic
multi_label = False  # NMS multiple labels per box
classes = None  # (optional list) filter by class, i.e. = [0, 15, 16] for COCO persons, cats and dogs
max_det = 1000  # maximum number of detections per image
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

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

مخرجات الصمت

يمكن تحميل النماذج بصمت مع _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)

استدلال متعددGPU

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

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

للاستخدام مع خدمات واجهة برمجة التطبيقات. ان ظر https://github.com/ultralytics/ / yolov5/pull/2291 ومثال Flask REST API للحصول على التفاصيل.

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 DataFrames:

results = model(im)  # inference
results.pandas().xyxy[0]  # Pandas DataFrame
مخرجات الباندا (انقر للتوسيع)
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() الطريقة. يمكن تعديل تنسيق JSON باستخدام طريقة orient الحجة. انظر الباندا .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 فئة مخصصة المركبات العضوية المتطايرة-نموذج 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 تصدير البرنامج التعليمي للحصول على تفاصيل حول تصدير النماذج.

💡 ProTip: TensorRT قد يكون أسرع بما يصل إلى 2-5 أضعاف من PyTorch على GPU المعايير 💡 ProTip: 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) لإجراءات GitHub YOLOv5 بنجاح. تتحقق اختبارات التكامل المستمر هذه بدقة من وظائف وأداء YOLOv5 عبر مختلف الجوانب الرئيسية: التدريب والتحقق من الصحة والاستدلال والتصدير والمعايير. وهي تضمن تشغيلًا متسقًا وموثوقًا على أنظمة macOS وWindows وUbuntu، مع إجراء الاختبارات كل 24 ساعة وعند كل التزام جديد.

📅 تم إنشاؤها منذ 1 سنة مضت ✏️ تم التحديث منذ 1 شهر

التعليقات