Ultralytics YOLO27:

ضبط المعلمات الفائقة بكفاءة باستخدام Ray Tune وYOLO26#

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

تسريع الضبط باستخدام Ultralytics YOLO26 وRay Tune#

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

Ray Tune#

Ray Tune hyperparameter optimization workflow

Ray Tune هي مكتبة لضبط المعلمات الفائقة، صُممت لتحقيق الكفاءة والمرونة. وهي تدعم استراتيجيات بحث متنوعة، والتنفيذ المتوازي، واستراتيجيات الإيقاف المبكر، كما تتكامل بسلاسة مع أطر عمل التعلم الآلي الشائعة، بما في ذلك Ultralytics YOLO26.

التكامل مع Weights & Biases#

يتيح YOLO26 أيضًا التكامل الاختياري مع Weights & Biases لمراقبة عملية الضبط.

التثبيت#

لتثبيت الحزم المطلوبة، شغّل:

التثبيت
# Install and update Ultralytics and Ray Tune packages
pip install -U ultralytics "ray[tune]" optuna

# Optionally install and enable W&B for per-trial logging
pip install wandb
yolo settings wandb=True

الاستخدام#

الاستخدام
from ultralytics import YOLO

# Load a YOLO26n model
model = YOLO("yolo26n.pt")

# Start tuning hyperparameters for YOLO26n training on the COCO8 dataset
result_grid = model.tune(data="coco8.yaml", use_ray=True)

معلمات طريقة tune()#

توفر طريقة tune() في YOLO26 واجهة سهلة الاستخدام لضبط المعلمات الفائقة باستخدام Ray Tune. وتقبل الطريقة عدة وسيطات تتيح لك تخصيص عملية الضبط. فيما يلي شرح مفصل لكل معلمة:

المعلمةالنوعالوصفالقيمة الافتراضية
datastrملف YAML لمجموعة البيانات التي سيُشغَّل عليها الضابط، مع تحديد مسارات بيانات التدريب والتحقق وإعدادات أخرى خاصة بمجموعة البيانات. أما التصنيف، فيتطلب بدلًا من ذلك دليل مجموعة بيانات أو اسم مجموعة بيانات مضمّنة، مثل imagenet10.
spacedict, optionalقاموس يحدد مساحة البحث عن المعلمات الفائقة في Ray Tune. يتوافق كل مفتاح مع اسم معلمة فائقة، بينما تحدد القيمة نطاق القيم التي سيُبحث فيها أثناء الضبط. وإذا لم تُقدَّم هذه المساحة، يستخدم YOLO26 مساحة بحث افتراضية تتضمن معلمات فائقة متنوعة.
grace_periodint, optionalفترة السماح بعدد العصور لمجدول ASHA في Ray Tune. لن ينهي المجدول أي تجربة قبل بلوغ هذا العدد من العصور، مما يتيح للنموذج خوض حد أدنى من التدريب قبل اتخاذ قرار بشأن الإيقاف المبكر.10
gpu_per_trialint, optionalعدد وحدات GPU التي يخصصها Ray لكل تجربة. عيّن هذه القيمة صراحةً لاستخدام التدريب عبر GPU؛ وعند حذفها، لن تتلقى التجارب أي موارد GPU.None
iterationsint, optionalالحد الأقصى لعدد التجارب التي ستُشغَّل أثناء الضبط. تساعد هذه المعلمة على التحكم في إجمالي عدد تركيبات المعلمات الفائقة التي يجري اختبارها، مما يضمن عدم استمرار عملية الضبط إلى أجل غير محدد.300
search_algstr or Searcher, optionalاستراتيجية البحث في Ray Tune المراد استخدامها. يمكنك تمرير كائن الباحث في Ray مباشرةً، أو استخدام سلسلة نصية مدعومة مثل optuna أو hyperopt أو bayesopt أو bohb أو hebo أو nevergrad أو zoopt أو ax أو random. تستخدم أدوات البحث المعتمدة على السلاسل النصية تلقائيًا مقياس المهمة الافتراضي وmode="max". ويستخدم الإعداد الافتراضي TPE متعدد المتغيرات من Optuna مع اقتراحات تراعي التنفيذ المتوازي."optuna"
**train_argsdict, optionalوسيطات إضافية تُمرَّر إلى طريقة train() أثناء الضبط. وقد تتضمن هذه الوسيطات إعدادات مثل عدد عصور التدريب، وحجم الدفعة، وتهيئات أخرى خاصة بالتدريب.{}

بتخصيص هذه المعلمات، يمكنك ضبط عملية تحسين المعلمات الفائقة بدقة لتناسب احتياجاتك الخاصة ومواردك الحاسوبية المتاحة.

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

يسرد الجدول التالي معلمات مساحة البحث الافتراضية لضبط المعلمات الفائقة في YOLO26 باستخدام Ray Tune. ويحدد tune.uniform() نطاقًا محددًا من القيم لكل معلمة.

المعلمةالنطاقالوصف
lr0tune.uniform(1e-5, 1e-2)معدل التعلم الأولي الذي يتحكم في حجم الخطوة أثناء التحسين. تسرّع القيم الأعلى التدريب، لكنها قد تسبب عدم الاستقرار.
lrftune.uniform(0.01, 1.0)عامل معدل التعلم النهائي الذي يحدد مقدار انخفاض معدل التعلم بحلول نهاية التدريب.
momentumtune.uniform(0.7, 0.98)عامل الزخم للمحسّن، ويساعد على تسريع التدريب وتجاوز نقاط الحد الأدنى المحلية.
weight_decaytune.uniform(0.0, 0.001)معلمة التنظيم التي تمنع فرط التكيّف من خلال معاقبة قيم الأوزان الكبيرة.
warmup_epochstune.uniform(0.0, 5.0)عدد العصور التي يزداد فيها معدل التعلم تدريجيًا لتحقيق استقرار التدريب المبكر.
warmup_momentumtune.uniform(0.0, 0.95)قيمة الزخم الأولية التي تزداد تدريجيًا خلال فترة الإحماء.
boxtune.uniform(1.0, 20.0)وزن مكوّن خسارة BBox، لتحقيق توازن في دقة تحديد الموضع داخل النموذج.
clstune.uniform(0.1, 4.0)وزن مكوّن خسارة التصنيف، لتحقيق توازن في دقة التنبؤ بالفئات داخل النموذج.
cls_pwtune.uniform(0.0, 1.0)قوة ترجيح الفئات، من التعطيل (0.0) إلى الترجيح الكامل العكسي للتكرار (1.0).
dfltune.uniform(0.4, 12.0)وزن مكوّن انحدار مسافة الصندوق، مع التركيز على تحديد موضع BBox بدقة.
hsv_htune.uniform(0.0, 0.1)نطاق زيادة تباين الصبغة، الذي يُدخل تنوعًا لونيًا لمساعدة النموذج على التعميم.
hsv_stune.uniform(0.0, 0.9)نطاق زيادة التشبع، الذي يغيّر شدة اللون لتحسين المتانة.
hsv_vtune.uniform(0.0, 0.9)نطاق زيادة القيمة (السطوع)، الذي يساعد النموذج على العمل في ظروف إضاءة متنوعة.
degreestune.uniform(0.0, 45.0)نطاق زيادة الدوران بالدرجات، مما يحسّن التعرف على الكائنات المدورة.
translatetune.uniform(0.0, 0.9)نطاق زيادة الإزاحة الذي ينقل الصور أفقيًا وعموديًا.
scaletune.uniform(0.0, 0.95)نطاق زيادة القياس الذي يحاكي ظهور الكائنات على مسافات مختلفة.
sheartune.uniform(0.0, 10.0)نطاق زيادة القص بالدرجات، لمحاكاة تغيرات المنظور.
perspectivetune.uniform(0.0, 0.001)نطاق زيادة المنظور الذي يحاكي تغيرات زاوية الرؤية ثلاثية الأبعاد.
flipudtune.uniform(0.0, 1.0)احتمال زيادة القلب الرأسي، مما يزيد تنوع مجموعة البيانات.
fliplrtune.uniform(0.0, 1.0)احتمال زيادة القلب الأفقي، وهو مفيد للكائنات المتماثلة.
bgrtune.uniform(0.0, 1.0)احتمال زيادة تبديل قنوات BGR، مما يساعد على تحقيق ثبات الألوان.
mosaictune.uniform(0.0, 1.0)احتمال زيادة الفسيفساء التي تدمج أربع صور في عينة تدريب واحدة.
mixuptune.uniform(0.0, 1.0)احتمال زيادة MixUp التي تمزج صورتين وتسميتيهما معًا.
cutmixtune.uniform(0.0, 1.0)احتمال زيادة CutMix التي تدمج مناطق من الصور مع الحفاظ على السمات المحلية.
copy_pastetune.uniform(0.0, 1.0)في وضع flip، يمثل هذا الكسر نسبة الكائنات المؤهلة التي تُنسخ إلى صورة، بينما يمثل في وضع mixup أيضًا احتمال تنفيذ العملية.
close_mosaictune.randint(0, 11)يعطّل الفسيفساء في آخر N من العصور لتحقيق استقرار التدريب قبل اكتماله.

مثال على فضاء بحث مخصص#

في هذا المثال، نوضح كيفية استخدام مساحة بحث مخصصة لضبط المعلمات الفائقة باستخدام Ray Tune وYOLO26. ومن خلال توفير مساحة بحث مخصصة، يمكنك تركيز عملية الضبط على معلمات فائقة محددة تهمك.

الاستخدام
from ray import tune

from ultralytics import YOLO

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

# Run Ray Tune on the model
result_grid = model.tune(
    data="coco8.yaml",
    space={"lr0": tune.uniform(1e-5, 1e-2)},
    epochs=50,
    use_ray=True,
)

في مقتطف التعليمات البرمجية أعلاه، ننشئ نموذج YOLO باستخدام الأوزان المدربة مسبقًا "yolo26n.pt". ثم نستدعي طريقة tune()، مع تحديد تهيئة مجموعة البيانات باستخدام "coco8.yaml". ونوفر مساحة بحث مخصصة لمعدل التعلم الأولي lr0 باستخدام قاموس يحتوي على المفتاح "lr0" والقيمة tune.uniform(1e-5, 1e-2). وأخيرًا، نمرر وسيطات تدريب إضافية، مثل عدد العصور، مباشرةً إلى طريقة الضبط باعتبارها epochs=50.

مثال على خوارزمية البحث#

يمكنك اختيار استراتيجية بحث في Ray Tune حسب الاسم. وبالنسبة إلى خوارزميات البحث المعتمدة على السلاسل النصية، سيستخدم Ultralytics تلقائيًا مقياس التحسين الافتراضي للمهمة الحالية وmode="max". وإذا لم يتم توفير search_alg، فسيستخدم Ultralytics TPE متعدد المتغيرات من Optuna مع اقتراحات تراعي التنفيذ المتوازي.

استخدام `search_alg` كسلسلة نصية مع `model.tune()`
from ultralytics import YOLO

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

result_grid = model.tune(
    data="coco8.yaml",
    epochs=50,
    search_alg="optuna",
    use_ray=True,
)

إذا احتجت إلى تخصيص أداة أخذ العينات الخاصة بالباحث أو تجاوز مقياسه ووضع التحسين، فمرّر كائن باحث مُنشأ في Ray Tune بدلًا من سلسلة نصية.

استخدام كائن `OptunaSearch` مع `model.tune()`
from ray.tune.search.optuna import OptunaSearch

from ultralytics import YOLO

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

# Define a searcher
searcher = OptunaSearch(
    metric="metrics/mAP50-95(B)",
    mode="max",
)

result_grid = model.tune(
    data="coco8.yaml",
    epochs=50,
    search_alg=searcher,
    use_ray=True,
)

استئناف جلسة ضبط المعلمات الفائقة المتوقفة باستخدام Ray Tune#

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

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

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

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

# Resume Ray Tune run with name 'tune_exp_2'
results = model.tune(use_ray=True, data="coco8.yaml", epochs=50, name="tune_exp_2", resume=True)

معالجة نتائج Ray Tune#

بعد تشغيل تجربة لضبط المعلمات الفائقة باستخدام Ray Tune، قد ترغب في إجراء تحليلات متنوعة للنتائج التي تم الحصول عليها. سيرشدك هذا الدليل خلال مسارات العمل الشائعة لمعالجة هذه النتائج وتحليلها.

تحميل نتائج تجربة الضبط من دليل#

يعيد model.tune(use_ray=True) كائناً من نوع Ray ResultGrid ويحفظ التجربة تحت runs/{task}/tune، أو تحت name الذي قمت تمريره. لتحميل تلك النتائج بعد خروج البرنامج النصي الأصلي، استأنف الجلسة، مما يؤدي إلى استعادة التجارب المحفوظة وإرجاع نفس الكائن ResultGrid:

from ultralytics import YOLO

model = YOLO("yolo26n.pt")
result_grid = model.tune(data="coco8.yaml", epochs=50, use_ray=True, resume=True)

التحليل الأساسي على مستوى التجربة#

احصل على نظرة عامة حول أداء التجارب. ويمكنك التحقق سريعًا من وجود أي أخطاء أثناء تشغيلها.

if result_grid.errors:
    print("One or more trials failed!")
else:
    print("No errors!")

التحليل الأساسي على مستوى التجربة الفرعية#

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

for i, result in enumerate(result_grid):
    print(f"Trial #{i}: Configuration: {result.config}, Last Reported Metrics: {result.metrics}")

رسم السجل الكامل للمقاييس المُبلَّغ عنها لتجربة فرعية#

يمكنك رسم سجل المقاييس المُبلَّغ عنها لكل تجربة فرعية لمعرفة كيفية تطور المقاييس بمرور الوقت.

import matplotlib.pyplot as plt

for i, result in enumerate(result_grid):
    plt.plot(
        result.metrics_dataframe["training_iteration"],
        result.metrics_dataframe["metrics/mAP50-95(B)"],
        label=f"Trial {i}",
    )

plt.xlabel("Training Iterations")
plt.ylabel("mAP50-95")
plt.legend()
plt.show()

الملخص#

في هذا الدليل، استعرضنا مسارات العمل الشائعة لتحليل نتائج التجارب التي شُغّلت باستخدام Ray Tune وUltralytics. وتشمل الخطوات الأساسية تحميل نتائج التجربة من دليل، وإجراء تحليل أساسي على مستوى التجربة وعلى مستوى التجربة الفرعية، ورسم المقاييس.

استكشف المزيد من خلال الاطلاع على صفحة توثيق Ray Tune بعنوان تحليل النتائج للاستفادة القصوى من تجارب ضبط المعلمات الفائقة.

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

  • لضبط المعلمات الفائقة لنموذج Ultralytics YOLO26 الخاص بك باستخدام Ray Tune، اتبع الخطوات التالية:

    1. ثبّت الحزم المطلوبة:

      pip install -U ultralytics "ray[tune]" optuna
      pip install wandb # optional for logging
      yolo settings wandb=True
    2. حمّل نموذج YOLO26 وابدأ الضبط:

      from ultralytics import YOLO
      
      # Load a YOLO26 model
      model = YOLO("yolo26n.pt")
      
      # Start tuning with the COCO8 dataset
      result_grid = model.tune(data="coco8.yaml", use_ray=True)

    يستفيد هذا من استراتيجيات البحث المتقدمة والتنفيذ المتوازي في Ray Tune لتحسين المعلمات الفائقة لنموذجك بكفاءة. لمزيد من المعلومات، راجع توثيق Ray Tune.

  • يستخدم Ultralytics YOLO26 المعلمات الفائقة الافتراضية التالية للضبط باستخدام Ray Tune:

    المعلمةنطاق القيمالوصف
    lr0tune.uniform(1e-5, 1e-2)معدل التعلم الأولي
    lrftune.uniform(0.01, 1.0)عامل معدل التعلم النهائي
    momentumtune.uniform(0.7, 0.98)الزخم
    weight_decaytune.uniform(0.0, 0.001)اضمحلال الأوزان
    warmup_epochstune.uniform(0.0, 5.0)عصور الإحماء
    boxtune.uniform(1.0, 20.0)وزن خسارة الصندوق
    clstune.uniform(0.1, 4.0)وزن خسارة الفئة
    cls_pwtune.uniform(0.0, 1.0)قوة ترجيح الفئات
    dfltune.uniform(0.4, 12.0)وزن خسارة مسافة الصندوق
    hsv_htune.uniform(0.0, 0.1)نطاق زيادة الصبغة
    translatetune.uniform(0.0, 0.9)نطاق زيادة الإزاحة

    يمكن تخصيص هذه المعلمات الفائقة لتناسب احتياجاتك الخاصة. للحصول على القائمة الكاملة ومزيد من التفاصيل، راجع دليل ضبط المعلمات الفائقة.

  • لدمج Weights & Biases (W&B) مع عملية ضبط Ultralytics YOLO26 الخاصة بك:

    1. ثبّت W&B:

      pip install wandb
      wandb login
      yolo settings wandb=True
    2. شغّل الضابط:

      from ultralytics import YOLO
      
      # Load YOLO model
      model = YOLO("yolo26n.pt")
      
      # Each Ray trial creates its own W&B run in this project
      result_grid = model.tune(data="coco8.yaml", project="YOLO-Tuning", use_ray=True)

    يتيح لك هذا الإعداد مراقبة عملية الضبط، وتتبع تهيئات المعلمات الفائقة، وتصور النتائج في W&B.

  • يوفر Ray Tune مزايا عديدة لتحسين المعلمات الفائقة:

    • استراتيجيات البحث المتقدمة: يستخدم خوارزميات مثل التحسين البايزي وHyperOpt للبحث الفعال عن المعلمات.
    • التنفيذ المتوازي: يدعم التنفيذ المتوازي لعدة تجارب، مما يسرّع عملية الضبط بدرجة كبيرة.
    • الإيقاف المبكر: يستخدم استراتيجيات مثل ASHA لإنهاء التجارب ضعيفة الأداء مبكرًا، مما يوفر الموارد الحاسوبية.

    يتكامل Ray Tune بسلاسة مع Ultralytics YOLO26، موفرًا واجهة سهلة الاستخدام لضبط المعلمات الفائقة بفعالية. للبدء، راجع دليل ضبط المعلمات الفائقة.

  • لتعريف مساحة بحث مخصصة لضبط المعلمات الفائقة في YOLO26 باستخدام Ray Tune:

    from ray import tune
    
    from ultralytics import YOLO
    
    model = YOLO("yolo26n.pt")
    search_space = {"lr0": tune.uniform(1e-5, 1e-2), "momentum": tune.uniform(0.7, 0.98)}
    result_grid = model.tune(data="coco8.yaml", space=search_space, use_ray=True)

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

التعليقات