Link to this sectionCác callback#
Framework Ultralytics hỗ trợ các callback, đóng vai trò là các điểm truy cập tại những 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 những đối tượng này đều được trình bày chi tiết trong Phần tham chiếu của tài liệu.
Watch: How to use Ultralytics Callbacks | Predict, Train, Validate and Export Callbacks | Ultralytics YOLO🚀
Link to this sectionVí dụ#
Link to this sectionTrả 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()
passLink to this sectionTruy cập các chỉ số của model bằ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 best_fitness, total_loss và các chỉ số khác sau khi một checkpoint được lưu bằ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)Link to this sectionTất cả các Callback#
Dưới đây là tất cả các callback được hỗ trợ. Để biết thêm chi tiết, hãy tham khảo mã nguồn của các callback.
Link to this sectionCá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 diễn ra. |
on_train_epoch_start | Được kích hoạt khi bắt đầu mỗi epoch huấn luyện, trước khi bắt đầu vòng lặp batch. |
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. |
Link to this sectionCá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. |
Link to this sectionCá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. |
Link to this sectionCá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. |
Link to this sectionCâu hỏi thường gặp#
Link to this sectionCallback Ultralytics là gì và làm thế nào để sử dụng chúng?#
Callback 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, validation, xuất model và dự đoán. Các 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, giúp cải thiệ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 những đối tượng này, hãy tham khảo Phần tham chiếu.
Để 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(). Đâ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():
passLink to this sectionLàm thế nào tôi có thể tùy chỉnh quy trình huấn luyện Ultralytics bằng các callback?#
Tùy chỉnh quy trình huấn luyện Ultralytics của bạn bằng cách chèn logic tại các giai đoạn cụ thể của quy trình huấn luyện. Ultralytics YOLO cung cấp nhiều callback huấn luyện, chẳng hạn như on_train_start, on_train_end, và on_train_batch_end, cho phép bạn thêm các chỉ số, quá trình xử lý hoặc ghi log tùy chỉnh.
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ề việc sử dụng hiệu quả các callback huấn luyện, hãy xem Hướng dẫn huấn luyện.
Link to this sectionTại sao tôi nên sử dụng callback trong quá trình validation trong Ultralytics YOLO?#
Việc sử dụng callback trong quá trình validation trong Ultralytics YOLO giúp nâng cao khả năng đánh giá model bằng cách cho phép xử lý, ghi log hoặc tính toán chỉ số tùy chỉnh. Các callback như on_val_start, on_val_batch_end, và on_val_end cung cấp các điểm truy cập để chèn logic tùy chỉnh, đảm bảo quy trình validation 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 về việc tích hợp callback vào quy trình validation của bạn, hãy xem Hướng dẫn validation.
Link to this sectionLàm thế nào để đính kèm một callback tùy chỉnh cho chế độ dự đoán trong Ultralytics YOLO?#
Để đí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 callback dự đoán phổ biến bao gồm on_predict_start, on_predict_batch_end, và 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 log 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 = model("pedestrians.mp4", stream=True, save=True)
for results in results:
passĐể sử dụng toàn diện hơn, hãy tham khảo Hướng dẫn dự đoán, 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.
Link to this sectionMột số ví dụ thực tế về việc sử dụng callback trong Ultralytics YOLO là gì?#
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 log các chỉ số tùy chỉnh: Ghi log các chỉ số bổ sung ở các giai đoạn khác nhau, chẳng hạn như khi kết thúc huấn luyện hoặc epoch validation.
- Tăng cường dữ liệu: Triển khai các biến đổi hoặc tăng cường dữ liệu tùy chỉnh trong quá trình dự đoán hoặ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 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ụ.