YOLO Vision 2026:

Các callback#

Framework Ultralytics hỗ trợ callbacks, đóng vai trò là các điểm truy cập ở các giai đoạn chiến lược trong 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 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.



Watch: How to use Ultralytics Callbacks | Predict, Train, Validate and Export Callbacks | Ultralytics YOLO🚀

Ví dụ#

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

Trong ví dụ này, chúng tôi trình diễn 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 chỉ số của model bằng cách sử dụng callback on_model_save#

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 số best_fitness, tổng tổn thất total_loss và các chỉ số 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ả các Callback#

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

Các callback của Trainer#

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 model.
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 quá trình tải dữ liệu và thiết lập model hoàn tất.
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 vào đầu mỗi epoch huấn luyện, trước khi quá trình lặp batch bắt đầu.
on_train_batch_startĐược kích hoạt khi bắt đầu mỗi batch huấn luyện, trước khi thực hiện forward pass.
optimizer_stepĐược kích hoạt trong bước tối ưu hóa. 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 gradient được reset về 0. 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 khi thực hiện backward pass. Bước tối ưu hóa có thể bị trì hoãn do quá trình 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 validation. Các chỉ số validation và độ khớp (fitness) có thể chưa khả dụng tại thời điểm này.
on_model_saveĐược kích hoạt khi checkpoint của model được lưu, sau khi đã hoàn tất validation.
on_fit_epoch_endĐược kích hoạt khi kết thúc mỗi epoch khớp (train + val), sau khi thực hiện validation và lưu bất kỳ checkpoint nào. Các chỉ số validation đã khả dụng, và độ khớp đã khả dụng cho lệnh huấn luyện theo từng epoch. Callback này cũng được gọi trong quá trình đánh giá model tốt nhất cuối cùng, nơi không có checkpoint nào được lưu và độ khớp có thể không tồn tại.
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 model tốt nhất.
on_params_updateĐược kích hoạt khi các tham số của model đượ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.

Các callback của Validator#

CallbackMô tả
on_val_startĐược kích hoạt khi bắt đầu quá trình validation.
on_val_batch_startĐược kích hoạt khi bắt đầu mỗi batch validation.
on_val_batch_endĐược kích hoạt khi kết thúc mỗi batch validation.
on_val_endĐược kích hoạt khi quá trình validation kết thúc.

Các callback của Predictor#

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 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 Exporter#

CallbackMô tả
on_export_startĐược kích hoạt khi quá trình xuất model bắt đầu.
on_export_endĐược kích hoạt khi quá trình xuất model kết thúc.

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

  • Các callback 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 quan trọng của các hoạt động model như huấn luyện, kiểm tra (validation), xuất và dự đoán. Các tính năng callback này cho phép thực hiện 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 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 một callback, hãy định nghĩa một hàm và thêm nó vào model bằng phương thức model.add_callback(). Dưới đây là 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
  • Tùy chỉnh quy trình huấn luyện Ultralytics của bạn bằng cách tiêm 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 loại callbacks 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 chỉ số tùy chỉnh, xử lý hoặc ghi nhật ký.

    Dưới đây là cách đóng băng các thống kê BatchNorm khi đóng băng các layer 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("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 callbacks huấn luyện, hãy xem Hướng dẫn huấn luyện.

  • Sử dụng các callbacks trong quá trình kiểm tra (validation) trong Ultralytics YOLO giúp nâng cao việc đánh giá model bằng cách cho phép xử lý tùy chỉnh, ghi nhật ký hoặc tính toán chỉ số. Các callbacks như on_val_start, on_val_batch_endon_val_end cung cấp các điểm truy cập để tiêm logic tùy chỉnh, đảm bảo quy trình kiểm tra chi tiết và toàn diện.

    Ví dụ, để vẽ tất cả các batch validation 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 callbacks vào quy trình kiểm tra (validation) của bạn, hãy xem Hướng dẫn kiểm tra (Validation Guide).

  • Để đính kèm một callback tùy chỉnh cho chế độ dự đoán trong Ultralytics YOLO, hãy định nghĩa một hàm callback và đăng ký nó với quy trình dự đoán. Các callbacks dự đoán phổ biến bao gồm on_predict_start, on_predict_batch_endon_predict_end. Những callback này 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ụ nơi một callback tùy chỉnh lưu các dự đoán dựa trên việc một đối tượng thuộc 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_stream = model("pedestrians.mp4", stream=True, save=True)
    
    for result in results_stream:
        pass

    Để sử dụng toàn diện hơn, hãy tham khảo Hướng dẫn dự đoán, nơi 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.

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

    • Ghi nhật ký các chỉ số tùy chỉnh: Ghi lại các chỉ số bổ sung ở các giai đoạn khác nhau, chẳng hạn như ở cuối các epoch huấn luyện hoặc kiểm tra.
    • Tăng cường dữ liệu: Triển khai các phép biến đổi dữ liệu 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 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("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