Bỏ qua nội dung

Gọi lại

Ultralytics khung hỗ trợ các lệnh gọi lại, đóng vai trò là điểm vào ở các giai đoạn chiến lược trong train, val, export, Và predict chế độ. Mỗi cuộc gọi lại 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.



Đồng hồ: Làm chủ Ultralytics YOLO : Gọi lại

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 từng đố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

Tất cả các cuộc gọi lại

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

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 quá trình luyện tập trước.
on_pretrain_routine_end Được kích hoạt vào cuối quá trình luyện tập trước.
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 độ dốc bằng 0.
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 giai đoạn đào tạo.
on_fit_epoch_end Được kích hoạt vào cuối mỗi thời kỳ 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.

Gọi lại 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 đợt xác thực.
on_val_batch_end Được kích hoạt vào cuối mỗi đợt xác thực.
on_val_end Được kích hoạt khi quá trình xác thực kết thúc.

Gọi lại 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ý 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.

Gọi lại 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.

CÂU HỎI THƯỜNG GẶP

Những gì là Ultralytics gọi lại và tôi có thể sử dụng chúng như thế nào?

Ultralytics callbacks là các điểm nhập 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 thực, xuất và dự đoán. Các callbacks 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, 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 lệnh gọi lại, 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() phương pháp. Sau đâ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 thế nào tôi có thể tùy chỉnh Ultralytics thói quen đào tạo sử dụng lệnh gọi lại?

Tùy chỉnh của bạn Ultralytics thói quen đào tạo bằng cách đưa logic vào các giai đoạn cụ thể của quá trình đào tạo. Ultralytics YOLO cung cấp nhiều cuộc gọi lại đào tạo 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 số liệu, xử lý hoặc ghi nhật ký tùy chỉnh.

Sau đây là cách đóng băng số liệu thống kê BatchNorm khi đóng băng các lớp bằng lệnh gọi lại:

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 lệnh gọi lại đào tạo hiệu quả, hãy xem Hướng dẫn đào tạo .

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

Sử dụng lệnh gọi lại trong quá trình xác thực trong Ultralytics YOLO nâng cao việc đá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 lệnh gọi lại như on_val_start, on_val_batch_end, Và on_val_end cung cấp điểm vào để đưa logic tùy chỉnh vào, đảm bảo quy trình xác thực chi tiết và toàn diện.

Ví dụ: để vẽ biểu đồ cho tất cả các đợt xác thực thay vì chỉ ba đợt đầ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")

Để biết thêm thông tin chi tiết về việc kết hợp lệnh gọi lại 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 để tôi đính kèm lệnh gọi lại tùy chỉnh cho chế độ dự đoán trong Ultralytics YOLO ?

Để đính kèm lệnh gọi lại tùy chỉnh cho chế độ dự đoán trong Ultralytics YOLO , 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 hàm 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 kết quả 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ả.

Sau đây là ví dụ về cách gọi lại tùy chỉnh lưu dự đoán dựa trên việc đối tượng của một lớp cụ thể có hiện diện hay không:

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

Để biết cách sử dụng toàn diện hơn, hãy tham khảo Hướng dẫn dự đoán , trong đó 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 lệnh gọi lại trong Ultralytics YOLO ?

Ultralytics YOLO hỗ trợ nhiều triển khai thực tế khác nhau của các lệnh gọi lại để tăng cường và tùy chỉnh các giai đoạn khác nhau như đào tạo, 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ý số liệu bổ sung ở các giai đoạn khác nhau, chẳng hạn như vào cuối thời kỳ đào tạo hoặc xác thực.
  • Tăng cường dữ liệu : Triển khai 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 đào tạo.
  • 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, để phân tích hoặc trực quan hóa thêm.

Ví dụ: Kết hợp các 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("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 lệnh gọi lại để biết thêm tùy chọn và ví dụ.

📅 Được tạo ra cách đây 1 năm ✏️ Đã cập nhật cách đây 9 ngày

Bình luận