Callbacks

Khung làm việc Ultralytics hỗ trợ callbacks, đóng vai trò là các điểm truy cập tại các giai đoạn chiến lược trong suốt các chế độ train, val, exportpredict. Mỗi callback chấp nhận một đối tượng Trainer, Validator hoặc Predictor, tùy thuộc vào loại thao tác. Tất cả các thuộc tính của những đố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.



Watch: How to use Ultralytics Callbacks | Predict, Train, Validate and 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 trình bày 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("yolo26n.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 callback on_model_save

Ví dụ này cho thấy cách truy xuất chi tiết 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 checkpoint được lưu bằng cách sử dụng callback on_model_save.

from ultralytics import YOLO

# Load a YOLO model
model = YOLO("yolo26n.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 của callbacks.

Trainer Callbacks

CallbackMô tả
on_pretrain_routine_startĐược kích hoạt khi bắt đầu quy trình tiền huấn luyện, trước khi tải dữ liệu và thiết lập mô hình.
on_pretrain_routine_endĐược kích hoạt khi kết thúc quy trình tiền huấn luyện, sau khi hoàn tất việc tải dữ liệu và thiết lập mô hình.
on_train_startĐược kích hoạt khi quá trình huấn luyện bắt đầu, trước khi epoch đầu tiên bắt đầu.
on_train_epoch_startĐược kích hoạt khi bắt đầu mỗi epoch huấn luyện, trước khi bắt đầu lặp qua batch.
on_train_batch_startĐược kích hoạt khi bắt đầu mỗi batch huấn luyện, trước bước lan truyền tiến (forward pass).
optimizer_stepĐược kích hoạt trong bước tối ưu hóa (optimizer step). Dành riêng cho các tích hợp tùy chỉnh; không được gọi bởi vòng lặp huấn luyện mặc định.
on_before_zero_gradĐược kích hoạt trước khi các gradient được đặt về không. Dành riêng cho các tích hợp tùy chỉnh; không được gọi bởi vòng lặp huấn luyện mặc định.
on_train_batch_endĐược kích hoạt khi kết thúc mỗi batch huấn luyện, sau bước lan truyền ngược (backward pass). Bước tối ưu hóa có thể bị hoãn lại do tích lũy gradient.
on_train_epoch_endĐược kích hoạt khi kết thúc mỗi epoch huấn luyện, sau khi tất cả các batch được xử lý nhưng trước khi thực hiện xác thực (validation). Các số liệu xác thực và fitness có thể chưa khả dụng.
on_model_saveĐược kích hoạt khi checkpoint mô hình được lưu, sau khi xác thực.
on_fit_epoch_endĐược kích hoạt khi kết thúc mỗi epoch fit (train + val), sau khi xác thực và sau khi lưu bất kỳ checkpoint nào. Các số liệu xác thực đã khả dụng, và fitness khả dụng cho lệnh gọi huấn luyện mỗi epoch. Callback này cũng được gọi trong quá trình đánh giá mô hình tốt nhất cuối cùng, nơi không có checkpoint nào được lưu và fitness có thể không xuất hiện.
on_train_endĐược kích hoạt khi quá trình huấn luyện kết thúc, sau khi đánh giá cuối cùng mô hình tốt nhất.
on_params_updateĐược kích hoạt khi các tham số mô hình được cập nhật. Dành riêng cho các tích hợp tùy chỉnh; không được gọi bởi vòng lặp huấn luyện mặc định.
teardownĐược kích hoạt khi quá trình huấn luyện đang được dọn dẹp.

Validator Callbacks

CallbackMô 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.

Predictor Callbacks

CallbackMô 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.

Exporter Callbacks

CallbackMô tả
on_export_startĐược kích hoạt khi quá trình xuất (export) 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 (FAQ)

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

Callbacks của Ultralytics là các điểm truy cập chuyên biệt được kích hoạt trong các giai đoạn chính của các hoạt động mô hình như huấn luyện, xác thực, xuất và dự đoán. Những 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 luồng công việc. Mỗi callback chấp nhận một đối tượng Trainer, Validator hoặc Predictor, tùy thuộc vào loại thao tác. Để biết chi tiết thuộc tính của các đối tượng này, hãy tham khảo Phần tham khảo.

Để sử dụng một 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 phương thức model.add_callback(). Đâ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("yolo26n.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 callbacks?

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

Đây là cách đóng băng các thống kê BatchNorm khi đóng băng các lớp bằng callbacks:

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("yolo26n.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 callbacks trong quá trình xác thực trong Ultralytics YOLO?

Sử dụng callbacks trong quá trình xác thực trong Ultralytics YOLO giúp nâng cao khả nă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 số liệu. Các callback như on_val_start, on_val_batch_endon_val_end cung cấp các điểm truy cập để đưa logic tùy chỉnh vào, đả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 batch xác thực thay vì chỉ ba batch đầ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("yolo26n.pt")
model.add_callback("on_val_batch_end", plot_samples)
model.val(data="coco.yaml")

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

Làm thế nào để gắn một callback tùy chỉnh cho chế độ dự đoán trong Ultralytics YOLO?

Để gắn một callback tùy chỉnh cho chế độ dự đoán trong Ultralytics YOLO, hãy xác định một hàm callback và đăng ký nó với quy 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 nhật ký dữ liệu hoặc chuyển đổi kết quả.

Đây là một ví dụ trong đó một callback tùy chỉnh lưu các dự đoán dựa trên việc liệu một đối tượng của một lớp cụ thể có xuất hiện hay không:

from ultralytics import YOLO

model = YOLO("yolo26n.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 số ví dụ thực tế về việc sử dụng callbacks trong Ultralytics YOLO là gì?

Ultralytics YOLO hỗ trợ nhiều triển khai thực tế của callbacks để nâng cao 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ý 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 huấn luyện hoặc epoch xác thực.
  • Tăng cường dữ liệu: Thực hiện 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 các 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 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("yolo26n.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ụ.

Bình luận