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ụ.