ضبط فعال للمعاملات الفائقة باستخدام 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]"

# Optionally install W&B for logging
pip install wandb

الاستخدام

الاستخدام
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) لتشغيل أداة الضبط عليه. يجب أن يحدد هذا الملف مسارات بيانات التدريب وبيانات التحقق، بالإضافة إلى إعدادات أخرى خاصة بمجموعة البيانات.
spacedict, optionalقاموس يحدد مساحة بحث المعاملات الفائقة لـ Ray Tune. يتوافق كل مفتاح مع اسم معامل فائق، وتحدد القيمة نطاق القيم التي سيتم استكشافها أثناء الضبط. إذا لم يتم توفيره، يستخدم YOLO26 مساحة بحث افتراضية تحتوي على معاملات فائقة متنوعة.
grace_periodint, optionalفترة السماح بالحقبات (epochs) لـ مجدول ASHA في Ray Tune. لن يقوم المجدول بإنهاء أي تجربة قبل هذا العدد من الحقبات، مما يسمح للنموذج بالحصول على حد أدنى من التدريب قبل اتخاذ قرار بشأن الإيقاف المبكر.10
gpu_per_trialint, optionalعدد وحدات معالجة الرسومات (GPUs) المخصصة لكل تجربة أثناء الضبط. يساعد هذا في إدارة استخدام GPU، خاصة في البيئات متعددة وحدات معالجة الرسومات. إذا لم يتم توفيره، ستستخدم أداة الضبط جميع وحدات GPU المتاحة.None
iterationsint, optionalالحد الأقصى لعدد التجارب التي يتم تشغيلها أثناء الضبط. يساعد هذا المعامل في التحكم في إجمالي عدد مجموعات المعاملات الفائقة المختبرة، مما يضمن عدم استمرار عملية الضبط إلى أجل غير مسمى.10
search_algstr or Searcher, optionalاستراتيجية بحث Ray Tune المستخدمة. يمكنك تمرير كائن بحث Ray مباشرة، أو استخدام سلسلة نصية مدعومة مثل optuna أو hyperopt أو bayesopt أو bohb أو hebo أو nevergrad أو zoopt أو ax أو random. تستخدم أدوات البحث المستندة إلى السلاسل النصية مقياس المهمة الافتراضي وmode="max" تلقائياً. إذا لم يتم توفيرها، تعود Ray Tune إلى استراتيجية البحث العشوائي الافتراضية الخاصة بها، BasicVariantGenerator.None
**train_argsdict, optionalوسائط إضافية لتمريرها إلى طريقة train() أثناء الضبط. يمكن أن تشمل هذه الوسائط إعدادات مثل عدد حقبات التدريب، وحجم الدفعة (batch size)، وإعدادات أخرى خاصة بالتدريب.{}

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

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

يسرد الجدول التالي معاملات مساحة البحث الافتراضية لضبط المعاملات الفائقة في 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)معامل التنظيم الذي يمنع الإفراط في التخصيص (overfitting) عن طريق معاقبة قيم الأوزان الكبيرة.
warmup_epochstune.uniform(0.0, 5.0)عدد الحقبات مع زيادة تدريجية في معدل التعلم لتحقيق الاستقرار في بداية التدريب.
warmup_momentumtune.uniform(0.0, 0.95)قيمة الزخم الأولية التي تزداد تدريجياً خلال فترة الإحماء (warmup).
boxtune.uniform(1.0, 20.0)وزن مكون خسارة مربع الإحاطة (bounding box loss)، لموازنة دقة التوطين في النموذج.
clstune.uniform(0.1, 4.0)وزن مكون خسارة التصنيف، لموازنة دقة تنبؤ الفئة في النموذج.
dfltune.uniform(0.4, 12.0)وزن مكون خسارة التوزيع البؤري (Distribution Focal Loss)، مع التركيز على توطين دقيق لمربع الإحاطة.
hsv_htune.uniform(0.0, 0.1)نطاق زيادة تدرج اللون (hue) الذي يقدم تبايناً في الألوان لمساعدة النموذج على التعميم.
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)نطاق زيادة القياس (scaling) الذي يحاكي الكائنات على مسافات مختلفة.
sheartune.uniform(0.0, 10.0)نطاق زيادة القص (shear) بالدرجات، مما يحاكي تحولات المنظور.
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)احتمالية زيادة الفسيفساء (Mosaic) التي تجمع أربع صور في عينة تدريب واحدة.
mixuptune.uniform(0.0, 1.0)احتمالية زيادة المزج (Mixup) التي تمزج صورتين وتسمياتهما معاً.
cutmixtune.uniform(0.0, 1.0)احتمالية زيادة القص واللصق (Cutmix) التي تجمع مناطق الصورة مع الحفاظ على الميزات المحلية.
copy_pastetune.uniform(0.0, 1.0)احتمالية زيادة النسخ واللصق (Copy-paste) التي تنقل الكائنات بين الصور لزيادة تنوع الحالات.
close_mosaictune.randint(0.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، تستخدم Ray Tune استراتيجية البحث العشوائي الافتراضية الخاصة بها، BasicVariantGenerator.

استخدام `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,
)

إذا كنت بحاجة إلى تخصيص أداة أخذ العينات (sampler) الخاصة بالباحث أو تجاوز مقياسه ووضع التحسين، فقم بتمرير كائن بحث 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، قد ترغب في إجراء تحليلات متنوعة على النتائج التي تم الحصول عليها. سيرشدك هذا الدليل عبر سير العمل الشائع لمعالجة هذه النتائج وتحليلها.

تحميل نتائج تجربة Tune من دليل

بعد تشغيل تجربة الضبط باستخدام tuner.fit()، يمكنك تحميل النتائج من دليل. هذا مفيد، خاصة إذا كنت تقوم بالتحليل بعد خروج برنامج التدريب الأولي.

experiment_path = f"{storage_path}/{exp_name}"
print(f"Loading results from {experiment_path}...")

restored_tuner = tune.Tuner.restore(experiment_path, trainable=train_mnist)
result_grid = restored_tuner.get_results()

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

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

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["mean_accuracy"],
        label=f"Trial {i}",
    )

plt.xlabel("Training Iterations")
plt.ylabel("Mean Accuracy")
plt.legend()
plt.show()

ملخص

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

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

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

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

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

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

    pip install -U ultralytics "ray[tune]"
    pip install wandb # optional for logging
  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.

ما هي المعاملات الفائقة الافتراضية لضبط YOLO26 باستخدام 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)وزن خسارة الفئة
dfltune.uniform(0.4, 12.0)وزن خسارة DFL
hsv_htune.uniform(0.0, 0.1)نطاق زيادة تدرج اللون
translatetune.uniform(0.0, 0.9)نطاق زيادة الترجمة

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

كيف يمكنني دمج Weights & Biases مع عملية ضبط نموذج YOLO26 الخاص بي؟

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

  1. تثبيت W&B:

    pip install wandb
  2. تعديل نص الضبط البرمجي الخاص بك:

    import wandb
    
    from ultralytics import YOLO
    
    wandb.init(project="YOLO-Tuning", entity="your-entity")
    
    # Load YOLO model
    model = YOLO("yolo26n.pt")
    
    # Tune hyperparameters
    result_grid = model.tune(data="coco8.yaml", use_ray=True)

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

لماذا يجب علي استخدام Ray Tune لتحسين المعلمات الفائقة مع YOLO26؟

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

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

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

كيف يمكنني تحديد مساحة بحث مخصصة لضبط معلمات 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)

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

التعليقات