كيفية الضبط الدقيق لـ YOLO على مجموعة بيانات مخصصة
الضبط الدقيق يكيف نموذجاً مدرباً مسبقاً للتعرف على فئات جديدة من خلال البدء من أوزان متعلمة بدلاً من التهيئة العشوائية. فبدلاً من التدريب من الصفر لمئات الدورات (epochs)، يستفيد الضبط الدقيق من COCO الميزات المدربة مسبقاً ويتقارب على البيانات المخصصة في جزء بسيط من الوقت.
يغطي هذا الدليل الضبط الدقيق لـ YOLO26 على مجموعات بيانات مخصصة، بدءاً من الاستخدام الأساسي وصولاً إلى تقنيات متقدمة مثل تجميد الطبقات و التدريب على مرحلتين.
الضبط الدقيق مقابل التدريب من الصفر
لقد تعلم النموذج المدرب مسبقاً بالفعل ميزات بصرية عامة - مثل اكتشاف الحواف، والتعرف على الأنسجة، وفهم الأشكال - من ملايين الصور. التعلم بنقل المعرفة (Transfer learning) إعادة استخدام هذه المعرفة من خلال الضبط الدقيق وتعليم النموذج فقط كيف تبدو الفئات الجديدة، وهذا هو السبب في أنه يتقارب بشكل أسرع ويتطلب بيانات أقل. أما التدريب من الصفر فيتجاهل كل ذلك ويجبر النموذج على تعلم كل شيء من أنماط البكسل، مما يتطلب موارد أكبر بكثير.
| الضبط الدقيق | التدريب من الصفر | |
|---|---|---|
| أوزان البدء | مدرب مسبقاً على COCO (80 فئة) | تهيئة عشوائية |
| الأمر | YOLO("yolo26n.pt") | YOLO("yolo26n.yaml") |
| التقارب | أسرع - العمود الفقري (backbone) مدرب بالفعل | أبطأ - جميع الطبقات تتعلم من الصفر |
| متطلبات البيانات | أقل - الميزات المدربة مسبقاً تعوض نقص البيانات | أعلى - يجب أن يتعلم النموذج جميع الميزات من مجموعة البيانات وحدها |
| متى تستخدم | فئات مخصصة بصور طبيعية | نطاقات تختلف جذرياً عن COCO (طبية، أقمار صناعية، رادار) |
عندما يتم تحميل ملف .pt مع YOLO("yolo26n.pt")، يتم تخزين الأوزان المدربة مسبقاً في النموذج. يؤدي استدعاء .train(data="custom.yaml") بعد ذلك تلقائياً إلى نقل جميع الأوزان المتوافقة إلى بنية النموذج الجديدة، وإعادة تهيئة أي طبقات لا تتطابق (مثل رأس الاكتشاف عندما يختلف عدد الفئات)، وبدء التدريب. لا يلزم تحميل الأوزان يدوياً أو التلاعب بالطبقات أو كتابة كود مخصص لنقل التعلم.
كيف يعمل نقل الأوزان المدربة مسبقاً
عندما يتم ضبط نموذج مدرب مسبقاً بدقة على مجموعة بيانات ذات عدد مختلف من الفئات (على سبيل المثال، من 80 فئة في COCO إلى 5 فئات مخصصة)، تقوم Ultralytics بنقل الأوزان مع مراعاة الشكل:
- يتم نقل العمود الفقري والعنق بالكامل - هذه الطبقات تستخرج ميزات بصرية عامة وأشكالها مستقلة عن عدد الفئات.
- يتم إعادة تهيئة رأس الاكتشاف جزئياً - طبقات مخرجات التصنيف (
cv3,one2one_cv3) لها أشكال مرتبطة بعدد الفئات (80 مقابل 5)، لذا لا يمكن نقلها وتتم تهيئتها عشوائياً. طبقات انحدار الصندوق (cv2,one2one_cv2) في الرأس لها أشكال ثابتة بغض النظر عن عدد الفئات، لذا يتم نقلها بشكل طبيعي. - تنتقل الغالبية العظمى من الأوزان عند تغيير عدد الفئات. فقط الطبقات الخاصة بالتصنيف في رأس الاكتشاف هي التي يعاد تهيئتها - أما العمود الفقري والعنق وفروع انحدار الصناديق فتبقى كما هي.
بالنسبة لمجموعات البيانات التي تحتوي على نفس عدد فئات النموذج المدرب مسبقاً (على سبيل المثال، الضبط الدقيق لأوزان مدربة على 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)اختيار حجم النموذج
النماذج الأكبر لها سعة أكبر ولكنها تحتوي أيضاً على معاملات (parameters) أكثر للتحديث، مما قد يزيد من خطر الإفراط في التخصيص (overfitting) عندما تكون بيانات التدريب محدودة. البدء بنموذج أصغر (YOLO26n أو YOLO26s) والتوسع فقط إذا استقرت مقاييس التحقق هو نهج عملي. يعتمد حجم النموذج الأمثل على تعقيد المهمة، وعدد الفئات، وتنوع مجموعة البيانات، والأجهزة المتاحة للنشر. راجع صفحة نموذج YOLO26 الكامل للأحجام المتاحة ومقاييس الأداء.
اختيار المحسن ومعدل التعلم
الإعداد الافتراضي optimizer=auto يختار المحسن ومعدل التعلم بناءً على العدد الإجمالي لتكرارات التدريب:
- < 10,000 تكرار (مجموعات بيانات صغيرة أو بضع دورات): AdamW مع معدل تعلم منخفض ومحسوب تلقائياً
- > 10,000 تكرار (مجموعات بيانات كبيرة): MuSGD (محسن هجين Muon+SGD) مع lr=0.01
بالنسبة لمعظم مهام الضبط الدقيق، يعمل الإعداد الافتراضي بشكل جيد دون أي تعديل يدوي. فكر في ضبط المحسن صراحةً عندما:
- يكون التدريب غير مستقر (ارتفاعات في الخسارة أو تباعد): جرب
optimizer=AdamW, lr0=0.001لتقارب أكثر استقراراً - الضبط الدقيق لنموذج كبير على مجموعة بيانات صغيرة: معدل تعلم أقل مثل
lr0=0.001يساعد في الحفاظ على الميزات المدربة مسبقاً
عند استخدام 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)يعتمد عمق التجميد المناسب على مدى تشابه النطاق المستهدف مع البيانات المدربة مسبقاً وكمية بيانات التدريب المتاحة:
| السيناريو | توصية | الأساس المنطقي |
|---|---|---|
| مجموعة بيانات كبيرة، نطاق مشابه | freeze=None (افتراضي) | بيانات كافية لتكييف جميع الطبقات دون إفراط في التخصيص |
| مجموعة بيانات صغيرة، نطاق مشابه | freeze=10 | يحافظ على ميزات العمود الفقري، يقلل المعاملات القابلة للتدريب |
| مجموعة بيانات صغيرة جداً | freeze=23 | يتم تدريب رأس الاكتشاف فقط، مما يقلل مخاطر الإفراط في التخصيص |
| نطاق بعيد عن COCO | freeze=None | ميزات العمود الفقري قد لا تنتقل بشكل جيد وتحتاج إلى إعادة تدريب |
يمكن أيضاً التعامل مع عمق التجميد كمعامل فائق (hyperparameter) - تجربة بضع قيم (0, 5, 10) ومقارنة mAP التحقق هو طريقة عملية لإيجاد أفضل إعداد لمجموعة بيانات معينة.
المعاملات الفائقة الرئيسية للضبط الدقيق
يتطلب الضبط الدقيق عموماً تعديلات أقل في المعاملات الفائقة مقارنة بالتدريب من الصفر. المعاملات الأكثر أهمية هي:
epochs: الضبط الدقيق يتقارب أسرع من التدريب من الصفر. ابدأ بقيمة معتدلة واستخدمpatienceللإيقاف المبكر عندما تستقر مقاييس التحقق.patience: القيمة الافتراضية 100 مصممة لجولات التدريب الطويلة. تقليل هذا إلى 10-20 يتجنب إضاعة الوقت في جولات تقاربت بالفعل.warmup_epochs: الإحماء الافتراضي (3 دورات) يزيد معدل التعلم تدريجياً من الصفر، مما يمنع تحديثات التدرج الكبيرة من إتلاف الميزات المدربة مسبقاً في التكرارات الأولى. يوصى بالحفاظ على الإعداد الافتراضي حتى عند الضبط الدقيق.
للحصول على القائمة الكاملة لمعاملات التدريب، راجع مرجع تكوين التدريب.
الضبط الدقيق على مرحلتين
يقسم الضبط الدقيق على مرحلتين التدريب إلى مرحلتين. المرحلة الأولى تجمد العمود الفقري وتدرب العنق والرأس فقط، مما يسمح لطبقات الاكتشاف بالتكيف مع الفئات الجديدة دون تعطيل الميزات المدربة مسبقاً. المرحلة الثانية تقوم بإلغاء تجميد جميع الطبقات وتدرب النموذج الكامل بمعدل تعلم أقل لتحسين العمود الفقري للنطاق المستهدف.
هذا النهج مفيد بشكل خاص عندما يختلف النطاق المستهدف بشكل كبير عن COCO (صور طبية، تصوير جوي، مجهري)، حيث قد يحتاج العمود الفقري إلى تكييف ولكن تدريب كل شيء مرة واحدة يسبب عدم استقرار. لإلغاء التجميد التلقائي باستخدام نهج قائم على callback، راجع تجميد وإلغاء تجميد العمود الفقري.
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 التحقق من الصحة مبكراً
- إضافة المزيد من البيانات: يستفيد الضبط الدقيق بشكل كبير من بيانات التدريب الإضافية، خاصة الأمثلة المتنوعة ذات الزوايا والإضاءة والخلفيات المختلفة.
- تحقق من توازن الفئات: الفئات الممثلة تمثيلاً ناقصاً سيكون لها AP منخفض. استخدم
cls_pwلتطبيق ترجيح الفئات ذو التردد العكسي (ابدأ بـcls_pw=0.25للاختلال المعتدل، وزد إلى1.0للاختلال الشديد). - تقليل الزيادة (Augmentation): بالنسبة لمجموعات البيانات الصغيرة جداً، يمكن أن تضر الزيادة المكثفة أكثر مما تنفع. جرب
mosaic=0.5أوmosaic=0.0. - زيادة الدقة: بالنسبة لمجموعات البيانات التي تحتوي على كائنات صغيرة، جرب
imgsz=1280للحفاظ على التفاصيل.
تدهور الأداء في الفئات الأصلية بعد الضبط الدقيق
يُعرف هذا بالنسيان الكارثي - حيث يفقد النموذج المعرفة المكتسبة مسبقاً عند ضبطه حصرياً على بيانات جديدة. النسيان لا مفر منه غالباً دون تضمين صور مجموعة البيانات الأصلية جنباً إلى جنب مع البيانات الجديدة. للتخفيف من ذلك:
- دمج مجموعات البيانات: قم بتضمين أمثلة من الفئات الأصلية جنباً إلى جنب مع الفئات الجديدة أثناء الضبط الدقيق. هذه هي الطريقة الموثوقة الوحيدة لمنع النسيان.
- تجميد الهيكل الأساسي (Backbone) والعنق (Neck): تجميد كل من الهيكل الأساسي والعنق بحيث يتم تدريب رأس الكشف فقط يساعد في جولات الضبط الدقيق القصيرة مع معدل تعلم منخفض جداً.
- التدريب لعدد أقل من الحقب (Epochs): كلما طالت فترة تدريب النموذج على البيانات الجديدة حصرياً، زاد النسيان.
الأسئلة الشائعة
كم عدد الصور التي أحتاجها للضبط الدقيق لـ YOLO؟
لا يوجد حد أدنى ثابت - تعتمد النتائج على تعقيد المهمة، وعدد الفئات، ومدى تشابه المجال مع COCO. الصور الأكثر تنوعاً (إضاءة متنوعة، زوايا، خلفيات) تهم أكثر من الكمية الخام. ابدأ بما لديك وتوسع إذا كانت مقاييس التحقق غير كافية.
كيف أقوم بالضبط الدقيق لـ YOLO26 على مجموعة بيانات مخصصة؟
قم بتحميل ملف .pt مدرب مسبقاً واستدع .train() مع مسار إلى data.yaml مخصص. تقوم Ultralytics تلقائياً بالتعامل مع نقل الأوزان، وإعادة تهيئة رأس الكشف، واختيار المُحسِّن. راجع قسم الضبط الدقيق الأساسي للحصول على مثال الكود الكامل.
لماذا لا يكتشف نموذج YOLO الذي قمت بضبطه أي شيء؟
الأسباب الأكثر شيوعاً هي المسارات غير الصحيحة في data.yaml (والتي تنتج صفر تسميات بصمت)، أو عدم تطابق بين nc في YAML وملفات التسميات الفعلية، أو حد ثقة مرتفع جداً. راجع المخاطر الشائعة للحصول على قائمة مرجعية كاملة لاستكشاف الأخطاء وإصلاحها.
ما هي طبقات YOLO التي يجب علي تجميدها للضبط الدقيق؟
يعتمد ذلك على حجم مجموعة البيانات وتشابه المجال. بالنسبة لمجموعات البيانات الصغيرة ذات المجال المشابه لـ COCO، فإن تجميد الهيكل الأساسي (freeze=10) يمنع الإفراط في التخصيص (Overfitting). بالنسبة للمجالات المختلفة جداً عن COCO، فإن ترك جميع الطبقات غير مجمدة (freeze=None) يسمح للهيكل الأساسي بالتكيف. راجع تجميد الطبقات للحصول على توصيات مفصلة.
كيف أمنع النسيان الكارثي عند الضبط الدقيق لـ YOLO على فئات جديدة؟
قم بتضمين أمثلة من الفئات الأصلية في بيانات التدريب جنباً إلى جنب مع الفئات الجديدة. إذا لم يكن ذلك ممكناً، فإن تجميد المزيد من الطبقات (freeze=10 أو أعلى) واستخدام معدل تعلم أقل يساعد في الحفاظ على المعرفة المدربة مسبقاً. راجع تدهور الأداء في الفئات الأصلية لمزيد من التفاصيل.