نقل التعلم باستخدام الطبقات المجمدة
📚 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." في أسمائها:
تجميد جميع الطبقات
لتجميد النموذج الكامل باستثناء طبقات الالتفاف الناتج النهائي في Detect() ، قمنا بتعيين قائمة التجميد لاحتواء جميع الوحدات النمطية مع "model.0." - "model.23." في أسمائها:
النتائج
نقوم بتدريب 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.
GPU مقارنة الاستخدام
ومن المثير للاهتمام، أنه كلما زاد عدد الوحدات المجمدة قلّت الحاجة إلى ذاكرة GPU للتدريب، وانخفض استخدام GPU . يشير هذا إلى أن النماذج الأكبر حجمًا، أو النماذج التي تم تدريبها على حجم أكبر - قد تستفيد من التجميد من أجل التدريب بشكل أسرع.
البيئات المدعومة
Ultralytics مجموعة من البيئات الجاهزة للاستخدام، كل منها مثبت مسبقًا مع التبعيات الأساسية مثل CUDA، CUDNN, Pythonو PyTorchلبدء مشاريعك.
- GPU دفاتر مجاناً:
- Google السحابة: دليل البدء السريع لـ GCP
- Amazon: دليل التشغيل السريع لخدمة AWS
- Azure: دليل التشغيل السريع AzureML
- عامل ميناء: دليل التشغيل السريع ل Docker
حالة المشروع
تشير هذه الشارة إلى أن جميع YOLOv5 اجتياز اختبارات التكامل المستمر (CI) لإجراءات GitHub بنجاح. تتحقق اختبارات CI هذه بدقة من وظائف وأداءYOLOv5 عبر جوانب رئيسية مختلفة: التدريب ، والتحقق من الصحة ، والاستدلال ، والتصدير ، والمعايير. إنها تضمن التشغيل المتسق والموثوق به على macOS و Windows و Ubuntu ، مع إجراء الاختبارات كل 24 ساعة وعند كل التزام جديد.