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