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

عمليات الاستدعاء

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



شاهد: إتقان 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("yolo11n.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_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_fit_epoch_end يتم تشغيله في نهاية كل حقبة زمنية ملائمة.
on_model_save يتم تشغيله عند حفظ النموذج.
on_train_end يتم تشغيله عند انتهاء عملية التدريب.
on_params_update يتم تشغيلها عند تحديث معلمات النموذج.
teardown يتم تشغيله عند تنظيف عملية التدريب.

استدعاءات المصادقة

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

عمليات استدعاء المتنبئ

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

عمليات استدعاء المصدرين

معاودة الاتصال الوصف
on_export_start يتم تشغيله عند بدء عملية التصدير.
on_export_end يتم تشغيله عند انتهاء عملية التصدير.

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

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

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

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

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("yolo11n.pt")
model.add_callback("on_predict_batch_end", on_predict_batch_end)
for result, frame in model.predict():
    pass

كيف يمكنني تخصيص روتين تدريب 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("yolo11n.pt")
model.add_callback("on_train_epoch_start", put_in_eval_mode)
model.train(data="coco.yaml", epochs=10)

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

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

يعمل استخدام عمليات الاستدعاء أثناء التحقق من الصحة في 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("yolo11n.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("yolo11n.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

لمزيد من الاستخدام الشامل، راجع دليل التنبؤ، الذي يتضمن تعليمات مفصلة وخيارات تخصيص إضافية.

ما هي بعض الأمثلة العملية لاستخدام عمليات الاسترجاع في 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("yolo11n.pt")
model.add_callback("on_predict_batch_end", on_predict_batch_end)
for result, frame in model.predict():
    pass

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

📅 تم إنشاؤها منذ 1 سنة مضت ✏️ تم التحديث منذ 9 أيام

التعليقات