YOLO Vision 2026:

بنية Ultralytics YOLOv5#

YOLOv5 (v6.0/6.1) هو خوارزمية قوية لكشف الأجسام طورتها Ultralytics. تتناول هذه المقالة بعمق بنية YOLOv5، واستراتيجيات زيادة البيانات، ومنهجيات التدريب، وتقنيات حساب الخسارة. سيساعد هذا الفهم الشامل على تحسين تطبيقك العملي لكشف الأجسام في مجالات متنوعة، بما في ذلك المراقبة والمركبات ذاتية القيادة والتعرّف على الصور.

1. بنية النموذج#

تتكون بنية YOLOv5 من ثلاثة أجزاء رئيسية:

  • العمود الفقري: يمثل هذا الجزء الهيكل الرئيسي للشبكة. في YOLOv5، صُمم العمود الفقري باستخدام بنية CSPDarknet53، وهي تعديل لبنية Darknet المستخدمة في الإصدارات السابقة.
  • العنق: يصل هذا الجزء بين العمود الفقري والرأس. في YOLOv5، تُستخدم بنيتا SPPF (تجميع الهرم المكاني - السريع) وPANet (شبكة تجميع المسارات).
  • الرأس: يتولى هذا الجزء إنشاء الناتج النهائي. يستخدم YOLOv5 بنية YOLOv3 Head لهذا الغرض.

توضّح الصورة أدناه بنية النموذج. يمكن العثور على تفاصيل بنية النموذج في models/yolov5l.yaml.

بنية YOLOv5 موضحةً العمود الفقري والعنق والرأس

يقدم YOLOv5 بعض التحسينات الملحوظة مقارنةً بأسلافه:

  1. استُبدلت بنية Focus الموجودة في الإصدارات السابقة ببنية 6x6 Conv2d. ويعزز هذا التغيير الكفاءة #4825.
  2. استُبدلت بنية SPP ببنية SPPF. ويضاعف هذا التغيير سرعة المعالجة أكثر من الضعف مع الحفاظ على الناتج نفسه.

لاختبار سرعة SPP وSPPF، يمكن استخدام التعليمات البرمجية التالية:

SPP vs SPPF speed profiling example (click to open)
import time

import torch
from torch import nn

class SPP(nn.Module):
    def __init__(self):
        """Initializes an SPP module with three different sizes of max pooling layers."""
        super().__init__()
        self.maxpool1 = nn.MaxPool2d(5, 1, padding=2)
        self.maxpool2 = nn.MaxPool2d(9, 1, padding=4)
        self.maxpool3 = nn.MaxPool2d(13, 1, padding=6)

    def forward(self, x):
        """Applies three max pooling layers on input `x` and concatenates results along channel dimension."""
        o1 = self.maxpool1(x)
        o2 = self.maxpool2(x)
        o3 = self.maxpool3(x)
        return torch.cat([x, o1, o2, o3], dim=1)

class SPPF(nn.Module):
    def __init__(self):
        """Initializes an SPPF module with a specific configuration of MaxPool2d layer."""
        super().__init__()
        self.maxpool = nn.MaxPool2d(5, 1, padding=2)

    def forward(self, x):
        """Applies sequential max pooling and concatenates results with input tensor."""
        o1 = self.maxpool(x)
        o2 = self.maxpool(o1)
        o3 = self.maxpool(o2)
        return torch.cat([x, o1, o2, o3], dim=1)

def main():
    """Compares outputs and performance of SPP and SPPF on a random tensor (8, 32, 16, 16)."""
    input_tensor = torch.rand(8, 32, 16, 16)
    spp = SPP()
    sppf = SPPF()
    output1 = spp(input_tensor)
    output2 = sppf(input_tensor)

    print(torch.equal(output1, output2))

    t_start = time.time()
    for _ in range(100):
        spp(input_tensor)
    print(f"SPP time: {time.time() - t_start}")

    t_start = time.time()
    for _ in range(100):
        sppf(input_tensor)
    print(f"SPPF time: {time.time() - t_start}")

if __name__ == "__main__":
    main()

النتيجة:

True
SPP time: 0.5373051166534424
SPPF time: 0.20780706405639648

2. تقنيات زيادة البيانات#

يستخدم YOLOv5 تقنيات متنوعة لزيادة البيانات لتحسين قدرة النموذج على التعميم والحد من فرط التكيّف. وتشمل هذه التقنيات:

  • زيادة البيانات الفسيفسائية: تقنية لمعالجة الصور تجمع أربع صور تدريبية في صورة واحدة بطرق تشجع نماذج كشف الأجسام على التعامل بصورة أفضل مع مختلف مقاييس الأجسام وإزاحاتها.

    زيادة البيانات الفسيفسائية في YOLOv5 بدمج أربع صور

  • زيادة البيانات بالنسخ واللصق: طريقة مبتكرة لزيادة البيانات تنسخ رقعًا عشوائية من صورة وتلصقها على صورة أخرى مختارة عشوائيًا، مما ينشئ عينة تدريب جديدة بفعالية.

    زيادة البيانات بالنسخ واللصق في YOLOv5 لتقسيم المثيلات

  • التحويلات الأفينية العشوائية: تشمل تدوير الصور وتحجيمها وإزاحتها وقصّها عشوائيًا.

    التحويلات الأفينية العشوائية في YOLOv5 للتدريب

  • زيادة البيانات باستخدام MixUp: طريقة تنشئ صورًا مركبة من خلال أخذ تركيبة خطية من صورتين وتسمياتهما المرتبطة.

    زيادة البيانات باستخدام MixUp في YOLOv5 لدمج صورتين

  • Albumentations: مكتبة قوية لزيادة الصور تدعم مجموعة واسعة من تقنيات زيادة البيانات. تعرّف على المزيد حول استخدام زيادات Albumentations.

  • زيادة بيانات HSV: تغييرات عشوائية في درجة اللون والتشبّع والقيمة للصور.

    أمثلة على زيادة فضاء الألوان HSV في YOLOv5

  • القلب الأفقي العشوائي: طريقة لزيادة البيانات تقلب الصور أفقيًا عشوائيًا.

    زيادة القلب الأفقي العشوائي في YOLOv5

3. استراتيجيات التدريب#

يطبق YOLOv5 عدة استراتيجيات تدريب متقدمة لتعزيز أداء النموذج. وتشمل ما يلي:

  • التدريب متعدد المقاييس: يُعاد تحجيم الصور المدخلة عشوائيًا ضمن نطاق يتراوح بين 0.5 و1.5 ضعف حجمها الأصلي أثناء عملية التدريب.
  • AutoAnchor: تحسّن هذه الاستراتيجية مربعات الارتساء الأولية لتطابق الخصائص الإحصائية لمربعات الحقيقة الأرضية في بياناتك المخصصة.
  • المُسخّن ومجدول LR الجيبي: طريقة لضبط معدل التعلم بهدف تحسين أداء النموذج.
  • المتوسط المتحرك الأسي (EMA): استراتيجية تستخدم متوسط المعلمات عبر الخطوات السابقة لتحقيق استقرار عملية التدريب والحد من خطأ التعميم.
  • التدريب بـالدقة المختلطة: طريقة لتنفيذ العمليات بتنسيق الدقة النصفية، مما يقلل استخدام الذاكرة ويعزز سرعة الحساب.
  • تطوير المعلمات الفائقة: استراتيجية لضبط المعلمات الفائقة تلقائيًا لتحقيق الأداء الأمثل. تعرّف على المزيد حول ضبط المعلمات الفائقة.

4. ميزات إضافية#

4.1 حساب الخسائر#

تُحسب الخسارة في YOLOv5 بوصفها مزيجًا من ثلاثة مكونات منفردة للخسارة:

  • خسارة الفئات (خسارة BCE): خسارة الانتروبيا المتقاطعة الثنائية، وتقيس الخطأ في مهمة التصنيف.
  • خسارة احتمالية وجود الكائن (خسارة BCE): خسارة أخرى للانتروبيا المتقاطعة الثنائية، تحسب الخطأ في كشف ما إذا كان كائن موجودًا في خلية شبكية معينة أم لا.
  • خسارة الموقع (خسارة CIoU): خسارة IoU الكاملة، وتقيس الخطأ في تحديد موقع الكائن داخل الخلية الشبكية.

توضّح دالة الخسارة الإجمالية كما يلي:

صيغة دالة الخسارة الكلية في YOLOv5

4.2 موازنة الخسائر#

تُوزن خسائر احتمالية وجود الكائن لطبقات التنبؤ الثلاث (P3 وP4 وP5) بأوزان مختلفة. وأوزان الموازنة هي [4.0, 1.0, 0.4] على التوالي. يضمن هذا النهج مساهمة التنبؤات على المقاييس المختلفة بصورة مناسبة في الخسارة الإجمالية.

صيغة موازنة خسارة احتمالية وجود الكائن في YOLOv5

4.3 إزالة حساسية الشبكة#

تُجري بنية YOLOv5 بعض التغييرات المهمة على استراتيجية التنبؤ بالمربعات مقارنةً بالإصدارات السابقة من YOLO. في YOLOv2 وYOLOv3، كانت إحداثيات المربع تُتنبأ بها مباشرةً باستخدام تفعيل الطبقة الأخيرة.

صيغة التنبؤ بإحداثي x لمربع الإحاطة صيغة التنبؤ بإحداثي y لمربع الإحاطة صيغة التنبؤ بعرض مربع الإحاطة صيغة التنبؤ بارتفاع مربع الإحاطة

YOLOv5 grid computation

لكن في YOLOv5، حُدّثت صيغة التنبؤ بإحداثيات المربع للحد من حساسية الشبكة ومنع النموذج من التنبؤ بأبعاد مربعات غير محدودة.

تكون الصيغ المنقحة لحساب مربع الإحاطة المتنبأ به كما يلي:

صيغة إحداثي x المنقحة لمربع الإحاطة في YOLOv5 صيغة إحداثي y المنقحة لمربع الإحاطة في YOLOv5 صيغة العرض المنقحة لمربع الإحاطة في YOLOv5 صيغة الارتفاع المنقحة لمربع الإحاطة في YOLOv5

قارن إزاحة النقطة المركزية قبل التحجيم وبعده. عُدّل نطاق إزاحة النقطة المركزية من (0, 1) إلى (-0.5, 1.5). لذلك، يمكن أن تصبح الإزاحة 0 أو 1 بسهولة.

YOLOv5 grid scaling

قارن نسبة تحجيم الارتفاع والعرض (بالنسبة إلى الارتساء) قبل التعديل وبعده. تحتوي معادلات مربعات yolo/darknet الأصلية على عيب خطير. فالعرض والارتفاع غير محدودين تمامًا لأنهما يُحسبان ببساطة كـ out=exp(in)، وهذا أمر خطير لأنه قد يؤدي إلى تدرجات جامحة، وعدم استقرار، وخسائر NaN، وفي النهاية إلى فقدان التدريب بالكامل. راجع هذه المشكلة لمزيد من التفاصيل.

YOLOv5 unbounded scaling

4.4 بناء الأهداف#

تُعد عملية بناء الأهداف في YOLOv5 بالغة الأهمية لكفاءة التدريب ودقة النموذج. وتتضمن إسناد مربعات الحقيقة الأرضية إلى خلايا الشبكة المناسبة في خريطة الناتج، ومطابقتها مع مربعات الارتساء المناسبة.

تتبع هذه العملية الخطوات التالية:

  • احسب نسبة أبعاد مربع الحقيقة الأرضية إلى أبعاد كل قالب ارتساء.

صيغة نسبة عرض الحقيقة الأرضية إلى الارتساء

صيغة نسبة ارتفاع الحقيقة الأرضية إلى الارتساء

صيغة نسبة العرض القصوى

صيغة نسبة الارتفاع القصوى

صيغة النسبة القصوى الإجمالية

صيغة عتبة مطابقة الارتساء

YOLOv5 IoU computation
  • إذا كانت النسبة المحسوبة ضمن العتبة، فطابق مربع الحقيقة الأرضية مع الارتساء المقابل.
YOLOv5 grid overlap
  • أسند الارتساء المطابق إلى الخلايا المناسبة، مع مراعاة أنه بسبب إزاحة النقطة المركزية المنقحة، يمكن إسناد مربع حقيقة أرضية إلى أكثر من ارتساء واحد، إذ عُدّل نطاق إزاحة النقطة المركزية من (0, 1) إلى (-0.5, 1.5)، مما يتيح إجراء مطابقات إضافية.
YOLOv5 anchor selection

بهذه الطريقة، تضمن عملية بناء الأهداف إسناد كل كائن من كائنات الحقيقة الأرضية ومطابقته على نحو صحيح أثناء عملية التدريب، مما يتيح لـ YOLOv5 تعلم مهمة كشف الأجسام بفاعلية أكبر.

الخلاصة#

يمثل YOLOv5 خطوة مهمة في تطور كشف الأجسام في الوقت الفعلي. إذ توفر خياراته المعمارية واستراتيجيات التدريب والتحسينات الهندسية أداءً وكفاءةً قويين مقارنةً بإصدارات YOLO السابقة.

تشمل التحسينات الأساسية في YOLOv5 استخدام بنية ديناميكية، ومجموعة واسعة من تقنيات زيادة البيانات، واستراتيجيات تدريب مبتكرة، فضلًا عن تعديلات مهمة في حساب الخسائر وعملية بناء الأهداف. وتحسن كل هذه الابتكارات دقة كشف الأجسام وكفاءته بدرجة كبيرة مع الحفاظ على سرعة عالية، وهي السمة المميزة لنماذج YOLO.

التعليقات