Skip to main content

كيفية الضبط الدقيق لـ 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 بنقل الأوزان مع مراعاة الشكل:

  1. يتم نقل العمود الفقري والعنق بالكامل - هذه الطبقات تستخرج ميزات بصرية عامة وأشكالها مستقلة عن عدد الفئات.
  2. يتم إعادة تهيئة رأس الاكتشاف جزئياً - طبقات مخرجات التصنيف (cv3, one2one_cv3) لها أشكال مرتبطة بعدد الفئات (80 مقابل 5)، لذا لا يمكن نقلها وتتم تهيئتها عشوائياً. طبقات انحدار الصندوق (cv2, one2one_cv2) في الرأس لها أشكال ثابتة بغض النظر عن عدد الفئات، لذا يتم نقلها بشكل طبيعي.
  3. تنتقل الغالبية العظمى من الأوزان عند تغيير عدد الفئات. فقط الطبقات الخاصة بالتصنيف في رأس الاكتشاف هي التي يعاد تهيئتها - أما العمود الفقري والعنق وفروع انحدار الصناديق فتبقى كما هي.

بالنسبة لمجموعات البيانات التي تحتوي على نفس عدد فئات النموذج المدرب مسبقاً (على سبيل المثال، الضبط الدقيق لأوزان مدربة على 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 يساعد في الحفاظ على الميزات المدربة مسبقاً
تتجاوز قيم auto optimizer قيم 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)

يعتمد عمق التجميد المناسب على مدى تشابه النطاق المستهدف مع البيانات المدربة مسبقاً وكمية بيانات التدريب المتاحة:

السيناريوتوصيةالأساس المنطقي
مجموعة بيانات كبيرة، نطاق مشابهfreeze=None (افتراضي)بيانات كافية لتكييف جميع الطبقات دون إفراط في التخصيص
مجموعة بيانات صغيرة، نطاق مشابهfreeze=10يحافظ على ميزات العمود الفقري، يقلل المعاملات القابلة للتدريب
مجموعة بيانات صغيرة جداًfreeze=23يتم تدريب رأس الاكتشاف فقط، مما يقلل مخاطر الإفراط في التخصيص
نطاق بعيد عن COCOfreeze=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 أو أعلى) واستخدام معدل تعلم أقل يساعد في الحفاظ على المعرفة المدربة مسبقاً. راجع تدهور الأداء في الفئات الأصلية لمزيد من التفاصيل.

التعليقات