Bỏ qua nội dung

Gọi lại

Gọi lại

Ultralytics framework hỗ trợ các lệnh gọi lại như là điểm vào trong các giai đoạn chiến lược của chế độ train, val, export và predict. Mỗi lệnh 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ó thể được tìm thấy 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 ta muốn trả về khung gốc với mỗi đối tượng kết quả. Sau đây là cách chúng ta có thể thực hiện đ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("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

Sau đây là tất cả các lệnh gọi lại được hỗ trợ. Xem mã nguồn lệnh gọi lại để 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 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 gradient 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 kỷ nguyê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 vào cuối quá trình xử lý hậu 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 gọi lại 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 lệnh gọi lại 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 lệnh 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. Để 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, bạn có thể định nghĩa một hàm và sau đó thêm nó vào mô hình bằng add_callback phương pháp. Sau đâ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("yolo11n.pt")
model.add_callback("on_predict_batch_end", on_predict_batch_end)
for result, frame in model.predict():
    pass

Tôi có thể tùy chỉnh như thế nào? 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 sử dụng lệnh gọi lại, 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 cuộc gọi lại đào tạo như on_train_start, on_train_end, Và on_train_batch_end. Chúng 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à ví dụ về cách ghi lại các số liệu 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("yolo11n.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 lệnh gọi lại đào tạo hiệu quả.

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 gọi lại trong quá trình xác thực TRONG Ultralytics YOLO có thể 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 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ụ, 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. Sau đây là ví dụ về cách ghi lại các số liệu tùy chỉnh vào cuối 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("yolo11n.pt")
model.add_callback("on_val_end", on_val_end)
model.val(data="coco.yaml")

Tham khảo 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 lệnh gọi lại vào quy trình xác thực của bạn.

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 một lệnh gọi lại tùy chỉnh cho chế độ dự đoán TRONG Ultralytics YOLO , bạn định nghĩa 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 sử dụng lệnh gọi lại tùy chỉnh để ghi lại 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("yolo11n.pt")
model.add_callback("on_predict_end", on_predict_end)
results = model.predict(source="image.jpg")

Để 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 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:

  1. 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ư cuối quá trình đào tạo hoặc thời điểm xác thực.
  2. 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.
  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 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á Tài liệu tham khảo gọi lại đầy đủ để tìm thêm các tùy chọn và ví dụ.

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

Bình luận