تخطي إلى المحتوى

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

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

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

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

Ray Tune

نظرة عامة على Ray Tune

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

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

يسمح YOLO11 أيضًا بالتكامل الاختياري مع 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 YOLO11n model
model = YOLO("yolo11n.pt")

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

tune() معلمات الأسلوب

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

المعلمة النوع الوصف القيمة الافتراضية
data str ملف تكوين مجموعة البيانات (بتنسيق YAML) لتشغيل الموازن. يجب أن يحدد هذا الملف مسارات بيانات التدريب والتحقق، بالإضافة إلى إعدادات أخرى خاصة بمجموعة البيانات.
space dict, optional قاموس يحدد مساحة بحث المعلمات الفائقة لـ Ray Tune. يتوافق كل مفتاح مع اسم معلمة فائقة، وتحدد القيمة نطاق القيم المراد استكشافها أثناء الموازنة. إذا لم يتم توفيره، يستخدم YOLO11 مساحة بحث افتراضية مع معلمات فائقة مختلفة.
grace_period int, optional فترة السماح في الحقب لـ مجدول ASHA في Ray Tune. لن ينهي المجدول أي تجربة قبل هذا العدد من الحقب، مما يسمح للنموذج بالحصول على الحد الأدنى من التدريب قبل اتخاذ قرار بشأن الإيقاف المبكر. 10
gpu_per_trial int, optional عدد وحدات معالجة الرسوميات (GPUs) التي سيتم تخصيصها لكل تجربة أثناء الموازنة. يساعد هذا في إدارة استخدام وحدة معالجة الرسوميات، خاصة في البيئات متعددة وحدات معالجة الرسوميات. إذا لم يتم توفيره، فسيستخدم الموازن جميع وحدات معالجة الرسوميات المتاحة. None
iterations int, optional الحد الأقصى لعدد التجارب التي سيتم تشغيلها أثناء الموازنة. تساعد هذه المعلمة في التحكم في العدد الإجمالي لتوليفات المعلمات الفائقة التي تم اختبارها، مما يضمن عدم تشغيل عملية الموازنة إلى أجل غير مسمى. 10
**train_args dict, optional وسائط إضافية لتمريرها إلى train() الطريقة أثناء الضبط. يمكن أن تتضمن هذه الوسائط إعدادات مثل عدد حقب التدريب، حجم الدفعة، وتكوينات أخرى خاصة بالتدريب. {}

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

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

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

المعلمة النطاق الوصف
lr0 tune.uniform(1e-5, 1e-1) معدل التعلم الأولي الذي يتحكم في حجم الخطوة أثناء التحسين. تزيد القيم الأعلى من سرعة التدريب ولكنها قد تتسبب في عدم الاستقرار.
lrf tune.uniform(0.01, 1.0) عامل معدل التعلم النهائي الذي يحدد مقدار انخفاض معدل التعلم بحلول نهاية التدريب.
momentum tune.uniform(0.6, 0.98) عامل الزخم للمحسن الذي يساعد على تسريع التدريب والتغلب على الحدود الدنيا المحلية.
weight_decay tune.uniform(0.0, 0.001) معلمة تنظيم تمنع التجاوز عن طريق معاقبة قيم الوزن الكبيرة.
warmup_epochs tune.uniform(0.0, 5.0) عدد الحقب مع زيادة تدريجية في معدل التعلم لتحقيق الاستقرار في التدريب المبكر.
warmup_momentum tune.uniform(0.0, 0.95) قيمة الزخم الأولي التي تزداد تدريجيًا خلال فترة الإحماء.
box tune.uniform(0.02, 0.2) وزن لمكون خسارة المربع المحيط، موازنة دقة التوطين في النموذج.
cls tune.uniform(0.2, 4.0) وزن لمكون خسارة التصنيف، موازنة دقة التنبؤ بالفئة في النموذج.
hsv_h tune.uniform(0.0, 0.1) نطاق زيادة تدرج الألوان الذي يقدم تغيرًا في الألوان للمساعدة في تعميم النموذج.
hsv_s tune.uniform(0.0, 0.9) نطاق زيادة التشبع الذي يغير كثافة اللون لتحسين المتانة.
hsv_v tune.uniform(0.0, 0.9) نطاق زيادة القيمة (السطوع) الذي يساعد النموذج على الأداء في ظل ظروف الإضاءة المختلفة.
degrees tune.uniform(0.0, 45.0) نطاق زيادة التدوير بالدرجات، مما يحسن التعرف على الأجسام المدورة.
translate tune.uniform(0.0, 0.9) نطاق زيادة الترجمة الذي يزيح الصور أفقيًا وعموديًا.
scale tune.uniform(0.0, 0.9) نطاق زيادة القياس الذي يحاكي الكائنات على مسافات مختلفة.
shear tune.uniform(0.0, 10.0) نطاق زيادة القص بالدرجات، يحاكي تغييرات المنظور.
perspective tune.uniform(0.0, 0.001) نطاق زيادة المنظور الذي يحاكي تغييرات وجهة النظر ثلاثية الأبعاد.
flipud tune.uniform(0.0, 1.0) احتمالية زيادة انعكاس الصورة عموديًا، مما يزيد من تنوع مجموعة البيانات.
fliplr tune.uniform(0.0, 1.0) احتمالية زيادة الانعكاس الأفقي، مفيدة للكائنات المتماثلة.
mosaic tune.uniform(0.0, 1.0) احتمالية زيادة الفسيفساء التي تجمع أربع صور في عينة تدريب واحدة.
mixup tune.uniform(0.0, 1.0) احتمالية زيادة ميكس أب التي تمزج صورتين وتسمياتهما معًا.
cutmix tune.uniform(0.0, 1.0) احتمالية زيادة Cutmix التي تجمع بين مناطق الصورة مع الحفاظ على الميزات المحلية، وتحسين اكتشاف الكائنات المحجوبة جزئيًا.
copy_paste tune.uniform(0.0, 1.0) احتمالية زيادة النسخ واللصق التي تنقل الكائنات بين الصور لزيادة تنوع المثيلات.

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

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

الاستخدام

from ray import tune

from ultralytics import YOLO

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

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

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

استئناف جلسة ضبط المعلمات الفائقة متوقفة باستخدام 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("yolo11n.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 لتحقيق أقصى استفادة من تجارب ضبط المعلمات الفائقة.

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

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

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

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

    pip install -U ultralytics "ray[tune]"
    pip install wandb # optional for logging
    
  2. حمّل نموذج YOLO11 الخاص بك وابدأ الضبط:

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

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

ما هي المعلمات الفائقة الافتراضية لضبط YOLO11 باستخدام Ray Tune؟

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

المعلمة نطاق القيمة الوصف
lr0 tune.uniform(1e-5, 1e-1) معدل التعلم الأولي
lrf tune.uniform(0.01, 1.0) عامل معدل التعلم النهائي
momentum tune.uniform(0.6, 0.98) الزخم
weight_decay tune.uniform(0.0, 0.001) اضمحلال الوزن
warmup_epochs tune.uniform(0.0, 5.0) حقبة التسخين
box tune.uniform(0.02, 0.2) وزن خسارة الصندوق
cls tune.uniform(0.2, 4.0) وزن خسارة الفئة
hsv_h tune.uniform(0.0, 0.1) نطاق زيادة تدرج اللون
translate tune.uniform(0.0, 0.9) نطاق زيادة الإزاحة

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

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

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

  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("yolo11n.pt")
    
    # Tune hyperparameters
    result_grid = model.tune(data="coco8.yaml", use_ray=True)
    

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

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

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

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

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

كيف يمكنني تحديد مساحة بحث مخصصة لضبط المعلمات الفائقة لـ YOLO11؟

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

from ray import tune

from ultralytics import YOLO

model = YOLO("yolo11n.pt")
search_space = {"lr0": tune.uniform(1e-5, 1e-1), "momentum": tune.uniform(0.6, 0.98)}
result_grid = model.tune(data="coco8.yaml", space=search_space, use_ray=True)

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



📅 تم إنشاؤه منذ سنة واحدة ✏️ تم التحديث منذ شهر واحد

تعليقات