Bỏ để qua phần nội dung

Callbacks

Callbacks

Ultralytics Framework hỗ trợ callback làm điểm vào trong các giai đoạn chiến lược của chế độ Train, Val, Export và Predict. Mỗi callback chấp nhận một Trainer, Validatorhoặc Predictor đối tượng tùy thuộc vào loại hoạt động. Tất cả các thuộc tính của các đối tượng này có thể được tìm thấy trong phần Tham khảo của tài liệu.



Xem: Mastering Ultralytics YOLOv8:Callbacks

Ví dụ

Trả về thông tin bổ sung bằng Dự đoán

Trong ví dụ này, chúng ta muốn trả về khung ban đầu với mỗi đối tượng kết quả. Đây là cách chúng ta có thể làm điều đó

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

Tất cả các callback

Dưới đây là tất cả các callback được hỗ trợ. Xem mã nguồn callbacks để biết thêm chi tiết.

Gọi lại huấn luyện viên

Gọi lại Sự miêu tả
on_pretrain_routine_start Được kích hoạt khi bắt đầu thói quen trước khi đào tạo
on_pretrain_routine_end Được kích hoạt vào cuối thói quen trước khi đào tạo
on_train_start Được kích hoạt khi quá trình đào tạo bắt đầu
on_train_epoch_start Được kích hoạt vào đầu mỗi kỷ nguyên đào tạo
on_train_batch_start Được kích hoạt khi bắt đầu mỗi đợt đào tạo
optimizer_step Được kích hoạt trong bước tối ưu hóa
on_before_zero_grad Được kích hoạt trước khi gradient bằng không
on_train_batch_end Được kích hoạt vào cuối mỗi đợt đào tạo
on_train_epoch_end Được kích hoạt vào cuối mỗi kỷ nguyên đào tạo
on_fit_epoch_end Được kích hoạt vào cuối mỗi kỷ nguyên phù hợp
on_model_save Được kích hoạt khi mô hình được lưu
on_train_end Được kích hoạt khi quá trình đào tạo kết thúc
on_params_update Được kích hoạt khi các tham số mô hình được cập nhật
teardown Được kích hoạt khi quá trình đào tạo đang được dọn dẹp

Callback trình xác thực

Gọi lại Sự miêu tả
on_val_start Được kích hoạt khi quá trình xác thực bắt đầu
on_val_batch_start Được kích hoạt khi bắt đầu mỗi lô xác thực
on_val_batch_end Được kích hoạt vào cuối mỗi lô xác thực
on_val_end Được kích hoạt khi quá trình xác thực kết thúc

Callback dự đoán

Gọi lại Sự miêu tả
on_predict_start Được kích hoạt khi quá trình dự đoán bắt đầu
on_predict_batch_start Được kích hoạt khi bắt đầu mỗi đợt dự đoán
on_predict_postprocess_end Được kích hoạt khi kết thúc quá trình xử lý hậu kỳ dự đoán
on_predict_batch_end Được kích hoạt vào cuối mỗi đợt dự đoán
on_predict_end Được kích hoạt khi quá trình dự đoán kết thúc

Callback của nhà xuất khẩu

Gọi lại Sự miêu tả
on_export_start Được kích hoạt khi quá trình xuất bắt đầu
on_export_end Được kích hoạt khi quá trình xuất kết thúc

FAQ

Là gì Ultralytics callback và làm thế nào tôi có thể sử dụng chúng?

Ultralytics Callbacks là các điểm vào chuyên biệt được kích hoạt trong các giai đoạn chính của hoạt động mô hình như đào tạo, xác nhận, xuất và dự đoán. Các callback này cho phép chức năng tùy chỉnh tại các điểm cụ thể trong quy trình, cho phép cải tiến và sửa đổi quy trình làm việc. Mỗi callback chấp nhận một Trainer, Validatorhoặc Predictor đối tượng, tùy thuộc vào loại hoạt động. Để biết các thuộc tính chi tiết của các đối tượng này, hãy tham khảo Phần tham khảo.

Để sử dụng callback, bạn có thể định nghĩa một hàm và sau đó thêm nó vào mô hình với add_callback phương pháp. Dưới đây là ví dụ về cách trả về thông tin bổ sung trong quá trình dự đoán:

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

Làm thế nào tôi có thể tùy chỉnh Ultralytics Thói quen đào tạo bằng cách sử dụng callback?

Để tùy chỉnh Ultralytics Thói quen đào tạo Sử dụng callback, bạn có thể đưa logic của mình vào các giai đoạn cụ thể của quá trình đào tạo. Ultralytics YOLO Cung cấp nhiều callback đào tạo như on_train_start, on_train_endon_train_batch_end. Chúng cho phép bạn thêm số liệu tùy chỉnh, xử lý hoặc ghi nhật ký.

Dưới đây là ví dụ về cách ghi lại các chỉ số bổ sung vào cuối mỗi kỷ nguyên đào tạo:

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)

Tham khảo Hướng dẫn đào tạo để biết thêm chi tiết về cách sử dụng hiệu quả callback đào tạo.

Tại sao tôi nên sử dụng callback trong quá trình xác thực trong Ultralytics YOLO?

Sử dụng Callback trong quá trình xác thực trong Ultralytics YOLO có thể nâng cao đánh giá mô hình bằng cách cho phép xử lý tùy chỉnh, ghi nhật ký hoặc tính toán số liệu. Các callback như on_val_start, on_val_batch_endon_val_end Cung cấp các điểm vào để đưa logic tùy chỉnh, đảm bảo các quy trình xác thực chi tiết và toàn diện.

Ví dụ: bạn có thể muốn ghi lại các số liệu xác thực bổ sung hoặc lưu kết quả trung gian để phân tích thêm. Dưới đây là ví dụ về cách ghi chỉ số tùy chỉnh khi kết thúc quá trình xác thực:

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")

Hãy xem Hướng dẫn xác thực để biết thêm thông tin chi tiết về cách kết hợp callback vào quy trình xác thực của bạn.

Làm cách nào để đính kèm callback tùy chỉnh cho chế độ dự đoán trong Ultralytics YOLO?

Để đính kèm callback tùy chỉnh cho Chế độ dự đoán trong Ultralytics YOLO, bạn định nghĩa một hàm callback và đăng ký nó với quá trình dự đoán. Các callback dự đoán phổ biến bao gồm on_predict_start, on_predict_batch_endon_predict_end. Chúng cho phép sửa đổi đầu ra dự đoán và tích hợp các chức năng bổ sung như ghi dữ liệu hoặc chuyển đổi kết quả.

Dưới đây là ví dụ trong đó callback tùy chỉnh được sử dụng để ghi nhật ký dự đoán:

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")

Để sử dụng toàn diện hơn, hãy tham khảo Hướng dẫn dự đoán bao gồm hướng dẫn chi tiết và các tùy chọn tùy chỉnh bổ sung.

Một số ví dụ thực tế về việc sử dụng callback trong là gì Ultralytics YOLO?

Ultralytics YOLO Hỗ trợ triển khai thực tế khác nhau của callback để nâng cao và tùy chỉnh các giai đoạn khác nhau như đào tạo, xác nhận và dự đoán. Một số ví dụ thực tế bao gồm:

  1. Ghi nhật ký số liệu tùy chỉnh: Ghi nhật ký các chỉ số bổ sung ở các giai đoạn khác nhau, chẳng hạn như kết thúc kỷ nguyên đào tạo hoặc xác thực.
  2. Tăng cường dữ liệu: Thực hiện chuyển đổi hoặc bổ sung dữ liệu tùy chỉnh trong các đợt dự đoán hoặc đào tạo.
  3. Kết quả trung gian: Lưu các kết quả trung gian như dự đoán hoặc khung để phân tích hoặc trực quan hóa thêm.

Ví dụ: Kết hợp khung với kết quả dự đoán trong quá trình dự đoán bằng cách sử dụng 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

Khám phá Tham chiếu gọi lại hoàn chỉnh để tìm thêm tùy chọn và ví dụ.



Đã tạo 2023-11-12, Cập nhật 2024-07-04
Tác giả: glenn-jocher (9), RizwanMunawar (1), Laughing-q (1)

Ý kiến