انتقل إلى المحتوى

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

📚 This guide explains how to freeze YOLOv5 🚀 layers when transfer learning. Transfer learning is a useful way to quickly retrain a model on new data without having to retrain the entire network. Instead, part of the initial weights are frozen in place, and the rest of the weights are used to compute loss and are updated by the optimizer. This requires less resources than normal training and allows for faster training times, though it may also result in reductions to final trained accuracy.

قبل البدء

استنساخ الريبو وتثبيت requirements.txt في ملف Python>=3.8.0 بيئة، بما في ذلك PyTorch>=1.8. يتم تنزيل النماذج ومجموعات البيانات تلقائيا من الأحدث YOLOv5 إطلاق سراح.

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

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

جميع الطبقات التي تطابق train.py freeze سيتم تجميد القائمة في train.py عن طريق ضبط تدرجاتها على الصفر قبل بدء التدريب.

# 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
...
model.23.m.0.cv2.bn.weight
model.23.m.0.cv2.bn.bias
model.24.m.0.weight
model.24.m.0.bias
model.24.m.1.weight
model.24.m.1.bias
model.24.m.2.weight
model.24.m.2.bias
"""

بالنظر إلى بنية النموذج ، يمكننا أن نرى أن العمود الفقري للنموذج هو الطبقات 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

    - [-1, 1, Conv, [256, 1, 1]]
    - [-1, 1, nn.Upsample, [None, 2, "nearest"]]
    - [[-1, 4], 1, Concat, [1]] # cat backbone P3
    - [-1, 3, C3, [256, False]] # 17 (P3/8-small)

    - [-1, 1, Conv, [256, 3, 2]]
    - [[-1, 14], 1, Concat, [1]] # cat head P4
    - [-1, 3, C3, [512, False]] # 20 (P4/16-medium)

    - [-1, 1, Conv, [512, 3, 2]]
    - [[-1, 10], 1, Concat, [1]] # cat head P5
    - [-1, 3, C3, [1024, False]] # 23 (P5/32-large)

    - [[17, 20, 23], 1, Detect, [nc]] # Detect(P3, P4, P5)

حتى نتمكن من تحديد قائمة التجميد لتحتوي على جميع الوحدات مع "model.0." - "model.9." في أسمائها:

python train.py --freeze 10

تجميد جميع الطبقات

لتجميد النموذج الكامل باستثناء طبقات الالتفاف الناتج النهائي في Detect() ، قمنا بتعيين قائمة التجميد لاحتواء جميع الوحدات النمطية مع "model.0." - "model.23." في أسمائها:

python train.py --freeze 24

النتائج

نقوم بتدريب YOLOv5m على المركبات العضوية المتطايرة على كلا السيناريوهين المذكورين أعلاه ، جنبا إلى جنب مع نموذج افتراضي (بدون تجميد) ، بدءا من COCO الرسمي المدرب مسبقا --weights yolov5m.pt:

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

مقارنة الدقة

The results show that freezing speeds up training, but reduces final accuracy slightly.

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

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

نتائج الجدول

GPU مقارنة الاستخدام

ومن المثير للاهتمام، أنه كلما زاد عدد الوحدات المجمدة قلّت الحاجة إلى ذاكرة GPU للتدريب، وانخفض استخدام GPU . يشير هذا إلى أن النماذج الأكبر حجمًا، أو النماذج التي تم تدريبها على حجم أكبر - قد تستفيد من التجميد من أجل التدريب بشكل أسرع.

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

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

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

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

حالة المشروع

YOLOv5 سي آي

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


📅 Created 11 months ago ✏️ Updated 19 days ago

التعليقات