تحميل YOLOv5 من PyTorch Hub#
📚 يشرح هذا الدليل كيفية تحميل YOLOv5 🚀 من PyTorch Hub عبر 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ليس من الضروري استنساخ ultralytics/yolov5 — إذ يجلب PyTorch Hub الشيفرة تلقائيًا.
تحميل 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، و عرضه على الشاشة في البيئات المدعومة، وإرجاعه على هيئة موترات أو إطارات بيانات 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(f"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
للاطلاع على جميع خيارات الاستدلال، راجع الطريقة AutoShape() forward في YOLOv5.
إعدادات الاستدلال#
تتضمن نماذج YOLOv5 سمات استدلال مختلفة، مثل عتبة الثقة وعتبة IoU وغيرها، ويمكن ضبطها باستخدام:
model.conf = 0.25 # عتبة ثقة NMS
model.iou = 0.45 # عتبة IoU لـ NMS
model.agnostic = False # NMS دون اعتبار للفئة
model.multi_label = False # تسميات متعددة لكل صندوق في NMS
model.classes = None # (قائمة اختيارية) التصفية حسب الفئة، مثل = [0, 15, 16] للأشخاص والقطط والكلاب في COCO
model.max_det = 1000 # الحد الأقصى لعدد الاكتشافات لكل صورة
model.amp = False # الاستدلال بدقة مختلطة تلقائية (AMP)
results = model(im, size=320) # حجم استدلال مخصصالجهاز#
يمكن نقل النماذج إلى أي جهاز بعد إنشائها:
model.cpu() # CPU
model.cuda() # GPU
model.to(device) # أي device=torch.device(0)يمكن أيضًا إنشاء النماذج مباشرةً على أي device:
model = torch.hub.load("ultralytics/yolov5", "yolov5s", device="cpu") # التحميل على CPUتُنقل صور الإدخال تلقائيًا إلى جهاز النموذج الصحيح قبل الاستدلال.
إخفاء المخرجات#
يمكن تحميل النماذج بصمت باستخدام _verbose=False:
model = torch.hub.load("ultralytics/yolov5", "yolov5s", _verbose=False) # التحميل بصمتقنوات الإدخال#
لتحميل نموذج YOLOv5s مدرّب مسبقًا بأربع قنوات إدخال بدلًا من العدد الافتراضي، وهو 3:
model = torch.hub.load("ultralytics/yolov5", "yolov5s", channels=4)في هذه الحالة، سيتكون النموذج من أوزان مدرّبة مسبقًا باستثناء طبقة الإدخال الأولى، التي لم يعد شكلها مطابقًا لشكل طبقة الإدخال المدرّبة مسبقًا. وستظل طبقة الإدخال مهيأة بأوزان عشوائية.
عدد الفئات#
لتحميل نموذج YOLOv5s مدرّب مسبقًا بعشر فئات إخراج بدلًا من العدد الافتراضي، وهو 80:
model = torch.hub.load("ultralytics/yolov5", "yolov5s", classes=10)في هذه الحالة، سيتكون النموذج من أوزان مدرّبة مسبقًا باستثناء طبقات الإخراج، التي لم يعد شكلها مطابقًا لشكل طبقات الإخراج المدرّبة مسبقًا. وستظل طبقات الإخراج مهيأة بأوزان عشوائية.
فرض إعادة التحميل#
إذا واجهت مشكلات في الخطوات أعلاه، فقد يساعد ضبط force_reload=True على التخلص من ذاكرة التخزين المؤقت الحالية وفرض تنزيل جديد لأحدث إصدار من YOLOv5 من PyTorch Hub. توجد النسخ المخزنة مؤقتًا في ~/.cache/torch/hub؛ ويؤدي حذف هذا المجلد إلى النتيجة نفسها.
model = torch.hub.load("ultralytics/yolov5", "yolov5s", force_reload=True) # فرض إعادة التحميلالاستدلال من لقطة شاشة#
لتشغيل الاستدلال على شاشة سطح المكتب:
import torch
from PIL import ImageGrab
# Model
model = torch.hub.load("ultralytics/yolov5", "yolov5s")
# Image
im = ImageGrab.grab() # التقاط لقطة شاشة
# Inference
results = model(im)الاستدلال باستخدام وحدات GPU متعددة#
يمكن تحميل نماذج YOLOv5 على وحدات GPU متعددة بالتوازي باستخدام الاستدلال متعدد الخيوط:
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) # تحميل نموذج مدرّب مسبقًا
model = torch.hub.load("ultralytics/yolov5", "yolov5s", autoshape=False, pretrained=False) # تحميل نموذج من البدايةالنتائج بترميز Base64#
للاستخدام مع خدمات API. راجع مثال Flask REST API للاطلاع على التفاصيل.
import base64
from io import BytesIO
from PIL import Image
results = model(im) # inference
results.ims # مصفوفة الصور الأصلية (على هيئة مصفوفة np) الممررة إلى النموذج للاستدلال
results.render() # يحدّث results.ims بالمربعات والتسميات
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 تتضمن النتائجالنتائج المقصوصة#
يمكن إرجاع النتائج وحفظها على هيئة قصاصات للاكتشافات:
results = model(im) # inference
crops = results.crop(save=True) # قاموس الاكتشافات المقصوصةنتائج Pandas#
يمكن إرجاع النتائج على هيئة إطارات بيانات Pandas:
results = model(im) # inference
results.pandas().xyxy[0] # إطار بيانات Pandasمخرجات 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النتائج المرتبة#
يمكن ترتيب النتائج حسب العمود، مثل ترتيب اكتشاف أرقام لوحات السيارات من اليسار إلى اليمين (المحور x):
results = model(im) # inference
results.pandas().xyxy[0].sort_values("xmin") # مرتبة من اليسار إلى اليميننتائج JSON#
يمكن إرجاع النتائج بتنسيق JSON بعد تحويلها إلى إطارات بيانات .pandas() باستخدام الطريقة .to_json(). ويمكن تعديل تنسيق JSON باستخدام الوسيطة orient. للاطلاع على التفاصيل، راجع توثيق pandas .to_json().
results = model(im) # inference
results.pandas().xyxy[0].to_json(orient="records") # تنبؤات JSON للصورة1مخرجات 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"
}
]نماذج مخصصة#
يحمّل هذا المثال نموذج YOLOv5s مخصصًا ومدرّبًا على 20 فئة من VOC، وهو 'best.pt'، باستخدام PyTorch Hub.
import torch
model = torch.hub.load("ultralytics/yolov5", "custom", path="path/to/best.pt") # نموذج محلي
model = torch.hub.load("path/to/yolov5", "custom", path="path/to/best.pt", source="local") # مستودع محلينماذج TensorRT وONNX وOpenVINO#
يدعم PyTorch Hub الاستدلال باستخدام معظم تنسيقات تصدير YOLOv5، بما فيها النماذج المدرّبة تدريبًا مخصصًا. راجع البرنامج التعليمي لتصدير TFLite وONNX وCoreML وTensorRT لمزيد من التفاصيل حول تصدير النماذج.
- يمكن أن يكون 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.mlpackage") # CoreML (لـ macOS فقط)
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 Cloud: دليل البدء السريع لـ GCP
- Amazon: دليل البدء السريع لـ AWS
- Azure: دليل البدء السريع لـ AzureML
- Docker: دليل البدء السريع لـ Docker
حالة المشروع#
تشير هذه الشارة إلى اجتياز جميع اختبارات التكامل المستمر (CI) الخاصة بـ إجراءات YOLOv5 على GitHub بنجاح. وتتحقق اختبارات CI بدقة من وظائف YOLOv5 وأدائه في جوانب رئيسية متعددة: التدريب والتحقق والاستدلال والتصدير واختبارات الأداء. وهي تضمن التشغيل المتسق والموثوق على macOS وWindows وUbuntu، مع إجراء الاختبارات كل 24 ساعة وعند كل إيداع جديد.
الأسئلة الشائعة#
لا. ينزّل
torch.hub.load("ultralytics/yolov5", ...)الشيفرة إلى~/.cache/torch/hubوالأوزان عند الاستخدام لأول مرة. ولا يلزم تثبيت سوى الحزم الموجودة فيrequirements.txt.استخدم نقطة الدخول
customمع مسار نقطة التحقق:torch.hub.load("ultralytics/yolov5", "custom", path="runs/train/exp/weights/best.pt"). أضفsource="local"ومسارًا إلى مستودع محلي للتحميل دون الوصول إلى الشبكة.نعم. مرّر الملف المُصدّر إلى أداة التحميل نفسها
custom، وسيختار YOLOv5 الواجهة الخلفية المطابقة استنادًا إلى امتداد الملف، مثلyolov5s.onnxأوyolov5s.engineأوyolov5s_openvino_model/.مرّر
force_reload=Trueلإزالة المستودع المخزّن مؤقتًا وجلب أحدث الشيفرة، أو احذف~/.cache/torch/hubيدويًا. يؤدي ذلك أيضًا إلى الحصول على الإصدارات الجديدة من YOLOv5.تعيد
results.xyxy[0]موترًا يتكوّن من صفوف[x1, y1, x2, y2, confidence, class]، بينما تعيدresults.pandas().xyxy[0]إطار بيانات يتضمن أسماء الفئات، وينشئ.to_json(orient="records")على إطار البيانات هذا مخرجات JSON.