Tùy chỉnh nâng cao
Cả giao diện dòng lệnh Ultralytics YOLO và Python đều là các trừu tượng cấp cao được xây dựng dựa trên các trình thực thi công cụ cơ bản. Hướng dẫn này tập trung vào Trainer
engine, giải thích cách tùy chỉnh nó cho các nhu cầu cụ thể của bạn.
Xem: Làm chủ Ultralytics YOLO: Tùy chỉnh nâng cao
BaseTrainer
Hàm BaseTrainer
class cung cấp một quy trình huấn luyện chung có thể điều chỉnh cho các tác vụ khác nhau. Tùy chỉnh nó bằng cách ghi đè các hàm hoặc thao tác cụ thể trong khi tuân thủ các định dạng bắt buộc. Ví dụ: tích hợp mô hình và bộ tải dữ liệu tùy chỉnh của riêng bạn bằng cách ghi đè các hàm này:
get_model(cfg, weights)
: Xây dựng mô hình để huấn luyện.get_dataloader()
: Xây dựng dataloader.
Để biết thêm chi tiết và mã nguồn, hãy xem BaseTrainer
Tham khảo.
DetectionTrainer
Đây là cách sử dụng và tùy chỉnh Ultralytics YOLO DetectionTrainer
:
from ultralytics.models.yolo.detect import DetectionTrainer
trainer = DetectionTrainer(overrides={...})
trainer.train()
trained_model = trainer.best # Get the best model
Tùy chỉnh DetectionTrainer
Để huấn luyện một mô hình detection tùy chỉnh không được hỗ trợ trực tiếp, hãy overload mô hình hiện có get_model
hiện có:
from ultralytics.models.yolo.detect import DetectionTrainer
class CustomTrainer(DetectionTrainer):
def get_model(self, cfg, weights):
"""Loads a custom detection model given configuration and weight files."""
...
trainer = CustomTrainer(overrides={...})
trainer.train()
Tùy chỉnh thêm trình huấn luyện bằng cách sửa đổi hàm mất mát (loss function) hoặc thêm callback để tải mô hình lên Google Drive sau mỗi 10 epochs. Đây là một ví dụ:
from ultralytics.models.yolo.detect import DetectionTrainer
from ultralytics.nn.tasks import DetectionModel
class MyCustomModel(DetectionModel):
def init_criterion(self):
"""Initializes the loss function and adds a callback for uploading the model to Google Drive every 10 epochs."""
...
class CustomTrainer(DetectionTrainer):
def get_model(self, cfg, weights):
"""Returns a customized detection model instance configured with specified config and weights."""
return MyCustomModel(...)
# Callback to upload model weights
def log_model(trainer):
"""Logs the path of the last model weight used by the trainer."""
last_weight_path = trainer.last
print(last_weight_path)
trainer = CustomTrainer(overrides={...})
trainer.add_callback("on_train_epoch_end", log_model) # Adds to existing callbacks
trainer.train()
Để biết thêm thông tin về các sự kiện kích hoạt callback và điểm vào, hãy xem Hướng dẫn Callbacks.
Các Thành Phần Engine Khác
Tùy chỉnh các thành phần khác như Validators
và Predictors
tương tự. Để biết thêm thông tin, hãy tham khảo tài liệu về Validators (Trình xác thực) và Bộ dự đoán.
Sử dụng YOLO với Custom Trainers
Hàm YOLO
model class cung cấp một trình bao cấp cao cho các Trainer class. Bạn có thể tận dụng kiến trúc này để linh hoạt hơn trong quy trình làm việc học máy của mình:
from ultralytics import YOLO
from ultralytics.models.yolo.detect import DetectionTrainer
# Create a custom trainer
class MyCustomTrainer(DetectionTrainer):
def get_model(self, cfg, weights):
"""Custom code implementation."""
...
# Initialize YOLO model
model = YOLO("yolo11n.pt")
# Train with custom trainer
results = model.train(trainer=MyCustomTrainer, data="coco8.yaml", epochs=3)
Phương pháp này cho phép bạn duy trì sự đơn giản của giao diện YOLO, đồng thời tùy chỉnh quy trình huấn luyện cơ bản để phù hợp với các yêu cầu cụ thể của bạn.
Câu hỏi thường gặp
Làm cách nào để tùy chỉnh Ultralytics YOLO DetectionTrainer cho các tác vụ cụ thể?
Tùy chỉnh DetectionTrainer
cho các tác vụ cụ thể bằng cách ghi đè các phương thức của nó để thích ứng với mô hình và bộ tải dữ liệu tùy chỉnh của bạn. Bắt đầu bằng cách kế thừa từ DetectionTrainer
và định nghĩa lại các phương thức như get_model
để triển khai các chức năng tùy chỉnh. Đây là một ví dụ:
from ultralytics.models.yolo.detect import DetectionTrainer
class CustomTrainer(DetectionTrainer):
def get_model(self, cfg, weights):
"""Loads a custom detection model given configuration and weight files."""
...
trainer = CustomTrainer(overrides={...})
trainer.train()
trained_model = trainer.best # Get the best model
Để tùy chỉnh sâu hơn, chẳng hạn như thay đổi hàm mất mát hoặc thêm callback, hãy tham khảo Hướng dẫn Callbacks.
Các thành phần chính của BaseTrainer trong Ultralytics YOLO là gì?
Hàm BaseTrainer
đóng vai trò là nền tảng cho các quy trình huấn luyện, có thể tùy chỉnh cho các tác vụ khác nhau bằng cách ghi đè các phương thức chung của nó. Các thành phần chính bao gồm:
get_model(cfg, weights)
: Xây dựng mô hình để huấn luyện.get_dataloader()
: Xây dựng dataloader.preprocess_batch()
: Xử lý tiền xử lý hàng loạt trước khi chuyển tiếp mô hình.set_model_attributes()
: Đặt các thuộc tính của mô hình dựa trên thông tin bộ dữ liệu.get_validator()
: Trả về một trình xác thực để đánh giá mô hình.
Để biết thêm chi tiết về tùy chỉnh và mã nguồn, hãy xem BaseTrainer
Tham khảo.
Làm cách nào để thêm callback vào Ultralytics YOLO DetectionTrainer?
Thêm các callback để theo dõi và sửa đổi quá trình huấn luyện trong DetectionTrainer
. Dưới đây là cách thêm lệnh gọi lại để ghi lại trọng số mô hình sau mỗi lần đào tạo epoch:
from ultralytics.models.yolo.detect import DetectionTrainer
# Callback to upload model weights
def log_model(trainer):
"""Logs the path of the last model weight used by the trainer."""
last_weight_path = trainer.last
print(last_weight_path)
trainer = DetectionTrainer(overrides={...})
trainer.add_callback("on_train_epoch_end", log_model) # Adds to existing callbacks
trainer.train()
Để biết thêm chi tiết về các sự kiện callback và điểm vào, hãy tham khảo Hướng dẫn Callbacks.
Tại sao tôi nên sử dụng Ultralytics YOLO để huấn luyện mô hình?
Ultralytics YOLO cung cấp một lớp trừu tượng cấp cao trên các trình thực thi engine mạnh mẽ, khiến nó trở nên lý tưởng cho việc phát triển và tùy chỉnh nhanh chóng. Các lợi ích chính bao gồm:
- Dễ sử dụng: Cả giao diện dòng lệnh và Python đều đơn giản hóa các tác vụ phức tạp.
- Hiệu suất: Được tối ưu hóa cho phát hiện đối tượng theo thời gian thực và các ứng dụng AI thị giác khác nhau.
- Tùy chỉnh: Dễ dàng mở rộng cho các mô hình tùy chỉnh, hàm mất mát và trình tải dữ liệu.
- Tính mô-đun: Các thành phần có thể được sửa đổi độc lập mà không ảnh hưởng đến toàn bộ quy trình.
- Tích hợp: Hoạt động liền mạch với các framework và công cụ phổ biến trong hệ sinh thái ML.
Tìm hiểu thêm về khả năng của YOLO bằng cách khám phá trang Ultralytics YOLO chính.
Tôi có thể sử dụng Ultralytics YOLO DetectionTrainer cho các mô hình không tiêu chuẩn không?
Có, trình DetectionTrainer
có tính linh hoạt cao và có thể tùy chỉnh cho các mô hình không chuẩn. Kế thừa từ DetectionTrainer
và ghi đè các phương thức để hỗ trợ các nhu cầu cụ thể của mô hình của bạn. Dưới đây là một ví dụ đơn giản:
from ultralytics.models.yolo.detect import DetectionTrainer
class CustomDetectionTrainer(DetectionTrainer):
def get_model(self, cfg, weights):
"""Loads a custom detection model."""
...
trainer = CustomDetectionTrainer(overrides={...})
trainer.train()
Để có hướng dẫn và ví dụ toàn diện, hãy xem lại DetectionTrainer
Tham khảo.