دليل ضبط المعاملات الفائقة لـ Ultralytics YOLO

مقدمة

ضبط المعاملات الفائقة ليس مجرد إعداد لمرة واحدة، بل هو عملية تكرارية تهدف إلى تحسين مقاييس أداء نموذج تعلم الآلة، مثل الدقة، والإحكام، والاستدعاء. في سياق Ultralytics YOLO، يمكن أن تتراوح هذه المعاملات الفائقة من معدل التعلم إلى تفاصيل البنية، مثل عدد الطبقات أو أنواع دوال التنشيط المستخدمة. تدعم منصة Ultralytics أيضاً التدريب السحابي مع معاملات فائقة قابلة للتهيئة وتتبع المقاييس في الوقت الفعلي.



Watch: How to Tune Hyperparameters for Better Model Performance 🚀

ما هي المعاملات الفائقة؟

المعاملات الفائقة هي إعدادات هيكلية عالية المستوى للخوارزمية. يتم ضبطها قبل مرحلة التدريب وتظل ثابتة أثناءها. إليك بعض المعاملات الفائقة التي يتم ضبطها بشكل شائع في Ultralytics YOLO:

  • معدل التعلم lr0: يحدد حجم الخطوة في كل تكرار أثناء التحرك نحو القيمة الدنيا في دالة الخسارة.
  • حجم الدفعة batch: عدد الصور التي تتم معالجتها في وقت واحد في تمريرة أمامية.
  • عدد الحقب epochs: الحقبة هي عبارة عن تمريرة أمامية وخلفية كاملة لجميع أمثلة التدريب.
  • مواصفات البنية: مثل عدد القنوات، وعدد الطبقات، وأنواع دوال التنشيط، إلخ.

Hyperparameter optimization search space visualization

للحصول على قائمة كاملة بمعاملات التوسيع الفائقة المستخدمة في YOLO26، يرجى الرجوع إلى صفحة التكوينات.

التطور الجيني والطفرات

يستخدم Ultralytics YOLO الخوارزميات الجينية لتحسين المعاملات الفائقة. الخوارزميات الجينية مستوحاة من آلية الانتقاء الطبيعي وعلم الوراثة.

  • التقاطع (Crossover): يجمع كل تكرار بين جينات من ما يصل إلى تسعة من أفضل التكوينات ملاءمة التي تم رؤيتها حتى الآن، باستخدام تقاطع BLX-α مع اختيار الوالدين الموزون حسب الملاءمة.
  • الطفرة (Mutation): يتم بعد ذلك تعديل المرشح الذي تمت إعادة دمجه بواسطة عامل ضرب لوغاريتمي طبيعي مطبق على كل معامل فائق (باحتمالية 0.5 لكل معامل). تتناقص قوة الطفرة سيجما خطياً من 0.2 إلى 0.1 على مدار الـ 300 تكرار الأولى، بحيث تستكشف الخوارزمية بشكل واسع في البداية وتتحسن مع تقاربها. التكرار 1 ليس لديه والدين للتقاطع معه ويستخدم المعاملات الفائقة الافتراضية للتدريب كخط أساس.

التحضير لضبط المعاملات الفائقة

قبل أن تبدأ عملية الضبط، من المهم القيام بما يلي:

  1. تحديد المقاييس: حدد المقاييس التي ستستخدمها لتقييم أداء النموذج. قد يكون هذا AP50، أو درجة F1، أو غيرها.
  2. تحديد ميزانية الضبط: حدد مقدار الموارد الحسابية التي ترغب في تخصيصها. يمكن أن يكون ضبط المعاملات الفائقة مكثفاً من الناحية الحسابية.

الخطوات المتضمنة

تهيئة المعاملات الفائقة

ابدأ بمجموعة معقولة من المعاملات الفائقة الأولية. يمكن أن يكون هذا إما المعاملات الفائقة الافتراضية التي يحددها Ultralytics YOLO أو شيئاً يعتمد على معرفتك بالمجال أو تجارب سابقة.

تعديل المعاملات الفائقة (الطفرة)

استخدم طريقة _mutate لإنتاج مجموعة جديدة من المعاملات الفائقة بناءً على المجموعة الموجودة. تتعامل فئة Tuner مع هذه العملية تلقائياً.

تدريب النموذج

يتم التدريب باستخدام المجموعة المعدلة من المعاملات الفائقة. يتم بعد ذلك تقييم أداء التدريب باستخدام المقاييس التي اخترتها.

تقييم النموذج

استخدم مقاييس مثل AP50، أو درجة F1، أو مقاييس مخصصة لتقييم أداء النموذج. تساعد عملية التقييم في تحديد ما إذا كانت المعاملات الفائقة الحالية أفضل من سابقاتها.

تسجيل النتائج

من الضروري تسجيل كل من مقاييس الأداء والمعاملات الفائقة المقابلة للرجوع إليها في المستقبل. يقوم Ultralytics YOLO تلقائياً بحفظ هذه النتائج بتنسيق NDJSON.

التكرار

تتكرر العملية حتى يتم الوصول إلى عدد التكرارات المحدد أو حتى يصبح مقياس الأداء مرضياً. يبني كل تكرار على المعرفة المكتسبة من عمليات التشغيل السابقة.

وصف مساحة البحث الافتراضية

يسرد الجدول التالي معاملات مساحة البحث الافتراضية لضبط المعاملات الفائقة في YOLO26. يحتوي كل معامل على نطاق قيمة محدد بواسطة زوج (min, max).

المعاملالنوعنطاق القيمةالوصف
lr0float(1e-5, 1e-2)معدل التعلم الأولي في بداية التدريب. القيم الأقل توفر تدريباً أكثر استقراراً ولكن تقارباً أبطأ
lrffloat(0.01, 1.0)عامل معدل التعلم النهائي ككسر من lr0. يتحكم في مقدار انخفاض معدل التعلم أثناء التدريب
momentumfloat(0.7, 0.98)عامل الزخم لـ SGD. القيم الأعلى تساعد في الحفاظ على اتجاه ثابت للتدرج ويمكن أن تسرع التقارب
weight_decayfloat(0.0, 0.001)عامل التنظيم L2 لمنع فرط التخصيص. القيم الأكبر تفرض تنظيماً أقوى
warmup_epochsfloat(0.0, 5.0)عدد الحقبات للإحماء الخطي لمعدل التعلم. يساعد في منع عدم استقرار التدريب المبكر
warmup_momentumfloat(0.0, 0.95)الزخم الأولي أثناء مرحلة الإحماء. يزداد تدريجياً إلى قيمة الزخم النهائية
boxfloat(1.0, 20.0)وزن خسارة مربع الإحاطة في إجمالي دالة الخسارة. يوازن بين انحدار المربع والتصنيف
clsfloat(0.1, 4.0)وزن خسارة التصنيف في إجمالي دالة الخسارة. القيم الأعلى تؤكد على التنبؤ الصحيح للفئة
cls_pwfloat(0.0, 1.0)قوة ترجيح الفئة للتعامل مع عدم توازن الفئات. القيم الأعلى تزيد الوزن على الفئات النادرة
dflfloat(0.4, 12.0)وزن DFL (خسارة التنسيق البؤري) في إجمالي دالة الخسارة. القيم الأعلى تؤكد على تحديد موقع مربع الإحاطة بدقة
hsv_hfloat(0.0, 0.1)نطاق توسيع تدرج اللون العشوائي في مساحة لون HSV. يساعد النموذج على التعميم عبر تغيرات الألوان
hsv_sfloat(0.0, 0.9)نطاق توسيع التشبع العشوائي في مساحة HSV. يحاكي ظروف إضاءة مختلفة
hsv_vfloat(0.0, 0.9)نطاق توسيع القيمة (السطوع) العشوائي. يساعد النموذج على التعامل مع مستويات تعرض مختلفة
degreesfloat(0.0, 45.0)الحد الأقصى لتوسيع الدوران بالدرجات. يساعد النموذج على أن يصبح ثابتاً تجاه اتجاه الكائن
translatefloat(0.0, 0.9)الحد الأقصى لتوسيع الإزاحة ككسر من حجم الصورة. يحسن المتانة لموضع الكائن
scalefloat(0.0, 0.95)نطاق توسيع القياس العشوائي. يساعد النموذج على اكتشاف الكائنات بأحجام مختلفة
shearfloat(0.0, 10.0)الحد الأقصى لتوسيع القص بالدرجات. يضيف تشوهات تشبه المنظور إلى صور التدريب
perspectivefloat(0.0, 0.001)نطاق توسيع المنظور العشوائي. يحاكي زوايا رؤية مختلفة
flipudfloat(0.0, 1.0)احتمالية قلب الصورة رأسياً أثناء التدريب. مفيد للصور العلوية/الجوية
fliplrfloat(0.0, 1.0)احتمالية قلب الصورة أفقياً. يساعد النموذج على أن يصبح ثابتاً تجاه اتجاه الكائن
bgrfloat(0.0, 1.0)احتمالية استخدام توسيع BGR، والذي يبدل قنوات الألوان. يمكن أن يساعد في ثبات اللون
mosaicfloat(0.0, 1.0)احتمالية استخدام توسيع الفسيفساء (mosaic)، الذي يجمع 4 صور. مفيد بشكل خاص لاكتشاف الكائنات الصغيرة
mixupfloat(0.0, 1.0)احتمالية استخدام توسيع الخلط (mixup)، الذي يمزج بين صورتين. يمكن أن يحسن متانة النموذج
cutmixfloat(0.0, 1.0)احتمالية استخدام توسيع القص والخلط (cutmix). يجمع بين مناطق الصور مع الحفاظ على الميزات المحلية
copy_pastefloat(0.0, 1.0)احتمالية استخدام توسيع النسخ واللصق (copy-paste). يساعد في تحسين أداء تجزئة المثيلات
close_mosaicfloat(0.0, 10.0)يعطل الفسيفساء في آخر N حقبة لتحقيق استقرار التدريب قبل الانتهاء

مثال على مساحة بحث مخصصة

إليك كيفية تحديد مساحة بحث واستخدام طريقة model.tune() لاستخدام فئة Tuner لضبط المعاملات الفائقة لـ YOLO26n على COCO8 لمدة 30 حقبة مع مُحسن AdamW وتخطي الرسم، وإنشاء نقاط التحقق، والتحقق بخلاف الحقبة الأخيرة لضبط أسرع.

تحذير

هذا المثال للتوضيح فقط. نادراً ما تكون المعاملات الفائقة المشتقة من عمليات ضبط قصيرة أو صغيرة النطاق مثالية للتدريب في العالم الحقيقي. عملياً، يجب إجراء الضبط في ظل إعدادات مشابهة للتدريب الكامل — بما في ذلك مجموعات البيانات المقارنة، والحقب، والتوسيعات — لضمان نتائج موثوقة وقابلة للنقل. قد يؤدي الضبط السريع إلى انحياز المعاملات نحو تقارب أسرع أو مكاسب تحقق قصيرة المدى لا تتعمم.

مثال
from ultralytics import YOLO

# Initialize the YOLO model
model = YOLO("yolo26n.pt")

# Define search space
search_space = {
    "lr0": (1e-5, 1e-2),
    "degrees": (0.0, 45.0),
}

# Tune hyperparameters on COCO8 for 30 epochs
model.tune(
    data="coco8.yaml",
    epochs=30,
    iterations=300,
    optimizer="AdamW",
    space=search_space,
    plots=False,
    save=False,
    val=False,
)

استئناف جلسة ضبط معاملات فائقة مقطوعة

يمكنك استئناف جلسة ضبط معاملات فائقة مقطوعة عن طريق تمرير resume=True. يمكنك اختيارياً تمرير اسم الدليل name المستخدم تحت runs/{task} للاستئناف. بخلاف ذلك، سيستأنف الجلسة المقطوعة الأخيرة. تحتاج أيضاً إلى تقديم جميع وسائط التدريب السابقة بما في ذلك data، وepochs، وiterations، وspace.

استخدام `resume=True` مع `model.tune()`
from ultralytics import YOLO

# Define a YOLO model
model = YOLO("yolo26n.pt")

# Define search space
search_space = {
    "lr0": (1e-5, 1e-2),
    "degrees": (0.0, 45.0),
}

# Resume previous run
results = model.tune(data="coco8.yaml", epochs=50, iterations=300, space=search_space, resume=True)

# Resume tuning run with name 'tune_exp'
results = model.tune(data="coco8.yaml", epochs=50, iterations=300, space=search_space, name="tune_exp", resume=True)

النتائج

بعد إكمال عملية ضبط المعاملات الفائقة بنجاح، ستحصل على العديد من الملفات والأدلة التي تلخص نتائج الضبط. يصف ما يلي كلاً منها:

هيكل الملفات

إليك كيف سيبدو هيكل الدليل للنتائج. تحتوي أدلة التدريب مثل train1/ على تكرارات ضبط فردية، أي نموذج واحد تم تدريبه بمجموعة واحدة من المعاملات الفائقة. يحتوي دليل tune/ على نتائج الضبط من جميع تدريبات النماذج الفردية:

runs/
└── detect/
    ├── train1/
    ├── train2/
    ├── ...
    └── tune/
        ├── best_hyperparameters.yaml
        ├── tune_fitness.png
        ├── tune_results.ndjson
        ├── tune_scatter_plots.png
        └── weights/
            ├── last.pt
            └── best.pt

أوصاف الملفات

best_hyperparameters.yaml

يحتوي ملف YAML هذا على أفضل المعاملات الفائقة أداءً التي تم العثور عليها خلال عملية الضبط. يمكنك استخدام هذا الملف لتهيئة عمليات التدريب المستقبلية بهذه الإعدادات المحسنة.

  • التنسيق: YAML

  • الاستخدام: نتائج المعاملات الفائقة

  • مثال:

    # 558/900 iterations complete ✅ (45536.81s)
    # Results saved to /usr/src/ultralytics/runs/detect/tune
    # Best fitness=0.64297 observed at iteration 498
    # Best fitness metrics are {'metrics/precision(B)': 0.87247, 'metrics/recall(B)': 0.71387, 'metrics/mAP50(B)': 0.79106, 'metrics/mAP50-95(B)': 0.62651, 'val/box_loss': 2.79884, 'val/cls_loss': 2.72386, 'val/dfl_loss': 0.68503, 'fitness': 0.64297}
    # Best fitness model is /usr/src/ultralytics/runs/detect/train498
    # Best fitness hyperparameters are printed below.
    
    lr0: 0.00269
    lrf: 0.00288
    momentum: 0.73375
    weight_decay: 0.00015
    warmup_epochs: 1.22935
    warmup_momentum: 0.1525
    box: 18.27875
    cls: 1.32899
    dfl: 0.56016
    hsv_h: 0.01148
    hsv_s: 0.53554
    hsv_v: 0.13636
    degrees: 0.0
    translate: 0.12431
    scale: 0.07643
    shear: 0.0
    perspective: 0.0
    flipud: 0.0
    fliplr: 0.08631
    mosaic: 0.42551
    mixup: 0.0
    copy_paste: 0.0

tune_fitness.png

هذا رسم بياني يعرض مستوى الملاءمة (fitness) مقابل عدد التكرارات. يساعدك على تصور كيفية أداء الخوارزمية الجينية بمرور الوقت.

  • التنسيق: PNG
  • الاستخدام: تصور الأداء

Hyperparameter Tuning Fitness vs Iteration

يحتوي الرسم البياني على:

  • علامة واحدة لكل تكرار لكل مجموعة بيانات، لذا فإن تشغيل مجموعة بيانات واحدة يظهر نقطة واحدة لكل تكرار، بينما يظهر التشغيل على مجموعات بيانات متعددة نقطة واحدة لكل مجموعة بيانات في كل تكرار.
  • خط "متوسط ممهد" منقط تم حسابه كـ Gaussian smoothing (sigma=3) فوق قيم الملاءمة عالية المستوى لكل تكرار.

tune_results.ndjson

ملف NDJSON يحتوي على نتائج مفصلة لكل تكرار ضبط. كل سطر عبارة عن كائن JSON واحد يحتوي على الملاءمة الإجمالية، والمعاملات الفائقة المضبوطة، والمقاييس لكل مجموعة بيانات. يستخدم ضبط مجموعة البيانات الواحدة ومجموعات البيانات المتعددة نفس تنسيق الملف.

  • التنسيق: NDJSON
  • الاستخدام: تتبع نتائج كل تكرار.
  • مثال:

تم عرض مثال منسق بشكل جميل أدناه لسهولة القراءة. في ملف .ndjson الفعلي، يتم تخزين كل كائن في سطر واحد.

{
    "iteration": 1,
    "fitness": 0.48628,
    "hyperparameters": {
        "lr0": 0.01,
        "lrf": 0.01,
        "momentum": 0.937,
        "weight_decay": 0.0005
    },
    "datasets": {
        "coco8": {
            "metrics/precision(B)": 0.65666,
            "metrics/recall(B)": 0.85,
            "metrics/mAP50(B)": 0.85086,
            "metrics/mAP50-95(B)": 0.64104,
            "val/box_loss": 1.57958,
            "val/cls_loss": 1.04986,
            "val/dfl_loss": 1.32641,
            "fitness": 0.64104
        },
        "coco8-grayscale": {
            "metrics/precision(B)": 0.6582,
            "metrics/recall(B)": 0.51667,
            "metrics/mAP50(B)": 0.59106,
            "metrics/mAP50-95(B)": 0.33152,
            "val/box_loss": 1.95424,
            "val/cls_loss": 1.64059,
            "val/dfl_loss": 1.70226,
            "fitness": 0.33152
        }
    },
    "save_dirs": {
        "coco8": "runs/detect/coco8",
        "coco8-grayscale": "runs/detect/coco8-grayscale"
    }
}

The top-level fitness is the arithmetic mean of the per-dataset fitness values. For single-dataset tuning the datasets dict has one entry whose fitness equals the top-level fitness. One JSON object is recorded per completed iteration. The actual save_dirs paths are absolute; they are abbreviated above for readability.

tune_scatter_plots.png

يحتوي هذا الملف على مخططات مبعثرة تم إنشاؤها من tune_results.ndjson، مما يساعدك على تصور العلاقات بين المعاملات الفائقة المختلفة ومقاييس الأداء. المعاملات الفائقة التي تكون قيمتها الافتراضية 0 (على سبيل المثال، degrees و shear أدناه) قد تتطور ببطء شديد من بذورها الأولية لأن عامل الطفرة الضربي لديه القليل جداً ليتوسع به من قيمة قريبة من الصفر.

  • التنسيق: PNG
  • الاستخدام: تحليل البيانات الاستكشافي

Hyperparameter tuning results scatter plot analysis

weights/

يحتوي هذا الدليل على نماذج PyTorch المحفوظة لآخر التكرارات وأفضلها خلال عملية ضبط المعاملات الفائقة.

  • last.pt: ملف last.pt هو الأوزان من آخر حقبة (epoch) للتدريب.
  • best.pt: ملف best.pt هو الأوزان للتكرار الذي حقق أفضل درجة ملاءمة.

باستخدام هذه النتائج، يمكنك اتخاذ قرارات أكثر استنارة لعمليات تدريب وتحليلات النماذج المستقبلية. لا تتردد في الرجوع إلى هذه النتائج لفهم مدى جودة أداء نموذجك وكيف يمكنك تحسينه بشكل أكبر.

خاتمة

عملية ضبط المعاملات الفائقة في Ultralytics YOLO مبسطة ولكنها قوية، بفضل نهجها القائم على الخوارزمية الجينية الذي يجمع بين تقاطع BLX-α وطفرة log-normal. ستساعدك الخطوات الموضحة في هذا الدليل على ضبط نموذجك بشكل منهجي لتحقيق أداء أفضل.

قراءة إضافية

  1. تحسين المعاملات الفائقة على ويكيبيديا
  2. دليل تطور المعاملات الفائقة لـ YOLOv5
  3. ضبط المعاملات الفائقة بكفاءة باستخدام Ray Tune و YOLO26

للحصول على رؤى أعمق، يمكنك استكشاف الكود المصدري لـ Tuner class والوثائق المصاحبة. إذا كانت لديك أي أسئلة أو طلبات ميزات أو كنت بحاجة إلى مزيد من المساعدة، فلا تتردد في التواصل معنا على GitHub أو Discord.

الأسئلة الشائعة

كيف يمكنني تحسين معدل التعلم لـ Ultralytics YOLO أثناء ضبط المعاملات الفائقة؟

لتحسين معدل التعلم لـ Ultralytics YOLO، ابدأ بتعيين معدل تعلم أولي باستخدام المعامل lr0. تتراوح القيم الشائعة من 0.001 إلى 0.01. أثناء عملية ضبط المعاملات الفائقة، سيتم تحوير هذه القيمة للعثور على الإعداد الأمثل. يمكنك استخدام الطريقة model.tune() لأتمتة هذه العملية. على سبيل المثال:

مثال
from ultralytics import YOLO

# Initialize the YOLO model
model = YOLO("yolo26n.pt")

# Tune hyperparameters on COCO8 for 30 epochs
model.tune(data="coco8.yaml", epochs=30, iterations=300, optimizer="AdamW", plots=False, save=False, val=False)

لمزيد من التفاصيل، راجع صفحة تكوين Ultralytics YOLO.

ما هي فوائد استخدام الخوارزميات الجينية لضبط المعاملات الفائقة في YOLO26؟

توفر الخوارزميات الجينية في Ultralytics YOLO26 طريقة قوية لاستكشاف مساحة المعاملات الفائقة، مما يؤدي إلى أداء نموذج محسن للغاية. تشمل الفوائد الرئيسية ما يلي:

  • البحث الفعال: يجمع تقاطع BLX-α بين الجينات من الآباء ذوي الملاءمة الأعلى، بينما تقوم طفرة log-normal بـ "زعزعة" النتيجة لاكتشاف مرشحين جدد.
  • تجنب النهايات الصغرى المحلية: من خلال إدخال العشوائية، تساعد في تجنب النهايات الصغرى المحلية، مما يضمن تحسيناً عالمياً أفضل.
  • مقاييس الأداء: تتكيف بناءً على درجة ملاءمة خاصة بالمهمة (mAP50-95 للكشف).

لمعرفة كيف يمكن للخوارزميات الجينية تحسين المعاملات الفائقة، تحقق من دليل تطور المعاملات الفائقة.

كم تستغرق عملية ضبط المعاملات الفائقة لـ Ultralytics YOLO؟

يعتمد الوقت المطلوب لضبط المعاملات الفائقة باستخدام Ultralytics YOLO بشكل كبير على عدة عوامل مثل حجم مجموعة البيانات، وتعقيد بنية النموذج، وعدد التكرارات، والموارد الحسابية المتاحة. على سبيل المثال، قد يستغرق ضبط YOLO26n على مجموعة بيانات مثل COCO8 لمدة 30 حقبة من بضع ساعات إلى أيام، اعتماداً على الأجهزة.

لإدارة وقت الضبط بفعالية، حدد ميزانية ضبط واضحة مسبقاً (رابط القسم الداخلي). يساعد هذا في موازنة تخصيص الموارد وأهداف التحسين.

ما هي المقاييس التي يجب أن أستخدمها لتقييم أداء النموذج أثناء ضبط المعاملات الفائقة في YOLO؟

عند تقييم أداء النموذج أثناء ضبط المعاملات الفائقة في YOLO، يمكنك استخدام العديد من المقاييس الرئيسية:

  • AP50: متوسط الدقة (Average Precision) عند عتبة IoU قدرها 0.50.
  • F1-Score: المتوسط التوافقي للدقة (Precision) والاستدعاء (Recall).
  • الدقة والاستدعاء (Precision and Recall): مقاييس فردية تشير إلى دقة النموذج في تحديد الإيجابيات الحقيقية مقابل الإيجابيات الكاذبة والسلبيات الكاذبة.

تساعدك هذه المقاييس على فهم جوانب مختلفة من أداء نموذجك. راجع دليل مقاييس أداء Ultralytics YOLO للحصول على نظرة عامة شاملة.

هل يمكنني استخدام Ray Tune لتحسين المعاملات الفائقة المتقدمة مع YOLO26؟

نعم، يتكامل Ultralytics YOLO26 مع Ray Tune لتحسين المعاملات الفائقة المتقدم. يقدم Ray Tune خوارزميات بحث متطورة مثل التحسين البايزي (Bayesian Optimization) و Hyperband، جنباً إلى جنب مع إمكانات التنفيذ المتوازي لتسريع عملية الضبط.

لاستخدام Ray Tune مع YOLO26، ما عليك سوى تعيين المعامل use_ray=True في استدعاء الطريقة model.tune(). لمزيد من التفاصيل والأمثلة، تحقق من دليل تكامل Ray Tune.

تعليقات