عمليات الاستدعاء
يدعم إطار عمل 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
استكشف الشيفرة المصدرية لرد الاستدعاء لمزيد من الخيارات والأمثلة.