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, export và predict. 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()
passTruy 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#
| Callback | Mô 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#
| Callback | Mô 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#
| Callback | Mô 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#
| Callback | Mô 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,ValidatorhoặcPredictor, 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(): passTù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_endvàon_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_endvàon_val_endcung 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_endvàon_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(): passKhám phá mã nguồn callback để biết thêm các tùy chọn và ví dụ.