انتقل إلى المحتوى

PyTorch محور

📚 يشرح هذا الدليل كيفية التحميل YOLOv5 🚀 من PyTorch المحور في 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 المحور ك model ويمرر صورة للاستدلال. 'yolov5s' هو الأخف والأسرع YOLOv5 نموذج. للحصول على تفاصيل حول جميع الموديلات المتاحة ، يرجى الاطلاع على اقرأني.

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

مثال مفصل

يوضح هذا المثال الاستدلال المجمعة مع بيل و أوبن سي في مصادر الصور. 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 نتائج الاستدلال على zidane.jpg YOLO نتائج الاستدلال على bus.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 محور.

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

نتائج الأساس64

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

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

نتائج الباندا

يمكن إرجاع النتائج كإطارات بيانات باندا:

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 محور.

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 تنسيقات التصدير ، بما في ذلك النماذج المدربة المخصصة. رأى تفليت, 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 سي آي

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



تم الإنشاء 2023-11-12-2023، تم التحديث 2024-06-10
المؤلفون: جلين-جوتشر (7)، برهان-ق (1)

التعليقات