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

# ⁨تحميل نموذج YOLO26n⁩
model = YOLO("yolo26n.pt")

# ⁨بدء ضبط المعلمات الفائقة لتدريب YOLO26n على مجموعة بيانات COCO8⁩
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()، باستثناء close_mosaic، الذي يستخدم tune.randint().

المعلمةالنطاقالوصف
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)وزن مكوّن خسارة الصندوق المحيط، لموازنة دقة تحديد المواقع في النموذج.
clstune.uniform(0.1, 4.0)وزن مكوّن خسارة التصنيف، لموازنة دقة توقع الفئات في النموذج.
cls_pwtune.uniform(0.0, 1.0)قوة ترجيح الفئات، من التعطيل (0.0) إلى الترجيح الكامل العكسي للتكرار (1.0).
dfltune.uniform(0.4, 12.0)وزن مكوّن انحدار مسافة الصندوق، لإعطاء أولوية للدقة في تحديد موضع الصندوق المحيط.
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

# ⁨تعريف نموذج YOLO⁩
model = YOLO("yolo26n.pt")

# ⁨تشغيل Ray Tune على النموذج⁩
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

# ⁨تعريف نموذج YOLO⁩
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

# ⁨تعريف نموذج YOLO⁩
model = YOLO("yolo26n.pt")

# ⁨تعريف باحث⁩
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

# ⁨تعريف نموذج YOLO⁩
model = YOLO("yolo26n.pt")

# ⁨استئناف التشغيل السابق⁩
results = model.tune(use_ray=True, data="coco8.yaml", epochs=50, resume=True)

# ⁨استئناف تشغيل Ray Tune بالاسم '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
      
      # ⁨تحميل نموذج YOLO26⁩
      model = YOLO("yolo26n.pt")
      
      # ⁨بدء الضبط باستخدام مجموعة بيانات COCO8⁩
      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
      
      # ⁨تحميل نموذج YOLO⁩
      model = YOLO("yolo26n.pt")
      
      # ⁨تنشئ كل تجربة في Ray تشغيلًا خاصًا بها في W&B ضمن هذا المشروع⁩
      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)

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

التعليقات