بنية Ultralytics YOLOv5

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

بنية النموذج

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

  • العمود الفقري (Backbone): هذا هو الجزء الرئيسي من الشبكة. بالنسبة لـ YOLOv5، تم تصميم العمود الفقري باستخدام بنية CSPDarknet53، وهي تعديل لبنية Darknet المستخدمة في الإصدارات السابقة.
  • العنق (Neck): يربط هذا الجزء بين العمود الفقري والرأس. في YOLOv5، يتم استخدام هياكل SPPF (التجميع الهرمي المكاني السريع - Spatial Pyramid Pooling - Fast) و PANet (شبكة تجميع المسار - Path Aggregation Network).
  • الرأس (Head): هذا الجزء مسؤول عن توليد المخرجات النهائية. تستخدم 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
import torch.nn as 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

تقنيات تعزيز البيانات

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

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

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

  • تعزيز النسخ واللصق (Copy-Paste Augmentation): طريقة مبتكرة لتعزيز البيانات تقوم بنسخ أجزاء عشوائية من صورة ولصقها فوق صورة أخرى مختارة عشوائياً، مما يؤدي فعلياً إلى إنشاء عينة تدريب جديدة.

    تعزيز النسخ واللصق في YOLOv5 لتجزئة الكائنات

  • تحويلات التقارب العشوائية (Random Affine Transformations): يتضمن ذلك التدوير العشوائي، والتحجيم، والترجمة، والقص للصور.

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

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

    تعزيز بيانات MixUp في YOLOv5 يمزج بين صورتين

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

  • تعزيز HSV: تغييرات عشوائية على درجة اللون (Hue)، والتشبع (Saturation)، والقيمة (Value) للصور.

    أمثلة على تعزيز مساحة اللون HSV في YOLOv5

  • القلب الأفقي العشوائي (Random Horizontal Flip): طريقة تعزيز تقوم بقلب الصور أفقياً بشكل عشوائي.

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

استراتيجيات التدريب

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

  • التدريب متعدد المقاييس (Multiscale Training): يتم تغيير حجم صور الإدخال عشوائياً ضمن نطاق من 0.5 إلى 1.5 مرة من حجمها الأصلي أثناء عملية التدريب.
  • AutoAnchor: تعمل هذه الاستراتيجية على تحسين صناديق التثبيت (Anchor boxes) الأولية لتتناسب مع الخصائص الإحصائية لصناديق الحقيقة الأرضية (Ground truth) في بياناتك المخصصة.
  • الإحماء وجدولة معدل التعلم الجيبي (Warmup and Cosine LR Scheduler): طريقة لتعديل معدل التعلم لتعزيز أداء النموذج.
  • المتوسط المتحرك الأسي (EMA): استراتيجية تستخدم متوسط المعلمات عبر الخطوات السابقة لتحقيق استقرار عملية التدريب وتقليل خطأ التعميم.
  • التدريب بـ دقة مختلطة (Mixed Precision Training): طريقة لإجراء العمليات بتنسيق دقة نصفية، مما يقلل من استخدام الذاكرة ويعزز سرعة الحساب.
  • تطور المعلمات الفائقة (Hyperparameter Evolution): استراتيجية لضبط المعلمات الفائقة تلقائياً لتحقيق الأداء الأمثل. تعرف على المزيد حول ضبط المعلمات الفائقة.

ميزات إضافية

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

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

  • خسارة الفئات (BCE Loss): خسارة الانتروبيا الثنائية (Binary Cross-Entropy)، تقيس الخطأ في مهمة التصنيف.
  • خسارة وجود كائن (Objectness Loss): خسارة أخرى من نوع الانتروبيا الثنائية، تحسب الخطأ في اكتشاف ما إذا كان الكائن موجوداً في خلية شبكة معينة أم لا.
  • خسارة الموقع (CIoU Loss): خسارة 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.

التعليقات