نقل التعلم باستخدام الطبقات المتجمدة
📚 يشرح هذا الدليل كيفية تجميد YOLOv5 🚀 الطبقات عند نقل التعلم. يعد التعلم المنقول طريقة مفيدة لإعادة تدريب نموذج بسرعة على بيانات جديدة دون الحاجة إلى إعادة تدريب الشبكة بأكملها. وبدلاً من ذلك، يتم تجميد جزء من الأوزان الأولية في مكانها، وتُستخدم بقية الأوزان لحساب الخسارة ويتم تحديثها بواسطة المُحسِّن. يتطلب هذا الأمر موارد أقل من التدريب العادي ويسمح بأوقات تدريب أسرع، على الرغم من أنه قد يؤدي أيضًا إلى انخفاض الدقة النهائية المدرّبة.
قبل أن تبدأ
استنساخ الريبو وتثبيت المتطلبات.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 على YOLOv5m على المركبات العضوية المتطايرة على كلا السيناريوهين المذكورين أعلاه، إلى جانب نموذج افتراضي (بدون تجميد)، بدءًا من نموذج COCO الرسمي المُدرب مسبقًا --weights yolov5m.pt
:
train.py --batch 48 --weights yolov5m.pt --data voc.yaml --epochs 50 --cache --img 512 --hyp hyp.finetune.yaml
مقارنة الدقة
تُظهر النتائج أن التجميد يُسرّع التدريب، ولكنه يقلل من الدقة النهائية قليلاً.
GPU مقارنة الاستخدام
ومن المثير للاهتمام، أنه كلما زاد عدد الوحدات المجمدة قلّت الحاجة إلى ذاكرة GPU للتدريب، وانخفض استخدام GPU . يشير هذا إلى أن النماذج الأكبر حجمًا، أو النماذج التي تم تدريبها على حجم أكبر - قد تستفيد من التجميد من أجل التدريب بشكل أسرع.
البيئات المدعومة
Ultralytics مجموعة من البيئات الجاهزة للاستخدام، كل منها مثبت مسبقًا مع التبعيات الأساسية مثل CUDA، CUDNN, Pythonو PyTorchلبدء مشاريعك.
- GPU دفاتر مجاناً:
- Google السحابة: دليل البدء السريع لـ GCP
- أمازون دليل AWS للبدء السريع
- Azure: دليل البدء السريع لـ AzureML
- دوكر: دليل البدء السريع لـ Docker
حالة المشروع
تشير هذه الشارة إلى اجتياز جميع اختبارات التكامل المستمر (CI) لإجراءات GitHub YOLOv5 بنجاح. تتحقق اختبارات التكامل المستمر هذه بدقة من وظائف وأداء YOLOv5 عبر مختلف الجوانب الرئيسية: التدريب والتحقق من الصحة والاستدلال والتصدير والمعايير. وهي تضمن تشغيلًا متسقًا وموثوقًا على أنظمة macOS وWindows وUbuntu، مع إجراء الاختبارات كل 24 ساعة وعند كل التزام جديد.