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

الردود التلقائية

يدعم إطار عمل Ultralytics ردود الاتصال، والتي تعمل كنقاط دخول في المراحل الاستراتيجية أثناء train, val, export، و predict الأوضاع. تقبل كل معاودة اتصال Trainer, Validator، أو Predictor كائن، اعتمادًا على نوع العملية. يتم تفصيل جميع خصائص هذه الكائنات في قسم المرجع. من الوثائق.



شاهد: كيفية استخدام ردود نداء Ultralytics | ردود نداء التوقع والتدريب والتحقق والتصدير | Ultralytics YOLO 🚀

أمثلة

إرجاع معلومات إضافية مع التنبؤ

في هذا المثال، نوضح كيفية إرجاع الإطار الأصلي مع كل كائن نتيجة:

from ultralytics import YOLO


def on_predict_batch_end(predictor):
    """Combine prediction results with corresponding frames."""
    _, image, _, _ = predictor.batch

    # Ensure that image is a list
    image = image if isinstance(image, list) else [image]

    # Combine the prediction results with the corresponding frames
    predictor.results = zip(predictor.results, image)


# Create a YOLO model instance
model = YOLO("yolo26n.pt")

# Add the custom callback to the model
model.add_callback("on_predict_batch_end", on_predict_batch_end)

# Iterate through the results and frames
for result, frame in model.predict():  # or model.track()
    pass

الوصول إلى مقاييس النموذج باستخدام on_model_save استدعاء

يوضح هذا المثال كيفية استرداد تفاصيل التدريب، مثل درجة أفضل ملاءمة (best_fitness)، والخسارة الكلية (total_loss)، والمقاييس الأخرى بعد حفظ نقطة تفتيش باستخدام on_model_save استدعاء.

from ultralytics import YOLO

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


def print_checkpoint_metrics(trainer):
    """Print trainer metrics and loss details after each checkpoint is saved."""
    print(
        f"Model details\n"
        f"Best fitness: {trainer.best_fitness}, "
        f"Loss names: {trainer.loss_names}, "  # List of loss names
        f"Metrics: {trainer.metrics}, "
        f"Total loss: {trainer.tloss}"  # Total loss value
    )


if __name__ == "__main__":
    # Add on_model_save callback.
    model.add_callback("on_model_save", print_checkpoint_metrics)

    # Run model training on custom dataset.
    results = model.train(data="coco8.yaml", epochs=3)

جميع عمليات الاسترجاع

فيما يلي جميع عمليات الاسترجاع المدعومة. لمزيد من التفاصيل، راجع شفرة المصدر لعمليات الاسترجاع.

عمليات استرجاع المدرب

استرجاع (Callback)الوصف
on_pretrain_routine_startيتم تشغيله في بداية روتين ما قبل التدريب، قبل تحميل البيانات وإعداد النموذج.
on_pretrain_routine_endيتم تشغيله في نهاية روتين ما قبل التدريب، بعد اكتمال تحميل البيانات وإعداد النموذج.
on_train_startيتم تشغيله عند بدء التدريب، قبل بدء الدورة الأولى.
on_train_epoch_startيتم تشغيلها في بداية كل حقبة تدريب، قبل بدء تكرار الدفعة.
on_train_batch_startيتم تشغيله في بداية كل دفعة تدريبية، قبل تمرير الكرة إلى الأمام.
optimizer_stepيتم تشغيلها خلال مرحلة المحسّن. مخصصة للتكاملات المخصصة؛ ولا يتم استدعاؤها من قِبل حلقة التدريب الافتراضية.
on_before_zero_gradيتم تشغيلها قبل إعادة تعيين التدرجات إلى الصفر. مخصصة للتكاملات المخصصة؛ ولا يتم استدعاؤها من قِبل حلقة التدريب الافتراضية.
on_train_batch_endيتم تشغيلها في نهاية كل دفعة تدريب، بعد المرور العكسي. وقد يتم تأجيل خطوة المُحسِّن بسبب تراكم التدرج.
on_train_epoch_endيتم تشغيله في نهاية كل حقبة تدريب، بعد معالجة جميع الدُفعات ولكن قبل عملية التحقق من الصحة. وقد لا تكون مقاييس التحقق من الصحة ومؤشر الملاءمة متاحة بعد.
on_model_saveيتم تشغيله عند حفظ نقطة تفتيش النموذج، بعد عملية التحقق من الصحة.
on_fit_epoch_endيتم تشغيلها في نهاية كل حقبة تدريب (التدريب + التقييم)، بعد إجراء عملية التقييم وحفظ أي نقطة تحقق. تتوفر مقاييس التقييم، كما تتوفر قيمة الملاءمة عند استدعاء التدريب لكل حقبة. يتم استدعاء هذه الدالة المرتدة أيضًا أثناء التقييم النهائي لأفضل نموذج، حيث لا يتم حفظ أي نقطة تحقق وقد لا تتوفر قيمة الملاءمة.
on_train_endيتم تشغيله عند انتهاء عملية التدريب، بعد التقييم النهائي لأفضل نموذج.
on_params_updateيتم تشغيله عند تحديث معلمات النموذج. مخصص للتكاملات المخصصة؛ ولا يتم استدعاؤه من قِبل حلقة التدريب الافتراضية.
teardownيتم تفعيله عند تنظيف عملية التدريب.

عمليات استرجاع المدقق

استرجاع (Callback)الوصف
on_val_startيتم تفعيله عند بدء التحقق.
on_val_batch_startيتم تفعيله في بداية كل دفعة تحقق.
on_val_batch_endيتم تشغيله في نهاية كل دفعة تحقق من الصحة.
on_val_endيتم تفعيله عند انتهاء التحقق.

عمليات استرجاع المتنبئ

استرجاع (Callback)الوصف
on_predict_startيتم تفعيله عند بدء عملية التنبؤ.
on_predict_batch_startيتم تفعيله في بداية كل دفعة تنبؤ.
on_predict_postprocess_endيتم تشغيله في نهاية كل معالجة لاحقة للتنبؤ.
on_predict_batch_endيتم تشغيله في نهاية كل دفعة تنبؤ.
on_predict_endيتم تفعيله عند انتهاء عملية التنبؤ.

عمليات استرجاع المصدر

استرجاع (Callback)الوصف
on_export_startيتم تفعيله عند بدء عملية التصدير.
on_export_endيتم تفعيله عند انتهاء عملية التصدير.

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

ما هي عمليات الاسترجاع Ultralytics وكيف يمكنني استخدامها؟

تعد ردود الاتصال في Ultralytics نقاط دخول متخصصة يتم تشغيلها خلال المراحل الرئيسية لعمليات النموذج مثل التدريب والتحقق والتصدير والتنبؤ. تتيح ردود الاتصال هذه وظائف مخصصة في نقاط محددة في العملية، مما يسمح بإجراء تحسينات وتعديلات على سير العمل. يقبل كل رد اتصال Trainer, Validator، أو Predictor ، اعتمادًا على نوع العملية. للحصول على خصائص تفصيلية لهذه الكائنات، ارجع إلى قسم المرجع..

لاستخدام رد نداء، حدد وظيفة وأضفها إلى النموذج باستخدام model.add_callback() method. إليك مثال على إرجاع معلومات إضافية أثناء التوقع:

from ultralytics import YOLO


def on_predict_batch_end(predictor):
    """Handle prediction batch end by combining results with corresponding frames; modifies predictor results."""
    _, image, _, _ = predictor.batch
    image = image if isinstance(image, list) else [image]
    predictor.results = zip(predictor.results, image)


model = YOLO("yolo26n.pt")
model.add_callback("on_predict_batch_end", on_predict_batch_end)
for result, frame in model.predict():
    pass

كيف يمكنني تخصيص روتين التدريب Ultralytics باستخدام ردود النداء؟

خصص روتين تدريب Ultralytics الخاص بك عن طريق حقن المنطق في مراحل معينة من عملية التدريب. يوفر Ultralytics YOLO مجموعة متنوعة من ردود الاتصال للتدريب، مثل on_train_start, on_train_end، و on_train_batch_end، والتي تسمح لك بإضافة مقاييس مخصصة أو معالجة أو تسجيل.

إليك كيفية تجميد إحصائيات BatchNorm عند تجميد الطبقات باستخدام ردود النداء:

from ultralytics import YOLO


# Add a callback to put the frozen layers in eval mode to prevent BN values from changing
def put_in_eval_mode(trainer):
    n_layers = trainer.args.freeze
    if not isinstance(n_layers, int):
        return

    for i, (name, module) in enumerate(trainer.model.named_modules()):
        if name.endswith("bn") and int(name.split(".")[1]) < n_layers:
            module.eval()
            module.track_running_stats = False


model = YOLO("yolo26n.pt")
model.add_callback("on_train_epoch_start", put_in_eval_mode)
model.train(data="coco.yaml", epochs=10)

لمزيد من التفاصيل حول الاستخدام الفعال لاستدعاءات التدريب، راجع دليل التدريب.

لماذا يجب علي استخدام عمليات الاسترجاع أثناء التحقق من الصحة في Ultralytics YOLO؟

يعزز استخدام ردود الاتصال (callbacks) أثناء التحقق في Ultralytics YOLO تقييم النموذج من خلال تمكين المعالجة المخصصة أو التسجيل أو حساب المقاييس. ردود الاتصال مثل on_val_start, on_val_batch_end، و on_val_end توفر نقاط دخول لإدخال منطق مخصص، مما يضمن عمليات تحقق مفصلة وشاملة.

على سبيل المثال، لرسم جميع دفعات التحقق بدلاً من أول ثلاث دفعات فقط:

import inspect

from ultralytics import YOLO


def plot_samples(validator):
    frame = inspect.currentframe().f_back.f_back
    v = frame.f_locals
    validator.plot_val_samples(v["batch"], v["batch_i"])
    validator.plot_predictions(v["batch"], v["preds"], v["batch_i"])


model = YOLO("yolo26n.pt")
model.add_callback("on_val_batch_end", plot_samples)
model.val(data="coco.yaml")

للحصول على مزيد من المعلومات حول دمج ردود الاتصال في عملية التحقق الخاصة بك، راجع دليل التحقق.

كيف يمكنني إرفاق استرجاع مخصص لوضع التنبؤ في Ultralytics YOLO؟

لإرفاق رد نداء مخصص لوضع التنبؤ في Ultralytics YOLO، حدد دالة رد نداء وقم بتسجيلها في عملية التنبؤ. تتضمن ردود النداء الشائعة للتنبؤ on_predict_start, on_predict_batch_end، و on_predict_end. تتيح هذه التعديل على مخرجات التنبؤ ودمج وظائف إضافية، مثل تسجيل البيانات أو تحويل النتائج.

فيما يلي مثال حيث يحفظ رد نداء مخصص التنبؤات بناءً على ما إذا كان كائن من فئة معينة موجودًا:

from ultralytics import YOLO

model = YOLO("yolo26n.pt")

class_id = 2


def save_on_object(predictor):
    r = predictor.results[0]
    if class_id in r.boxes.cls:
        predictor.args.save = True
    else:
        predictor.args.save = False


model.add_callback("on_predict_postprocess_end", save_on_object)
results = model("pedestrians.mp4", stream=True, save=True)

for results in results:
    pass

للاستخدام الأكثر شمولاً، راجع دليل التنبؤ (Prediction Guide)، والذي يتضمن تعليمات مفصلة وخيارات تخصيص إضافية.

ما هي بعض الأمثلة العملية لاستخدام عمليات الاسترجاع في Ultralytics YOLO؟

يدعم Ultralytics YOLO العديد من التطبيقات العملية للاستدعاءات لتعزيز وتخصيص مراحل مختلفة مثل التدريب والتحقق والتنبؤ. تتضمن بعض الأمثلة العملية:

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

مثال: دمج الإطارات مع نتائج التنبؤ أثناء التنبؤ باستخدام on_predict_batch_end:

from ultralytics import YOLO


def on_predict_batch_end(predictor):
    """Combine prediction results with frames."""
    _, image, _, _ = predictor.batch
    image = image if isinstance(image, list) else [image]
    predictor.results = zip(predictor.results, image)


model = YOLO("yolo26n.pt")
model.add_callback("on_predict_batch_end", on_predict_batch_end)
for result, frame in model.predict():
    pass

استكشف شفرة مصدر الاستدعاء لمزيد من الخيارات والأمثلة.



📅 تم الإنشاء قبل 2 أعوام ✏️ تم التحديث قبل 19 أيام
glenn-jocherraimbekovmRizwanMunawarY-T-GUltralyticsAssistantRizwanMunawar

تعليقات