Chuyển đến nội dung

Callbacks

Framework Ultralytics hỗ trợ các callback, đóng vai trò là các điểm vào tại các giai đoạn chiến lược trong quá trình train, val, export, và predict các chế độ. Mỗi callback chấp nhận một Trainer, Validator, hoặ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 trình bày chi tiết trong phần Tham khảo của tài liệu.



Xem: Cách sử dụng Ultralytics Callbacks | Predict, Train, Validate và Export Callbacks | Ultralytics YOLO🚀

Ví dụ

Trả về thông tin bổ sung với dự đoán

Trong ví dụ này, chúng tôi minh họa cách trả về khung hình gốc cùng với mỗi đối tượng kết quả:

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

Truy cập các số liệu của Mô hình bằng cách sử dụng on_model_save callback

Ví dụ này cho thấy cách truy xuất thông tin chi tiết về quá trình huấn luyện, chẳng hạn như điểm best_fitness, total_loss và các số liệu khác sau khi một điểm kiểm tra được lưu bằng on_model_save callback.

from ultralytics import YOLO

# Load a YOLO model
model = YOLO("yolo11n.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)

Tất cả Callbacks

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

Các Callback của Trình huấn luyện

Callback Mô tả
on_pretrain_routine_start Được kích hoạt khi bắt đầu quy trình huấn luyện sơ bộ.
on_pretrain_routine_end Được kích hoạt khi kết thúc quy trình huấn luyện sơ bộ.
on_train_start Được kích hoạt khi quá trình huấn luyện bắt đầu.
on_train_epoch_start Được kích hoạt khi bắt đầu mỗi epoch huấn luyện.
on_train_batch_start Được kích hoạt khi bắt đầu mỗi batch huấn luyện.
optimizer_step Được kích hoạt trong quá trình thực hiện bước tối ưu hóa.
on_before_zero_grad Được kích hoạt trước khi gradient được đặt về không.
on_train_batch_end Được kích hoạt khi kết thúc mỗi batch huấn luyện.
on_train_epoch_end Được kích hoạt khi kết thúc mỗi epoch huấn luyện.
on_fit_epoch_end Được kích hoạt khi kết thúc mỗi epoch huấn luyện.
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 huấn luyện 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 huấn luyện đang được dọn dẹp.

Các Callback của Trình xác thực

Callback Mô 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 batch xác thực.
on_val_batch_end Được kích hoạt khi kết thúc mỗi batch xác thực.
on_val_end Được kích hoạt khi quá trình xác thực kết thúc.

Các Callback của Trình dự đoán

Callback Mô 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 batch dự đoán.
on_predict_postprocess_end Được kích hoạt khi kết thúc quá trình hậu xử lý dự đoán.
on_predict_batch_end Được kích hoạt khi kết thúc mỗi batch dự đoán.
on_predict_end Được kích hoạt khi quá trình dự đoán kết thúc.

Các Callback của Trình xuất

Callback Mô 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.

Câu hỏi thường gặp

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

Callback của Ultralytics 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, chẳng hạn như huấn luyện, xác thực, xuất và dự đoán. Các callback này cho phép tùy chỉnh chức năng tại các thời đ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, Validator, hoặ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, hãy xác định một hàm và thêm nó vào mô hình bằng cách sử dụng model.add_callback() method. Dưới đây là một ví dụ về việc 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("yolo11n.pt")
model.add_callback("on_predict_batch_end", on_predict_batch_end)
for result, frame in model.predict():
    pass

Làm cách nào để tùy chỉnh quy trình huấn luyện Ultralytics bằng cách sử dụng callback?

Tùy chỉnh quy trình huấn luyện Ultralytics của bạn bằng cách chèn logic vào các giai đoạn cụ thể của quá trình huấn luyện. Ultralytics YOLO cung cấp nhiều lệnh gọi lại huấn luyện khác nhau, chẳng hạn như on_train_start, on_train_end, và on_train_batch_end, cho phép bạn thêm các số liệu, quy trình hoặc nhật ký tùy chỉnh.

Đây là cách đóng băng số liệu thống kê BatchNorm khi đóng băng các lớp bằng callback:

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)

Để biết thêm chi tiết về cách sử dụng hiệu quả các callback huấn luyện, hãy xem Hướng dẫn Huấn luyện.

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 callbacks (hàm gọi lại) trong quá trình xác thực (validation) của Ultralytics YOLO giúp tăng cường đá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 các số liệu. Các callback như on_val_start, on_val_batch_end, và on_val_end cung cấp các điểm vào để chèn 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ụ: để vẽ tất cả các lô xác thực thay vì chỉ ba lô đầu tiên:

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

Để hiểu rõ hơn về cách tích hợp các callback vào quy trình xác thực, hãy xem Hướng dẫn Xác thực.

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

Để đính kèm một lệnh gọi lại tùy chỉnh cho chế độ dự đoán trong Ultralytics YOLO, hãy xác định một hàm gọi lại và đăng ký nó với quy trình dự đoán. Các lệnh gọi lại dự đoán phổ biến bao gồm on_predict_start, on_predict_batch_end, và on_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 nhật ký dữ liệu hoặc chuyển đổi kết quả.

Đây là một ví dụ về callback tùy chỉnh lưu các dự đoán dựa trên sự hiện diện của một đối tượng thuộc một lớp cụ thể:

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

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

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

Ultralytics YOLO hỗ trợ nhiều cách triển khai callback thực tế để tăng cường và tùy chỉnh các giai đoạn khác nhau như huấn luyện, xác thực và dự đoán. Một số ví dụ thực tế bao gồm:

  • Ghi nhật ký các số liệu tùy chỉnh: Ghi nhật ký các số liệu bổ sung ở các giai đoạn khác nhau, chẳng hạn như khi kết thúc quá trình huấn luyện hoặc xác thực epochs.
  • Tăng cường dữ liệu: Triển khai các chuyển đổi hoặc tăng cường dữ liệu tùy chỉnh trong quá trình dự đoán hoặc các batch huấn luyện.
  • Kết quả trung gian: Lưu kết quả trung gian, chẳng hạn như dự đoán hoặc khung hình, để phân tích hoặc trực quan hóa thêm.

Ví dụ: Kết hợp các khung hình 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("yolo11n.pt")
model.add_callback("on_predict_batch_end", on_predict_batch_end)
for result, frame in model.predict():
    pass

Khám phá mã nguồn callback để biết thêm các tùy chọn và ví dụ.



📅 Đã tạo 1 năm trước ✏️ Cập nhật 3 tháng trước

Bình luận