كيفية ضبط YOLO مجموعة بيانات مخصصة
يهدف الضبط الدقيق إلى تكييف نموذج مُدرَّب مسبقًا للتعرف على فئات جديدة، وذلك بالبدء من الأوزان المُكتسبة بدلاً من التهيئة العشوائية. وبدلاً من التدريب من الصفر لمئات الدورات، يستفيد الضبط الدقيق من النموذج المُدرَّب مسبقًا COCO المتدربة مسبقًا وتتقارب مع البيانات المخصصة في جزء بسيط من الوقت.
يغطي هذا الدليل عملية ضبط YOLO26 على مجموعات البيانات المخصصة، بدءًا من الاستخدام الأساسي وصولاً إلى التقنيات المتقدمة مثل تجميد الطبقات والتدريب على مرحلتين.
الضبط الدقيق مقابل التدريب من الصفر
لقد تعلم النموذج المُدرَّب مسبقًا بالفعل السمات البصرية العامة — مثل اكتشاف الحواف، والتعرف على النسيج، وفهم الأشكال — من ملايين الصور. ويقوم التعلم الترحيلي من خلال الضبط الدقيق بإعادة استخدام تلك المعرفة، ويكتفي بتعليم النموذج شكل الفئات الجديدة فقط؛ ولهذا السبب يتقارب النموذج بشكل أسرع ويتطلب بيانات أقل. أما التدريب من الصفر فيتجاهل كل ذلك ويجبر النموذج على تعلم كل شيء بدءًا من الأنماط على مستوى البكسل فصاعدًا، وهو ما يتطلب موارد أكثر بكثير.
| الضبط الدقيق | التدريب من الصفر | |
|---|---|---|
| أوزان البداية | تم تدريبه مسبقًا على مجموعة بيانات COCO 80 فئة) | التهيئة العشوائية |
| الأمر | YOLO("yolo26n.pt") | YOLO("yolo26n.yaml") |
| التقارب | أسرع - تم تدريب الشبكة الأساسية بالفعل | أبطأ - تتعلم جميع الطبقات من الصفر |
| متطلبات البيانات | الصف السفلي - تعوض الميزات المُدرَّبة مسبقًا عن قلة البيانات | أعلى - يجب أن يتعلم النموذج جميع السمات من مجموعة البيانات وحدها |
| متى تستخدم | دروس مخصصة باستخدام صور طبيعية | مجالات تختلف اختلافاً جذرياً عن COCO الطب، والأقمار الصناعية، والرادار) |
لا يتطلب الضبط الدقيق أي كود إضافي
عندما .pt تم تحميل الملف باستخدام YOLO("yolo26n.pt")، يتم تخزين الأوزان المُدرَّبة مسبقًا في النموذج. استدعاء .train(data="custom.yaml") وبعد ذلك، يتم نقل جميع الأوزان المتوافقة تلقائيًا إلى بنية النموذج الجديد، وإعادة تهيئة أي طبقات غير متطابقة (مثل وحدة الكشف عندما يختلف عدد الفئات)، ثم يبدأ التدريب. ولا يتطلب الأمر تحميل الأوزان يدويًا أو تعديل الطبقات أو كتابة كود مخصص للتعلم بالنقل.
كيفية عمل نقل الأوزان المُدرَّبة مسبقًا
عندما يتم ضبط نموذج مُدرَّب مسبقًا على مجموعة بيانات تحتوي على عدد مختلف من الفئات (على سبيل المثال، من 80 فئة COCO إلى 5 فئات مخصصة)، Ultralytics نقل الأوزان مع مراعاة الشكل:
- نقل العمود الفقري والرقبة بالكامل - تستخلص هذه الطبقات السمات البصرية العامة، وتكون أشكالها مستقلة عن عدد الفئات.
- تمت إعادة تهيئة رأس الاستشعار جزئيًا - طبقات الإخراج التصنيفية (
cv3,one2one_cv3) لها أشكال مرتبطة بعدد الفئات (80 مقابل 5)، لذا لا يمكن نقلها ويتم تهيئتها عشوائياً. طبقات الانحدار الصندوقية (cv2,one2one_cv2) في الرأس لها أشكال ثابتة بغض النظر عن عدد الفئات، لذا يتم نقلها بشكل طبيعي. - تنتقل الغالبية العظمى من الأوزان عند تغيير عدد الفئات. ولا تتم إعادة تهيئة سوى الطبقات الخاصة بالتصنيف في وحدة الكشف - بينما تظل فروع الهيكل الأساسي والرقبة وانحدار الصندوق كما هي دون تغيير.
بالنسبة لمجموعات البيانات التي تحتوي على نفس عدد الفئات الموجودة في النموذج المُدرَّب مسبقًا (على سبيل المثال، ضبط الأوزان COCO على COCO لتناسب مجموعة بيانات أخرى تحتوي على 80 فئة)، يتم نقل 100٪ من الأوزان، بما في ذلك وحدة الكشف.
مثال على الضبط الدقيق الأساسي
مثال
from ultralytics import YOLO
model = YOLO("yolo26n.pt") # load pretrained model
model.train(data="path/to/data.yaml", epochs=50, imgsz=640)
yolo detect train model=yolo26n.pt data=path/to/data.yaml epochs=50 imgsz=640
اختيار حجم النموذج
تتمتع النماذج الأكبر حجماً بسعة أكبر، ولكنها تتطلب أيضاً تحديث عدد أكبر من المعلمات، مما قد يزيد من خطر الإفراط في التكييف (overfitting) عندما تكون بيانات التدريب محدودة. ويُعد البدء بنموذج أصغر حجماً (YOLO26n أو YOLO26s) والتوسع فقط عند وصول مقاييس التحقق إلى مرحلة الاستقرار نهجاً عملياً. ويعتمد الحجم الأمثل للنموذج على مدى تعقيد المهمة، وعدد الفئات، وتنوع مجموعة البيانات، والأجهزة المتاحة للنشر. انظر صفحة نموذج YOLO26 الكاملة للاطلاع على الأحجام المتاحة ومعايير الأداء.
اختيار المُحسِّن ومعدل التعلم
الافتراضي optimizer=auto يحدد هذا الإعداد المُحسِّن ومعدل التعلم بناءً على العدد الإجمالي لتكرارات التدريب:
- < 10,000 iterations (small datasets or few epochs): AdamW with a low, auto-calculated learning rate
- > 10,000 تكرار (مجموعات بيانات كبيرة): MuSGD (SGD هجين يجمع بينSGD ) مع lr=0.01
بالنسبة لمعظم مهام الضبط الدقيق، يعمل الإعداد الافتراضي بشكل جيد دون الحاجة إلى أي ضبط يدوي. يُنصح بضبط المُحسِّن بشكل صريح في الحالات التالية:
- التدريب غير مستقر (ارتفاعات أو تباعدات في الخسائر): جرب
optimizer=AdamW, lr0=0.001من أجل تقارب أكثر استقرارًا - ضبط نموذج كبير باستخدام مجموعة بيانات صغيرة: معدل تعلم أقل مثل
lr0=0.001يساعد في الحفاظ على السمات المُدرَّبة مسبقًا
يعمل مُحسِّن التلقائي على تجاوز الإعدادات اليدوية لـ lr0
عندما optimizer=auto، ستستمر دالة lr0 و momentum يتم تجاهل القيم. للتحكم في معدل التعلم يدويًّا، قم بتعيين المُحسِّن بشكل صريح: optimizer=SGD, lr0=0.005.
طبقات التجميد
يمنع التجميد تحديث طبقات معينة أثناء التدريب. وهذا يؤدي إلى تسريع عملية التدريب والحد من الإفراط في التكييف عندما تكون مجموعة البيانات صغيرة مقارنة بسعة النموذج.
في freeze تقبل هذه المعلمة إما عددًا صحيحًا أو قائمة. عدد صحيح freeze=10 يثبت أول 10 طبقات (من 0 إلى 9، وهو ما يتوافق مع الهيكل الأساسي في YOLO26). يمكن أن تحتوي القائمة على مؤشرات الطبقات مثل freeze=[0, 3, 5] لتجميد جزء من الهيكل الأساسي، أو سلاسل أسماء الوحدات مثل freeze=["23.cv2"] للتحكم الدقيق في فروع محددة داخل طبقة ما.
مثال
model.train(data="custom.yaml", epochs=50, freeze=10)
model.train(data="custom.yaml", epochs=50, freeze=[0, 1, 2, 3, 4])
# Freeze the box regression branch of the detection head
model.train(data="custom.yaml", epochs=50, freeze=["23.cv2"])
يعتمد عمق التجميد المناسب على مدى تشابه المجال المستهدف مع البيانات المُدرَّبة مسبقًا، وعلى كمية البيانات التدريبية المتاحة:
| السيناريو | التوصية | الأسباب |
|---|---|---|
| مجموعة بيانات كبيرة، مجال مشابه | freeze=None (الافتراضي) | بيانات كافية لتكييف جميع الطبقات دون الإفراط في التكييف |
| مجموعة بيانات صغيرة، مجال مشابه | freeze=10 | يحافظ على الميزات الأساسية، ويقلل من عدد المعلمات القابلة للتدريب |
| مجموعة بيانات صغيرة جدًا | freeze=23 | يتم تدريب رأس الكشف فقط، مما يقلل من مخاطر الإفراط في التكييف |
| نطاق بعيد عن COCO | freeze=None | قد لا تنتقل مهارات العمل الأساسية بشكل جيد وقد تتطلب إعادة تدريب |
يمكن أيضًا اعتبار عمق التجميد كمعلمة عليا - حيث mAP تجربة بعض القيم (0، 5، 10) ومقارنة معدل الدقة المتوسط mAP في مرحلة التحقق طريقة عملية لإيجاد الإعداد الأمثل لمجموعة بيانات معينة.
المعلمات الفائقة الرئيسية للضبط الدقيق
يتطلب الضبط الدقيق عمومًا تعديلات أقل على المعلمات الفائقة مقارنة بالتدريب من البداية. والمعلمات الأكثر أهمية هي:
epochs: يتقارب الضبط الدقيق أسرع من التدريب من الصفر. ابدأ بقيمة معتدلة واستخدمpatienceالتوقف مبكرًا عندما تستقر مؤشرات التحقق من الصحة.patience: تم تعيين القيمة الافتراضية 100 خصيصًا لعمليات التدريب الطويلة. ويؤدي خفض هذه القيمة إلى 10-20 إلى تجنب إضاعة الوقت في عمليات التدريب التي قد توصلت إلى النتيجة المرجوة بالفعل.warmup_epochs: يعمل الإعداد الافتراضي لعملية الإحماء (3 دورات) على زيادة معدل التعلم تدريجيًا من الصفر، مما يمنع التحديثات الكبيرة في التدرج من الإضرار بالسمات المُدرَّبة مسبقًا في المراحل الأولى من التكرارات. يُنصح بالاحتفاظ بالإعداد الافتراضي حتى عند إجراء الضبط الدقيق.
للاطلاع على القائمة الكاملة لمعلمات التدريب، راجع دليل تكوين التدريب.
الضبط الدقيق على مرحلتين
تقسم عملية الضبط الدقيق ذات المرحلتين التدريب إلى مرحلتين. في المرحلة الأولى، يتم تجميد الهيكل الأساسي وتدريب طبقات الرقبة والرأس فقط، مما يسمح لطبقات الكشف بالتكيف مع الفئات الجديدة دون الإخلال بالسمات التي تم تدريبها مسبقًا. أما في المرحلة الثانية، فيتم إلغاء تجميد جميع الطبقات وتدريب النموذج بالكامل بمعدل تعلم أقل من أجل صقل الهيكل الأساسي ليتناسب مع المجال المستهدف.
يُعد هذا النهج مفيدًا بشكل خاص عندما يختلف المجال المستهدف اختلافًا كبيرًا عن COCO الصور الطبية، والصور الجوية، والصور الميكروسكوبية)، حيث قد يتطلب الهيكل الأساسي بعض التعديل، لكن تدريب كل العناصر دفعة واحدة يؤدي إلى عدم الاستقرار. للاطلاع على كيفية إلغاء التجميد تلقائيًا باستخدام نهج قائم على الاستدعاءات المرتدة، انظر «تجميد وإلغاء تجميد الهيكل الأساسي».
الضبط الدقيق على مرحلتين
from ultralytics import YOLO
# Stage 1: freeze backbone, train head and neck
model = YOLO("yolo26n.pt")
model.train(data="custom.yaml", epochs=20, freeze=10, name="stage1", exist_ok=True)
# Stage 2: unfreeze all, fine-tune with lower lr
model = YOLO("runs/detect/stage1/weights/best.pt")
model.train(data="custom.yaml", epochs=30, lr0=0.001, name="stage2", exist_ok=True)
الأخطاء الشائعة
لا يُنتج النموذج أي تنبؤات
- عدم كفاية بيانات التدريب: يعد التدريب باستخدام عدد قليل جدًا من العينات السبب الأكثر شيوعًا - حيث لا يستطيع النموذج التعلم أو التعميم بناءً على بيانات قليلة جدًا. تأكد من توفر أمثلة متنوعة كافية لكل فئة قبل البحث عن أسباب أخرى.
- التحقق من مسارات مجموعات البيانات: مسارات غير صحيحة في
data.yamlتُنتج بصمت علامات صفرية. قم بتشغيلyolo detect val model=yolo26n.pt data=your_data.yamlقبل بدء التدريب للتأكد من تحميل العلامات بشكل صحيح. - عتبة ثقة أقل: إذا كانت هناك تنبؤات ولكن تم استبعادها، فحاول
conf=0.1أثناء الاستدلال. - التحقق من عدد الطلاب في الفصل: ضمان
ncفيdata.yamlيتطابق مع العدد الفعلي للفئات الموجودة في ملفات التسميات.
mAP معدل الضغط المتوسط ( mAP ) في مرحلة مبكرة
- إضافة المزيد من البيانات: تستفيد عملية الضبط الدقيق بشكل كبير من البيانات التدريبية الإضافية، لا سيما الأمثلة المتنوعة التي تتضمن زوايا وإضاءة وخلفيات مختلفة.
- التحقق من رصيد الحساب: ستكون درجات AP للفئات غير الممثلة تمثيلاً كافياً منخفضة. استخدم
cls_pwلتطبيق ترجيح فئة التردد العكسي (ابدأ بـcls_pw=0.25في حالة وجود خلل معتدل، قم بزيادة1.0(في حالة وجود خلل شديد). - تقليل التوسيع: بالنسبة لمجموعات البيانات الصغيرة جدًّا، قد يكون للتوسيع المكثف أضراره أكثر من فوائده. جرب
mosaic=0.5أوmosaic=0.0. - زيادة الدقة: بالنسبة لمجموعات البيانات التي تحتوي على كائنات صغيرة، جرب
imgsz=1280للحفاظ على التفاصيل.
ينخفض الأداء في الفئات الأصلية بعد عملية الضبط الدقيق
يُعرف هذا بـ«النسيان الكارثي» - حيث يفقد النموذج المعرفة المكتسبة سابقًا عند ضبطه حصريًّا على البيانات الجديدة. وغالبًا ما يكون النسيان أمرًا لا مفر منه ما لم يتم تضمين صور مجموعة البيانات الأصلية جنبًا إلى جنب مع البيانات الجديدة. وللتخفيف من حدة هذه المشكلة:
- دمج مجموعات البيانات: قم بتضمين أمثلة من الفئات الأصلية جنبًا إلى جنب مع الفئات الجديدة أثناء عملية الضبط الدقيق. فهذه هي الطريقة الوحيدة الموثوقة لمنع حدوث نسيان.
- تجميد العمود الفقري والرقبة: يساعد تجميد كل من العمود الفقري والرقبة بحيث لا يتم تدريب سوى رأس الكشف، في إجراء عمليات ضبط دقيق قصيرة بمعدل تعلم منخفض جدًا.
- تدريب النموذج لعدد أقل من الدورات: فكلما طالت مدة تدريب النموذج على البيانات الجديدة حصريًّا، زاد معدل النسيان.
الأسئلة الشائعة
كم عدد الصور التي أحتاجها لضبط نموذج YOLO؟
لا يوجد حد أدنى محدد - فالنتائج تعتمد على مدى تعقيد المهمة، وعدد الفئات، ومدى تشابه المجال مع COCO. وتعد الصور الأكثر تنوعًا (من حيث الإضاءة والزوايا والخلفيات) أكثر أهمية من الكمية وحدها. ابدأ بما لديك وقم بزيادة الحجم إذا كانت مقاييس التحقق غير كافية.
كيف يمكنني ضبط YOLO26 بدقة على مجموعة بيانات مخصصة؟
تحميل نموذج مدرب مسبقًا .pt الملف والاتصال .train() مع مسار ملف مخصص data.yaml. تتولى Ultralytics نقل الوزن، وإعادة تهيئة رأس الكشف، واختيار المُحسِّن. انظر الضبط الأساسي انظر القسم للاطلاع على مثال الكود الكامل.
لماذا لا يكتشف YOLO الذي قمت بضبطه بدقة أي شيء؟
الأسباب الأكثر شيوعًا هي المسارات غير الصحيحة في data.yaml (الذي يُنتج بصمت صفر علامات)، عدم تطابق بين nc في ملفات YAML وملفات التسميات الفعلية، أو عتبة ثقة مرتفعة للغاية. انظر الأخطاء الشائعة للحصول على قائمة مرجعية كاملة لحل المشكلات.
ما هي YOLO التي يجب أن أقوم بتجميدها من أجل الضبط الدقيق؟
يعتمد ذلك على حجم مجموعة البيانات ومدى تشابه المجال. بالنسبة لمجموعات البيانات الصغيرة التي تشبه مجال COCO فإن تجميد الهيكل الأساسي (freeze=10) يمنع الإفراط في التكييف. بالنسبة للمجالات التي تختلف كثيرًا عن COCO فإن ترك جميع الطبقات غير مجمدة (freeze=None) يتيح للهيكل الأساسي التكيف. انظر طبقات التجميد للاطلاع على التوصيات التفصيلية.
كيف يمكنني تجنب فقدان البيانات بشكل كارثي عند ضبط YOLO فئات جديدة؟
أدرج أمثلة للفئات الأصلية في بيانات التدريب إلى جانب الفئات الجديدة. وإذا تعذر ذلك، فقم بتجميد المزيد من الطبقات (freeze=10 (أو أعلى) واستخدام معدل تعلم أقل يساعد في الحفاظ على المعرفة المُدرَّبة مسبقًا. انظر ينخفض الأداء في الفئات الأصلية لمزيد من التفاصيل.