PyTorch محور
📚 يشرح هذا الدليل كيفية التحميل YOLOv5 🚀 من PyTorch المحور في https://pytorch.org/hub/ultralytics_yolov5.
قبل البدء
تثبيت requirements.txt في ملف Python>=3.8.0 بيئة، بما في ذلك PyTorch>=1.8. يتم تنزيل النماذج ومجموعات البيانات تلقائيا من الأحدث YOLOv5 إطلاق سراح.
💡 بروتيب: الاستنساخ 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
لجميع خيارات الاستدلال انظر 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
جهاز
يمكن نقل النماذج إلى أي جهاز بعد الإنشاء:
يمكن أيضا إنشاء النماذج مباشرة على أي device
:
💡 ProTip: يتم نقل صور الإدخال تلقائيا إلى جهاز الطراز الصحيح قبل الاستدلال.
مخرجات الصمت
يمكن تحميل النماذج بصمت مع _verbose=False
:
قنوات الإدخال
لتحميل نموذج YOLOv5s تم تدريبه مسبقا ب 4 قنوات إدخال بدلا من 3 قنوات افتراضية:
في هذه الحالة ، سيتكون النموذج من أوزان مدربة مسبقا باستثناء طبقة الإدخال الأولى ، والتي لم تعد بنفس شكل طبقة الإدخال المدربة مسبقا. ستظل طبقة الإدخال مهيأة بواسطة أوزان عشوائية.
عدد الفصول
لتحميل نموذج YOLOv5s تم تدريبه مسبقا ب 10 فئات إخراج بدلا من 80 الافتراضي:
في هذه الحالة ، سيتكون النموذج من أوزان مدربة مسبقا باستثناء طبقات الإخراج ، والتي لم تعد بنفس شكل طبقات الإخراج المدربة مسبقا. ستبقى طبقات المخرجات مهيأة بأوزان عشوائية.
فرض إعادة التحميل
إذا واجهت مشاكل مع الخطوات المذكورة أعلاه ، فقم بإعداد force_reload=True
قد يساعد عن طريق تجاهل ذاكرة التخزين المؤقت الموجودة وفرض تنزيل جديد لأحدث إصدار YOLOv5 الإصدار من PyTorch محور.
استنتاج لقطة الشاشة
لتشغيل الاستدلال على شاشة سطح المكتب:
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
للاستخدام مع خدمات واجهة برمجة التطبيقات. ان ظر 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
النتائج التي تم اقتصاصها
يمكن إرجاع النتائج وحفظها كمحاصيل كشف:
نتائج الباندا
يمكن إرجاع النتائج كإطارات بيانات باندا:
إخراج الباندا (انقر للتوسيع)
النتائج التي تم فرزها
يمكن فرز النتائج حسب العمود ، أي لفرز اكتشاف أرقام لوحة الترخيص من اليسار إلى اليمين (المحور السيني):
النتائج التي تم اقتصاصها في الصندوق
يمكن إرجاع النتائج وحفظها كمحاصيل كشف:
نتائج 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لبدء مشاريعك.
- GPU دفاتر مجاناً:
- Google السحابة: دليل البدء السريع لـ GCP
- Amazon: دليل التشغيل السريع لخدمة AWS
- Azure: دليل التشغيل السريع AzureML
- عامل ميناء: دليل التشغيل السريع ل Docker
حالة المشروع
تشير هذه الشارة إلى أن جميع YOLOv5 اجتياز اختبارات التكامل المستمر (CI) لإجراءات GitHub بنجاح. تتحقق اختبارات CI هذه بدقة من وظائف وأداءYOLOv5 عبر جوانب رئيسية مختلفة: التدريب ، والتحقق من الصحة ، والاستدلال ، والتصدير ، والمعايير. إنها تضمن التشغيل المتسق والموثوق به على macOS و Windows و Ubuntu ، مع إجراء الاختبارات كل 24 ساعة وعند كل التزام جديد.