рд╕рд╛рдордЧреНрд░реА рдкрд░ рдЬрд╛рдПрдВ

рдХреЙрд▓рдмреИрдХ

рдХреЙрд▓рдмреИрдХ

Ultralytics рдлреНрд░реЗрдорд╡рд░реНрдХ рдЯреНрд░реЗрди, рд╡реИрд▓, рдирд┐рд░реНрдпрд╛рдд рдФрд░ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдореЛрдб рдХреЗ рд░рдгрдиреАрддрд┐рдХ рдЪрд░рдгреЛрдВ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХреЙрд▓рдмреИрдХ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓рдмреИрдХ рдПрдХ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ Trainer, Validatorрдирд╣реАрдВ рддреЛ Predictor рдСрдкрд░реЗрд╢рди рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдСрдмреНрдЬреЗрдХреНрдЯред рдЗрди рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рднреА рдЧреБрдг рдбреЙрдХреНрд╕ рдХреЗ рд╕рдВрджрд░реНрдн рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред



рд╕рддрд░реНрдХрддрд╛: рдорд╛рд╣рд┐рд░ Ultralytics YOLOv8: рдХреЙрд▓рдмреИрдХ

рдЙрджрд╛рд╣рд░рдг

рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХреЗ рд╕рд╛рде рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА рд▓реМрдЯрд╛рдирд╛

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рдгрд╛рдо рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдореВрд▓ рдлреНрд░реЗрдо рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рд╣рдо рдРрд╕рд╛ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

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

    # 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("yolov8n.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 рдСрдмреНрдЬреЗрдХреНрдЯ, рдСрдкрд░реЗрд╢рди рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ред рдЗрди рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╡рд┐рд╕реНрддреГрдд рдЧреБрдгреЛрдВ рдХреЗ рд▓рд┐рдП, рджреЗрдЦреЗрдВ рд╕рдВрджрд░реНрдн рдЕрдиреБрднрд╛рдЧ.

рдХреЙрд▓рдмреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдореЙрдбрд▓ рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ 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("yolov8n.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. рдпреЗ рдЖрдкрдХреЛ рдХрд╕реНрдЯрдо рдореЗрдЯреНрд░рд┐рдХреНрд╕, рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдпрд╛ рд▓реЙрдЧрд┐рдВрдЧ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред

рдпрд╣рд╛рдВ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдпреБрдЧ рдХреЗ рдЕрдВрдд рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдореАрдЯреНрд░рд┐рдХ рд▓реЙрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

from ultralytics import YOLO


def on_train_epoch_end(trainer):
    """Custom logic for additional metrics logging at the end of each training epoch."""
    additional_metric = compute_additional_metric(trainer)
    trainer.log({"additional_metric": additional_metric})


model = YOLO("yolov8n.pt")
model.add_callback("on_train_epoch_end", on_train_epoch_end)
model.train(data="coco.yaml", epochs=10)

рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЙрд▓рдмреИрдХ рдХрд╛ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛ рджреЗрдЦреЗрдВред

рдореБрдЭреЗ рд╕рддреНрдпрд╛рдкрди рдХреЗ рджреМрд░рд╛рди рдХреЙрд▓рдмреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП Ultralytics YOLO?

рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рддреНрдпрд╛рдкрди рдХреЗ рджреМрд░рд╛рди рдХреЙрд▓рдмреИрдХ рдореЗрдВ Ultralytics YOLO рдХрд╕реНрдЯрдо рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ, рд▓реЙрдЧрд┐рдВрдЧ рдпрд╛ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдЧрдгрдирд╛ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдХрд░ рдореЙрдбрд▓ рдореВрд▓реНрдпрд╛рдВрдХрди рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдХреЙрд▓рдмреИрдХ рдЬреИрд╕реЗ on_val_start, on_val_batch_endрдФрд░ on_val_end рдХрд╕реНрдЯрдо рддрд░реНрдХ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдкреНрд░рджрд╛рди рдХрд░реЗрдВ, рд╡рд┐рд╕реНрддреГрдд рдФрд░ рд╡реНрдпрд╛рдкрдХ рд╕рддреНрдпрд╛рдкрди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рддреНрдпрд╛рдкрди рдореАрдЯреНрд░рд┐рдХ рд▓реЙрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВ рдпрд╛ рдЖрдЧреЗ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдордзреНрдпрд╡рд░реНрддреА рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рд╕рд╣реЗрдЬрдирд╛ рдЪрд╛рд╣реЗрдВ. рд╕рддреНрдпрд╛рдкрди рдХреЗ рдЕрдВрдд рдореЗрдВ рдХрд╕реНрдЯрдо рдореАрдЯреНрд░рд┐рдХ рд▓реЙрдЧ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдпрд╣рд╛рдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

from ultralytics import YOLO


def on_val_end(validator):
    """Log custom metrics at end of validation."""
    custom_metric = compute_custom_metric(validator)
    validator.log({"custom_metric": custom_metric})


model = YOLO("yolov8n.pt")
model.add_callback("on_val_end", on_val_end)
model.val(data="coco.yaml")

рдЕрдкрдиреА рд╕рддреНрдпрд╛рдкрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХреЙрд▓рдмреИрдХ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рд╕рддреНрдпрд╛рдкрди рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛ рджреЗрдЦреЗрдВред

рдореИрдВ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рдореЛрдб рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╕реНрдЯрдо рдХреЙрд▓рдмреИрдХ рдХреИрд╕реЗ рд╕рдВрд▓рдЧреНрди рдХрд░реВрдВ Ultralytics YOLO?

рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╕реНрдЯрдо рдХреЙрд▓рдмреИрдХ рд╕рдВрд▓рдЧреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдореЛрдб рдореЗрдВ Ultralytics YOLO, рдЖрдк рдПрдХ рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдкрдВрдЬреАрдХреГрдд рдХрд░рддреЗ рд╣реИрдВред рд╕рд╛рдорд╛рдиреНрдп рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХреЙрд▓рдмреИрдХ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ on_predict_start, on_predict_batch_endрдФрд░ on_predict_end. рдпреЗ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд╕рдВрд╢реЛрдзрди рдФрд░ рдбреЗрдЯрд╛ рд▓реЙрдЧрд┐рдВрдЧ рдпрд╛ рдкрд░рд┐рдгрд╛рдо рдкрд░рд┐рд╡рд░реНрддрди рдЬреИрд╕реА рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рдПрдХреАрдХрд░рдг рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред

рдпрд╣рд╛рдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рд▓реЙрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо рдХреЙрд▓рдмреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

from ultralytics import YOLO


def on_predict_end(predictor):
    """Log predictions at the end of prediction."""
    for result in predictor.results:
        log_prediction(result)


model = YOLO("yolov8n.pt")
model.add_callback("on_predict_end", on_predict_end)
results = model.predict(source="image.jpg")

рдЕрдзрд┐рдХ рд╡реНрдпрд╛рдкрдХ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП, рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдЧрд╛рдЗрдб рджреЗрдЦреЗрдВ рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рд╕реНрддреГрдд рдирд┐рд░реНрджреЗрд╢ рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдЕрдиреБрдХреВрд▓рди рд╡рд┐рдХрд▓реНрдк рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

рдХреЙрд▓рдмреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдХреБрдЫ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрджрд╛рд╣рд░рдг рдХреНрдпрд╛ рд╣реИрдВ Ultralytics YOLO?

Ultralytics YOLO рдкреНрд░рд╢рд┐рдХреНрд╖рдг, рд╕рддреНрдпрд╛рдкрди рдФрд░ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдЬреИрд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдЪрд░рдгреЛрдВ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдФрд░ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓рдмреИрдХ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдХреБрдЫ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

  1. рд▓реЙрдЧрд┐рдВрдЧ рдХрд╕реНрдЯрдо рдореАрдЯреНрд░рд┐рдХ: рд╡рд┐рднрд┐рдиреНрди рдЪрд░рдгреЛрдВ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдореАрдЯреНрд░рд┐рдХ рд▓реЙрдЧ рдХрд░реЗрдВ, рдЬреИрд╕реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХрд╛ рдЕрдВрдд рдпрд╛ рд╕рддреНрдпрд╛рдкрди рдпреБрдЧред
  2. рдбреЗрдЯрд╛ рд╡реГрджреНрдзрд┐: рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдпрд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдмреИрдЪреЛрдВ рдХреЗ рджреМрд░рд╛рди рдХрд╕реНрдЯрдо рдбреЗрдЯрд╛ рдкрд░рд┐рд╡рд░реНрддрди рдпрд╛ рд╡реГрджреНрдзрд┐ рд▓рд╛рдЧреВ рдХрд░реЗрдВред
  3. рдордзреНрдпрд╡рд░реНрддреА рдкрд░рд┐рдгрд╛рдо: рдЖрдЧреЗ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдпрд╛ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рд▓рд┐рдП рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгрд┐рдпреЛрдВ рдпрд╛ рдлрд╝реНрд░реЗрдореЛрдВ рдЬреИрд╕реЗ рдордзреНрдпрд╡рд░реНрддреА рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рд╕рд╣реЗрдЬреЗрдВред

рдЙрджрд╛рд╣рд░рдг: рдлрд╝реНрд░реЗрдо рдХреЛ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдирд╛ 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("yolov8n.pt")
model.add_callback("on_predict_batch_end", on_predict_batch_end)
for result, frame in model.predict():
    pass

рдЕрдзрд┐рдХ рд╡рд┐рдХрд▓реНрдк рдФрд░ рдЙрджрд╛рд╣рд░рдг рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рдХреЙрд▓рдмреИрдХ рд╕рдВрджрд░реНрдн рдХрд╛ рдЕрдиреНрд╡реЗрд╖рдг рдХрд░реЗрдВред



рдмрдирд╛рдпрд╛ рдЧрдпрд╛ 2023-11-12, рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ 2024-07-04
рд▓реЗрдЦрдХ: рдЧреНрд▓реЗрди-рдЬреЛрдЪрд░ (9), рд░рд┐рдЬрд╡рд╛рди рдореБрдирд╡реНрд╡рд░ (1), рд▓рд╛рдлрд┐рдВрдЧ-рдХреНрдпреВ (1)

рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ