نقل التعلم باستخدام الطبقات المجمدة في 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)، وهو أمر مفيد لتكييف النموذج مع الفئات الجديدة مع الاحتفاظ بقدرات استخراج السمات المكتسبة:
تكون هذه الطريقة فعّالة بشكل خاص عندما تشترك مجموعة البيانات الجديدة في ميزات متشابهة منخفضة المستوى مع بيانات التدريب الأصلية ولكن لديها فئات أو كائنات مختلفة.
تجميد جميع الطبقات باستثناء طبقات الكشف
لتجميد النموذج بأكمله باستثناء طبقات الالتفاف النهائية للمخرجات النهائية في وحدة الكشف:
هذا النهج مثالي عندما تريد الحفاظ على معظم ميزات النموذج المكتسبة ولكنك تحتاج إلى تكييفه لاكتشاف عدد مختلف من الفئات.
مقارنة الأداء
لقد قمنا بتدريب YOLOv5m على مجموعة بيانات المركبات العضوية المتطايرة باستخدام استراتيجيات تجميد مختلفة، بدءًا من أوزان COCO الرسمية المُدربة مسبقًا:
python 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 السحابة: دليل البدء السريع لـ GCP
- أمازون دليل AWS للبدء السريع
- Azure: دليل البدء السريع لـ AzureML
- دوكر: دليل البدء السريع لـ Docker
حالة المشروع
تشير هذه الشارة إلى اجتياز جميع اختبارات التكامل المستمر (CI) لإجراءات GitHub YOLOv5 بنجاح. تتحقق اختبارات التكامل المستمر هذه بدقة من وظائف وأداء YOLOv5 عبر مختلف الجوانب الرئيسية: التدريب والتحقق من الصحة والاستدلال والتصدير والمعايير. وهي تضمن تشغيلًا متسقًا وموثوقًا على أنظمة macOS وWindows وUbuntu، مع إجراء الاختبارات كل 24 ساعة وعند كل التزام جديد.