Ultralytics YOLOv5 معمار
YOLOv5 (v6.0 / 6.1) هي خوارزمية قوية للكشف عن الكائنات تم تطويرها بواسطة Ultralytics. تتعمق هذه المقالة في YOLOv5 الهندسة المعمارية واستراتيجيات زيادة البيانات ومنهجيات التدريب وتقنيات حساب الخسائر. سيساعد هذا الفهم الشامل في تحسين تطبيقك العملي للكشف عن الأشياء في مختلف المجالات ، بما في ذلك المراقبة والمركبات المستقلة والتعرف على الصور.
1. هيكل النموذج
YOLOv5تتكون الهندسة المعمارية من ثلاثة أجزاء رئيسية:
- عمود فقريهذا هو الجسم الرئيسي للشبكة.: من أجل YOLOv5، تم تصميم العمود الفقري باستخدام
New CSP-Darknet53
هيكل ، تعديل لبنية Darknet المستخدمة في الإصدارات السابقة. - رقبةيربط هذا الجزء العمود الفقري والرأس.: في YOLOv5,
SPPF
وNew CSP-PAN
يتم استخدام الهياكل. - رأسهذا الجزء مسؤول عن توليد الناتج النهائي.: YOLOv5 يستخدم
YOLOv3 Head
لهذا الغرض.
تم تصوير هيكل النموذج في الصورة أدناه. يمكن العثور على تفاصيل هيكل النموذج في yolov5l.yaml
.
YOLOv5 يقدم بعض التغييرات الطفيفة مقارنة بسابقاتها:
- ال
Focus
يتم استبدال الهيكل ، الموجود في الإصدارات السابقة ، ب6x6 Conv2d
هيكل. هذا التغيير يعزز الكفاءة #4825. - ال
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()
2. تقنيات زيادة البيانات
YOLOv5 يستخدم تقنيات مختلفة لزيادة البيانات لتحسين قدرة النموذج على التعميم وتقليل التجهيز الزائد. وتشمل هذه التقنيات:
-
تكبير الفسيفساء: تقنية معالجة الصور التي تجمع بين أربع صور تدريب في صورة واحدة بطرق تشجع نماذج اكتشاف الكائنات على التعامل بشكل أفضل مع مقاييس وترجمات الكائنات المختلفة.
-
زيادة النسخ واللصق: طريقة مبتكرة لزيادة البيانات تقوم بنسخ تصحيحات عشوائية من صورة ولصقها على صورة أخرى تم اختيارها عشوائيا ، مما يؤدي إلى إنشاء عينة تدريب جديدة بشكل فعال.
-
تحويلات Affine العشوائية: يتضمن ذلك الدوران العشوائي والقياس والترجمة والقص للصور.
-
MixUp Augmentation: طريقة تنشئ صورا مركبة عن طريق أخذ مجموعة خطية من صورتين والتسميات المرتبطة بهما.
-
الألبومات: مكتبة قوية لزيادة الصور تدعم مجموعة متنوعة من تقنيات التعزيز.
-
زيادة HSV: تغييرات عشوائية في تدرج اللون والتشبع وقيمة الصور.
-
الوجه الأفقي العشوائي: طريقة زيادة تقلب الصور أفقيا بشكل عشوائي.
3. استراتيجيات التدريب
YOLOv5 يطبق العديد من استراتيجيات التدريب المتطورة لتعزيز أداء النموذج. يشملوا:
- تدريب متعدد المقاييس: يتم إعادة قياس الصور المدخلة بشكل عشوائي ضمن نطاق يتراوح من 0.5 إلى 1.5 ضعف حجمها الأصلي أثناء عملية التدريب.
- AutoAnchor: تعمل هذه الإستراتيجية على تحسين مربعات الربط السابقة لمطابقة الخصائص الإحصائية لمربعات الحقيقة الأرضية في بياناتك المخصصة.
- جدولة الإحماء وجيب التمام LR: طريقة لضبط معدل التعلم لتحسين أداء النموذج.
- المتوسط المتحرك الأسي (EMA): استراتيجية تستخدم متوسط المعلمات على الخطوات السابقة لتحقيق الاستقرار في عملية التدريب وتقليل خطأ التعميم.
- التدريب الدقيق المختلط: طريقة لإجراء العمليات بتنسيق نصف الدقة ، مما يقلل من استخدام الذاكرة ويعزز السرعة الحسابية.
- تطور المعلمات الفائقة: استراتيجية لضبط المعلمات الفائقة تلقائيا لتحقيق الأداء الأمثل.
4. ميزات إضافية
4.1 حساب الخسائر
الخسارة في YOLOv5 يتم حسابه كمزيج من ثلاثة مكونات خسارة فردية:
- خسارة الفئات (خسارة BCE): خسارة الإنتروبيا المتقاطعة الثنائية ، تقيس الخطأ لمهمة التصنيف.
- خسارة الكائن (BCE Loss): خسارة أخرى في الإنتروبيا المتقاطعة الثنائية ، تحسب الخطأ في اكتشاف ما إذا كان الكائن موجودا في خلية شبكة معينة أم لا.
- فقدان الموقع (CIoU Loss): فقدان IoU الكامل ، يقيس الخطأ في توطين الكائن داخل خلية الشبكة.
يتم تصوير دالة الخسارة الإجمالية من خلال:
4.2 خسائر الرصيد
خسائر الكائن لطبقات التنبؤ الثلاث (P3
, P4
, P5
) مرجحة بشكل مختلف. أوزان الميزان هي [4.0, 1.0, 0.4]
على التوالي. يضمن هذا النهج أن التنبؤات على مستويات مختلفة تساهم بشكل مناسب في الخسارة الكلية.
4.3 القضاء على حساسية الشبكة
ال YOLOv5 تقوم الهندسة المعمارية بإجراء بعض التغييرات المهمة على استراتيجية التنبؤ بالصندوق مقارنة بالإصدارات السابقة من YOLO. في YOLOv2 و YOLOv3 ، تم التنبؤ بإحداثيات الصندوق مباشرة باستخدام تنشيط الطبقة الأخيرة.
ومع ذلك ، في YOLOv5، تم تحديث صيغة التنبؤ بإحداثيات المربع لتقليل حساسية الشبكة ومنع النموذج من التنبؤ بأبعاد الصندوق غير المحدودة.
الصيغ المنقحة لحساب المربع المحيط المتوقع هي كما يلي:
قارن إزاحة نقطة المركز قبل القياس وبعده. يتم ضبط نطاق إزاحة نقطة المركز من (0 ، 1) إلى (-0.5 ، 1.5). لذلك ، يمكن أن تحصل الإزاحة بسهولة على 0 أو 1.
قارن نسبة قياس الارتفاع والعرض (بالنسبة إلى المرساة) قبل وبعد الضبط. الأصل yolo/ معادلات مربع الشبكة المظلمة لها عيب خطير. العرض والارتفاع غير محدودين تماما لأنهما ببساطة خارج = exp (in) ، وهو أمر خطير ، لأنه يمكن أن يؤدي إلى تدرجات جامحة ، وعدم استقرار ، وخسائر NaN ، وفي النهاية فقدان كامل للتدريب. إحالة هذه المشكلة
4.4 بناء الأهداف
عملية بناء الهدف في YOLOv5 أمر بالغ الأهمية لكفاءة التدريب ودقة النموذج. يتضمن تعيين مربعات الحقيقة الأرضية لخلايا الشبكة المناسبة في خريطة الإخراج ومطابقتها مع مربعات الربط المناسبة.
تتبع هذه العملية الخطوات التالية:
- احسب نسبة أبعاد مربع الحقيقة الأرضي وأبعاد كل قالب مرساة.
- إذا كانت النسبة المحسوبة ضمن الحد ، فقم بمطابقة مربع الحقيقة الأرضي مع المرساة المقابلة.
- قم بتعيين نقطة الربط المتطابقة للخلايا المناسبة ، مع الأخذ في الاعتبار أنه بسبب إزاحة نقطة المركز المنقحة ، يمكن تعيين مربع حقيقة أرضية لأكثر من مرساة واحدة. لأنه يتم ضبط نطاق إزاحة نقطة المركز من (0 ، 1) إلى (-0.5 ، 1.5). يمكن تعيين GT Box لمزيد من المراسي.
بهذه الطريقة ، تضمن عملية بناء الأهداف تعيين كل كائن حقيقة أرضية ومطابقته بشكل صحيح أثناء عملية التدريب ، مما يسمح YOLOv5 لتعلم مهمة الكشف عن الكائنات بشكل أكثر فعالية.
استنتاج
ختاما، YOLOv5 يمثل خطوة مهمة إلى الأمام في تطوير نماذج الكشف عن الأشياء في الوقت الحقيقي. من خلال دمج العديد من الميزات الجديدة والتحسينات واستراتيجيات التدريب ، فإنه يتجاوز الإصدارات السابقة من YOLO الأسرة في الأداء والكفاءة.
التحسينات الأساسية في YOLOv5 تشمل استخدام بنية ديناميكية ، ومجموعة واسعة من تقنيات زيادة البيانات ، واستراتيجيات التدريب المبتكرة ، بالإضافة إلى تعديلات مهمة في حساب الخسائر وعملية بناء الأهداف. كل هذه الابتكارات تحسن بشكل كبير من دقة وكفاءة اكتشاف الأشياء مع الاحتفاظ بدرجة عالية من السرعة ، وهي العلامة التجارية ل YOLO نماذج.