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

نقل التعلم باستخدام الطبقات المجمدة في YOLOv5

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

قبل أن تبدأ

استنسخ الريبو وقم بتثبيت المتطلبات.txt في Python.8.0 بما في ذلك PyTorch.8. يتم تنزيل النماذج ومجموعات البيانات تلقائيًا من أحدثإصدار YOLOv5 .

git clone https://github.com/ultralytics/yolov5 # clone
cd yolov5
pip install -r requirements.txt # install

كيفية عمل تجميد الطبقات

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

# Freeze
freeze = [f"model.{x}." for x in range(freeze)]  # layers to freeze
for k, v in model.named_parameters():
    v.requires_grad = True  # train all layers
    if any(x in k for x in freeze):
        print(f"freezing {k}")
        v.requires_grad = False

استكشاف بنية النموذج الاستكشافي

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

for k, v in model.named_parameters():
    print(k)

"""Output:
model.0.conv.conv.weight
model.0.conv.bn.weight
model.0.conv.bn.bias
model.1.conv.weight
model.1.bn.weight
model.1.bn.bias
model.2.cv1.conv.weight
model.2.cv1.bn.weight
...
"""

تتألف بنية YOLOv5 من عمود فقري (طبقات 0-9) ورأس (الطبقات المتبقية):

# YOLOv5 v6.0 backbone
backbone:
    # [from, number, module, args]
    - [-1, 1, Conv, [64, 6, 2, 2]] # 0-P1/2
    - [-1, 1, Conv, [128, 3, 2]] # 1-P2/4
    - [-1, 3, C3, [128]]
    - [-1, 1, Conv, [256, 3, 2]] # 3-P3/8
    - [-1, 6, C3, [256]]
    - [-1, 1, Conv, [512, 3, 2]] # 5-P4/16
    - [-1, 9, C3, [512]]
    - [-1, 1, Conv, [1024, 3, 2]] # 7-P5/32
    - [-1, 3, C3, [1024]]
    - [-1, 1, SPPF, [1024, 5]] # 9

# YOLOv5 v6.0 head
head:
    - [-1, 1, Conv, [512, 1, 1]]
    - [-1, 1, nn.Upsample, [None, 2, "nearest"]]
    - [[-1, 6], 1, Concat, [1]] # cat backbone P4
    - [-1, 3, C3, [512, False]] # 13
    # ... remaining head layers

خيارات التجميد

تجميد العمود الفقري فقط

لتجميد العمود الفقري فقط (الطبقات 0-9)، وهو أمر مفيد لتكييف النموذج مع الفئات الجديدة مع الاحتفاظ بقدرات استخراج السمات المكتسبة:

python train.py --freeze 10

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

تجميد جميع الطبقات باستثناء طبقات الكشف

لتجميد النموذج بأكمله باستثناء طبقات الالتفاف النهائية للمخرجات النهائية في وحدة الكشف:

python train.py --freeze 24

هذا النهج مثالي عندما تريد الحفاظ على معظم ميزات النموذج المكتسبة ولكنك تحتاج إلى تكييفه لاكتشاف عدد مختلف من الفئات.

مقارنة الأداء

لقد قمنا بتدريب YOLOv5m على مجموعة بيانات المركبات العضوية المتطايرة باستخدام استراتيجيات تجميد مختلفة، بدءًا من أوزان COCO الرسمية المُدربة مسبقًا:

python train.py --batch 48 --weights yolov5m.pt --data voc.yaml --epochs 50 --cache --img 512 --hyp hyp.finetune.yaml

نتائج الدقة

توضح النتائج أن تجميد الطبقات يسرّع التدريب ولكنه يقلل قليلاً من الدقة النهائية:

تجميد نتائج تدريب MAP50 التدريبي

نتائج تدريب التجميد MAP50-95 MAP50-95

نتائج الجدول

استخدام الموارد

يؤدي تجميد المزيد من الطبقات إلى تقليل متطلبات ذاكرة GPU واستخدامها، مما يجعل هذه التقنية ذات قيمة لتدريب نماذج أكبر أو استخدام صور عالية الدقة:

التدريب GPU النسبة المئوية المخصصة للذاكرة

التدريب GPU نسبة استخدام الذاكرة

متى يتم استخدام التجميد الطبقي

يكون تجميد الطبقات في التعلّم التحويلي مفيدًا بشكل خاص في سيناريوهات مثل:

  1. موارد حاسوبية محدودة: عندما تكون ذاكرة GPU أو طاقة المعالجة محدودة
  2. مجموعات البيانات الصغيرة: عندما تكون مجموعة بياناتك الجديدة صغيرة جدًا بحيث لا يمكن تدريب نموذج كامل دون الإفراط في تركيبها
  3. التكيف السريع: عندما تحتاج إلى تكييف نموذج ما بسرعة مع مجال جديد
  4. الضبط الدقيق لمهام محددة: عند تكييف نموذج عام مع تطبيق متخصص

لمزيد من المعلومات حول تقنيات التعلم التحويلي وتطبيقاتها، راجع مدخل مسرد مصطلحات التعلم التحويلي.

البيئات المدعومة

Ultralytics مجموعة من البيئات الجاهزة للاستخدام، كل منها مثبت مسبقًا مع التبعيات الأساسية مثل CUDA، CUDNN, Pythonو PyTorchلبدء مشاريعك.

حالة المشروع

YOLOv5 CI

تشير هذه الشارة إلى اجتياز جميع اختبارات التكامل المستمر (CI) لإجراءات GitHub YOLOv5 بنجاح. تتحقق اختبارات التكامل المستمر هذه بدقة من وظائف وأداء YOLOv5 عبر مختلف الجوانب الرئيسية: التدريب والتحقق من الصحة والاستدلال والتصدير والمعايير. وهي تضمن تشغيلًا متسقًا وموثوقًا على أنظمة macOS وWindows وUbuntu، مع إجراء الاختبارات كل 24 ساعة وعند كل التزام جديد.

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

التعليقات