ضبط المعاملات الفائقة بكفاءة باستخدام Ray Tune و YOLO26#
يعد ضبط المعاملات الفائقة أمراً حيوياً لتحقيق أقصى أداء للنموذج من خلال اكتشاف المجموعة المثالية من المعاملات الفائقة. يتضمن ذلك إجراء تجارب باستخدام معاملات فائقة مختلفة وتقييم أداء كل تجربة.
تسريع الضبط باستخدام Ultralytics YOLO26 و Ray Tune#
يشتمل Ultralytics YOLO26 على Ray Tune لضبط المعلمات الفائقة، مما يبسط عملية تحسين المعلمات الفائقة لنموذج YOLO26. باستخدام Ray Tune، يمكنك الاستفادة من استراتيجيات البحث المتقدمة، والتوازي، والإيقاف المبكر لتسريع عملية الضبط.
Ray Tune#
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 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. وهي تقبل عدة وسائط تتيح لك تخصيص عملية الضبط. فيما يلي شرح مفصل لكل معلمة:
| المعامل | النوع | الوصف | القيمة الافتراضية |
|---|---|---|---|
data | str | ملف YAML لمجموعة البيانات لتشغيل أداة الضبط عليه، مع تحديد مسارات التدريب وبيانات التحقق وإعدادات أخرى خاصة بمجموعة البيانات. وبدلاً من ذلك، يأخذ التصنيف دليل مجموعة البيانات أو اسم مجموعة بيانات مدمج (مثل imagenet10). | |
space | dict, optional | قاموس يحدد مساحة بحث المعاملات الفائقة لـ Ray Tune. يتوافق كل مفتاح مع اسم معامل فائق، وتحدد القيمة نطاق القيم المراد استكشافها أثناء الضبط. إذا لم يتم توفيرها، يستخدم YOLO26 مساحة بحث افتراضية تحتوي على معاملات فائقة متنوعة. | |
grace_period | int, optional | فترة السماح بـ الحقب لـ مجدول ASHA في Ray Tune. لن يقوم المجدول بإنهاء أي تجربة قبل هذا العدد من الحقب، مما يسمح للنموذج بالحصول على الحد الأدنى من التدريب قبل اتخاذ قرار بشأن الإيقاف المبكر. | 10 |
gpu_per_trial | int, optional | عدد وحدات معالجة الرسوميات (GPUs) التي يخصصها Ray لكل تجربة. قم بتعيين هذا صراحةً لاستخدام التدريب باستخدام وحدات معالجة الرسوميات (GPU)؛ وعند استبعاده، لا تتلقى التجارب أي موارد لوحدات معالجة الرسوميات. | None |
iterations | int, optional | الحد الأقصى لعدد التجارب التي سيتم تشغيلها أثناء الضبط. يساعد هذا المعامل في التحكم في إجمالي عدد مجموعات المعاملات الفائقة التي يتم اختبارها، مما يضمن عدم استمرار عملية الضبط إلى أجل غير مسمى. | 10 |
search_alg | str or Searcher, optional | استراتيجية بحث Ray Tune المراد استخدامها. يمكنك تمرير كائن أداة بحث Ray مباشرة، أو استخدام سلسلة مدعومة مثل optuna أو hyperopt أو bayesopt أو bohb أو hebo أو nevergrad أو zoopt أو ax أو random. تستخدم أدوات البحث المستندة إلى السلسلة مقياس المهمة الافتراضي تلقائياً وmode="max". إذا لم يتم توفيرها، تعود Ray Tune إلى استراتيجية البحث العشوائي الافتراضية الخاصة بها، BasicVariantGenerator. | None |
**train_args | dict, optional | وسائط إضافية لتمريرها إلى طريقة train() أثناء الضبط. يمكن أن تتضمن هذه الوسائط إعدادات مثل عدد حقب التدريب، وحجم الدفعة، وتكوينات أخرى خاصة بالتدريب. | {} |
من خلال تخصيص هذه المعاملات، يمكنك ضبط عملية تحسين المعاملات الفائقة لتناسب احتياجاتك الخاصة والموارد الحسابية المتاحة.
وصف مساحة البحث الافتراضية#
يسرد الجدول التالي معلمات مساحة البحث الافتراضية لضبط المعلمات الفائقة في YOLO26 باستخدام Ray Tune. لكل معلمة نطاق قيم محدد مُعرّف بواسطة tune.uniform().
| المعامل | النطاق | الوصف |
|---|---|---|
lr0 | tune.uniform(1e-5, 1e-2) | معدل التعلم الأولي الذي يتحكم في حجم الخطوة أثناء التحسين. القيم الأعلى تسرع التدريب ولكنها قد تسبب عدم استقرار. |
lrf | tune.uniform(0.01, 1.0) | عامل معدل التعلم النهائي الذي يحدد مقدار انخفاض معدل التعلم بحلول نهاية التدريب. |
momentum | tune.uniform(0.7, 0.98) | عامل الزخم (Momentum) للمحسّن الذي يساعد في تسريع التدريب وتجاوز النقاط الصغرى المحلية. |
weight_decay | tune.uniform(0.0, 0.001) | معامل التنظيم الذي يمنع فرط التخصيص (overfitting) عن طريق معاقبة قيم الأوزان الكبيرة. |
warmup_epochs | tune.uniform(0.0, 5.0) | عدد الـ epochs مع معدل تعلم متزايد تدريجياً لتحقيق استقرار التدريب المبكر. |
warmup_momentum | tune.uniform(0.0, 0.95) | قيمة الزخم الأولية التي تزداد تدريجياً خلال فترة الإحماء (warmup). |
box | tune.uniform(1.0, 20.0) | وزن مكون خسارة مربع الإحاطة (bounding box loss)، مما يوازن دقة التحديد في النموذج. |
cls | tune.uniform(0.1, 4.0) | وزن مكون خسارة التصنيف، مما يوازن دقة التنبؤ بالفئة في النموذج. |
cls_pw | tune.uniform(0.0, 1.0) | قوة وزن الفئات، من المعطل (0.0) إلى الوزن العكسي الكامل للتردد (1.0). |
dfl | tune.uniform(0.4, 12.0) | الوزن الخاص بمكون الانحدار لمسافة الصندوق، مع التركيز على تحديد موضع صندوق الإحاطة بدقة. |
hsv_h | tune.uniform(0.0, 0.1) | نطاق زيادة التباين في تدرج اللون (Hue) الذي يقدم تنوعاً في الألوان لمساعدة النموذج على التعميم. |
hsv_s | tune.uniform(0.0, 0.9) | نطاق زيادة التباين في تشبع اللون (Saturation) الذي يغير كثافة الألوان لتحسين القوة. |
hsv_v | tune.uniform(0.0, 0.9) | نطاق زيادة التباين في القيمة (السطوع) الذي يساعد النموذج على الأداء تحت ظروف إضاءة مختلفة. |
degrees | tune.uniform(0.0, 45.0) | نطاق زيادة التباين في الدوران بالدرجات، مما يحسن التعرف على الكائنات المستدارة. |
translate | tune.uniform(0.0, 0.9) | نطاق زيادة التباين في الإزاحة (Translation) الذي ينقل الصور أفقياً ورأسياً. |
scale | tune.uniform(0.0, 0.95) | نطاق زيادة التباين في التحجيم (Scaling) الذي يحاكي الكائنات على مسافات مختلفة. |
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) | احتمالية زيادة التباين في القلب الأفقي، مفيدة للكائنات المتناظرة. |
bgr | tune.uniform(0.0, 1.0) | احتمالية زيادة التباين في تبديل قنوات BGR، مما يساعد في ثبات الألوان. |
mosaic | tune.uniform(0.0, 1.0) | احتمالية زيادة التباين في الفسيفساء التي تجمع بين أربع صور في عينة تدريب واحدة. |
mixup | tune.uniform(0.0, 1.0) | احتمالية زيادة التباين في Mixup التي تدمج صورتين وملصقاتهما معاً. |
cutmix | tune.uniform(0.0, 1.0) | احتمالية زيادة التباين في Cutmix التي تجمع بين مناطق الصور مع الحفاظ على السمات المحلية. |
copy_paste | tune.uniform(0.0, 1.0) | في وضع flip، تُمثّل هذه النسبة الكائنات المؤهلة المنسوخة إلى الصورة، وفي وضع mixup تُمثّل أيضاً احتمالية تشغيلها. |
close_mosaic | tune.randint(0, 11) | يعطل الفسيفساء في الـ N الأخيرة من الـ epochs لتحقيق استقرار التدريب قبل الاكتمال. |
مثال على مساحة بحث مخصصة#
في هذا المثال، نوضح كيفية استخدام مساحة بحث مخصصة لضبط المعاملات الفائقة باستخدام 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.
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) الخاصة بـ searcher أو تجاوز المقياس ووضع التحسين الخاص بها، فقم بتمرير كائن searcher الخاص بـ Ray 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.
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، قد ترغب في إجراء تحليلات متنوعة على النتائج التي تم الحصول عليها. سيرشدك هذا الدليل خلال سير العمل الشائع لمعالجة وتحليل هذه النتائج.
تحميل نتائج تجربة الضبط من دليل#
بعد تشغيل تجربة الضبط باستخدام 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 لتحقيق أقصى استفادة من تجارب ضبط المعلمات الفائقة.
الأسئلة الشائعة#
لضبط المعلمات الفائقة لنموذج Ultralytics YOLO26 الخاص بك باستخدام Ray Tune، اتبع الخطوات التالية:
-
تثبيت الحزم المطلوبة:
pip install -U ultralytics "ray[tune]" pip install wandb # optional for logging yolo settings wandb=True -
تحميل نموذج 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)الزخم (Momentum) weight_decaytune.uniform(0.0, 0.001)تضاؤل الوزن (Weight decay) warmup_epochstune.uniform(0.0, 5.0)فترات الإحماء (Warmup epochs) boxtune.uniform(1.0, 20.0)وزن فقدان الصندوق (Box loss weight) clstune.uniform(0.1, 4.0)وزن فقدان الفئة (Class loss weight) cls_pwtune.uniform(0.0, 1.0)قوة وزن الفئات dfltune.uniform(0.4, 12.0)وزن خسارة مسافة الصندوق hsv_htune.uniform(0.0, 0.1)نطاق تعزيز تدرج اللون (Hue augmentation range) translatetune.uniform(0.0, 0.9)نطاق تعزيز الترجمة (Translation augmentation range) يمكن تخصيص هذه المعلمات الفائقة لتناسب احتياجاتك الخاصة. للحصول على قائمة كاملة والمزيد من التفاصيل، راجع دليل ضبط المعلمات الفائقة.
لدمج Weights & Biases (W&B) مع عملية ضبط Ultralytics YOLO26 الخاصة بك:
-
تثبيت W&B:
pip install wandb wandb login yolo settings wandb=True -
قم بتشغيل أداة الضبط:
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)يقوم هذا بتخصيص نطاق المعلمات الفائقة مثل معدل التعلم الأولي والزخم ليتم استكشافها أثناء عملية الضبط. للتكوينات المتقدمة، راجع قسم مثال على مساحة البحث المخصصة.