تخطي إلى المحتوى

Ultralytics YOLOv5 الهندسة المعمارية

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

1. هيكلية النموذج

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

  • العمود الفقري: هذا هو الجسم الرئيسي للشبكة. بالنسبة إلى YOLOv5 ، تم تصميم العمود الفقري باستخدام New CSP-Darknet53 هيكل، وهو تعديل لبنية الشبكة المظلمة المستخدمة في الإصدارات السابقة.
  • الرقبة: يربط هذا الجزء بين العمود الفقري والرأس. في YOLOv5, SPPF و New CSP-PAN تُستخدم الهياكل.
  • الرأس: هذا الجزء هو المسؤول عن توليد المخرجات النهائية. YOLOv5 يستخدم YOLOv3 Head لهذا الغرض.

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

yolov5

YOLOv5 بعض التغييرات الطفيفة مقارنةً بسابقاتها:

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

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

مثال على تحديد ملامح السرعة SPP مقابل SPPF (انقر للفتح)
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

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

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

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

    الفسيفساء

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

    نسخ ولصق

  • التحويلات الجبهية العشوائية: يتضمن ذلك التدوير العشوائي، والقياس، والترجمة، والقص العشوائي للصور.

    عشوائي-أفين

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

    الخلط

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

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

    hsv

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

    شقلبة أفقية

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

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

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

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

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

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

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

تُصوَّر دالة الخسارة الإجمالية بـ

الخسارة

4.2 خسائر الرصيد 4.2

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

obj_loss

4.3 التخلص من حساسية الشبكة

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

بـ بـ بـ بـ

YOLOv5 حساب الشبكة

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

فيما يلي الصيغ المنقحة لحساب المربع المحدود المتوقع:

بx بواسطة ب و ب هـ

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

YOLOv5 تحجيم الشبكة

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

YOLOv5 تحجيم غير محدود

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

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

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

  • احسب نسبة أبعاد مربع الحقيقة الأرضية وأبعاد كل قالب تثبيت.

ص و

المعين

روو ماكس

ريماكس

ص ماكس

تطابق

YOLOv5 حساب IoU

  • إذا كانت النسبة المحسوبة ضمن العتبة، فقم بمطابقة مربع الحقيقة الأرضية مع المرساة المقابلة.

YOLOv5 تداخل الشبكة

  • عيّن المرساة المتطابقة إلى الخلايا المناسبة، مع الأخذ في الاعتبار أنه نظرًا لإزاحة النقطة المركزية المعدلة، يمكن تعيين مربع الحقيقة الأرضية إلى أكثر من مرساة واحدة. نظرًا لتعديل نطاق إزاحة النقطة المركزية من (0، 1) إلى (-0.5، 1.5). يمكن تعيين صندوق الحقيقة الأرضية إلى أكثر من مرساة.

YOLOv5 اختيار المرساة

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

الخاتمة

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

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

📅 تم إنشاؤها منذ 1 سنة مضت ✏️ تم التحديث منذ 2 شهر

التعليقات