Erweiterte Anpassung
Sowohl die Kommandozeilenschnittstelle Ultralytics YOLO als auch die Schnittstelle Python sind lediglich eine Abstraktion der Basis-Engine-Executors auf hoher Ebene. Werfen wir einen Blick auf die Trainer-Engine.
Beobachten: Mastering Ultralytics YOLO : Erweiterte Anpassungen
BaseTrainer
BaseTrainer enthält die generische Trainingsroutine. Er kann für jede Aufgabe angepasst werden, indem die erforderlichen Funktionen oder Operationen überschrieben werden, solange die korrekten Formate eingehalten werden. So können Sie beispielsweise Ihr eigenes benutzerdefiniertes Modell und Ihren eigenen Datenlader unterstützen, indem Sie diese Funktionen einfach überschreiben:
get_model(cfg, weights)
- Die Funktion, die das zu trainierende Modell erstelltget_dataloader()
- Die Funktion, die den Dataloader aufbaut Weitere Details und Quellcode finden Sie inBaseTrainer
Referenz
DetectionTrainer
Hier erfahren Sie, wie Sie die YOLO11 DetectionTrainer
und passen Sie es an.
from ultralytics.models.yolo.detect import DetectionTrainer
trainer = DetectionTrainer(overrides={...})
trainer.train()
trained_model = trainer.best # get best model
Anpassen des DetectionTrainers
Wir passen den Trainer an um ein benutzerdefiniertes Erkennungsmodell zu trainieren die nicht direkt unterstützt wird. Sie können dies tun, indem Sie einfach die bestehende Methode get_model
Funktionalität:
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()
Sie erkennen nun, dass Sie den Trainer weiter anpassen müssen:
- Anpassen der
loss function
. - hinzufügen
callback
die nach jeweils 10 Minuten ein Modell auf Ihr Google Laufwerk hochlädt.epochs
So können Sie es tun:
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 callback
trainer.train()
Wenn Sie mehr über Callback-Ereignisse und den Einstiegspunkt wissen möchten, lesen Sie unseren Callback-Leitfaden
Andere Motorkomponenten
Es gibt weitere Komponenten, die in ähnlicher Weise angepasst werden können, wie Validators
und Predictors
. Weitere Informationen hierzu finden Sie im Abschnitt Referenz.
FAQ
Wie kann ich den Ultralytics YOLO11 DetectionTrainer für bestimmte Aufgaben anpassen?
Zum Anpassen der Ultralytics YOLO11 DetectionTrainer
für eine bestimmte Aufgabe, können Sie seine Methoden überschreiben, um sie an Ihr benutzerdefiniertes Modell und Ihren Datenlader anzupassen. Beginnen Sie mit der Vererbung von DetectionTrainer
und definieren Sie dann Methoden wie get_model
um Ihre benutzerdefinierten Funktionalitäten zu implementieren. Hier ist ein Beispiel:
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 best model
Für weitere Anpassungen wie das Ändern der loss function
oder das Hinzufügen einer callback
können Sie auf unser Rückrufe Leitfaden.
Was sind die wichtigsten Komponenten des BaseTrainers in Ultralytics YOLO11 ?
Die BaseTrainer
in Ultralytics YOLO11 dient als Grundlage für Trainingsroutinen und kann für verschiedene Aufgaben angepasst werden, indem seine generischen Methoden überschrieben werden. Zu den wichtigsten Komponenten gehören:
get_model(cfg, weights)
um das zu trainierende Modell zu erstellen.get_dataloader()
um den Datenlader zu erstellen.
Weitere Einzelheiten über die Anpassung und den Quellcode finden Sie in der BaseTrainer
Referenz.
Wie kann ich dem Ultralytics YOLO11 DetectionTrainer einen Callback hinzufügen?
Sie können Rückrufe hinzufügen, um den Trainingsprozess zu überwachen und zu ändern in Ultralytics YOLO11 DetectionTrainer
. So können Sie zum Beispiel einen Callback hinzufügen, um die Modellgewichte nach jedem Training zu protokollieren Epoche:
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()
Weitere Einzelheiten zu Callback-Ereignissen und Einstiegspunkten finden Sie in unserem Callback-Leitfaden.
Warum sollte ich Ultralytics YOLO11 für das Modelltraining verwenden?
Ultralytics YOLO11 bietet eine hochgradige Abstraktion von leistungsstarken Engine Executors und ist damit ideal für eine schnelle Entwicklung und Anpassung. Die wichtigsten Vorteile sind:
- Benutzerfreundlichkeit: Sowohl die Befehlszeilen- als auch die Python -Schnittstelle vereinfachen komplexe Aufgaben.
- Leistung: Optimiert für Echtzeit-Objekterkennung und verschiedene KI-Anwendungen.
- Anpassungen: Leicht erweiterbar für benutzerdefinierte Modelle, Verlustfunktionen und Dataloader.
Weitere Informationen über die Möglichkeiten von YOLO11 finden Sie unter Ultralytics YOLO.
Kann ich den Ultralytics YOLO11 DetectionTrainer auch für nicht standardisierte Modelle verwenden?
Ja, Ultralytics YOLO11 DetectionTrainer
ist sehr flexibel und kann für nicht standardisierte Modelle angepasst werden. Durch Vererbung von DetectionTrainer
können Sie verschiedene Methoden überladen, um die Bedürfnisse Ihres spezifischen Modells zu unterstützen. Hier ist ein einfaches Beispiel:
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()
Ausführlichere Anweisungen und Beispiele finden Sie in der DetectionTrainer-Dokumentation.