Erweiterte Anpassung
Sowohl dieYOLO als auch die Python Ultralytics sind Abstraktionen auf hoher Ebene, die auf Basis-Engine-Executors aufbauen. Dieser Leitfaden konzentriert sich auf die Trainer
Motor und erklärt, wie Sie ihn an Ihre speziellen Bedürfnisse anpassen können.
Beobachten: Mastering Ultralytics YOLO : Erweiterte Anpassungen
BaseTrainer
Die BaseTrainer
Klasse bietet eine generische Trainingsroutine, die für verschiedene Aufgaben angepasst werden kann. Passen Sie sie an, indem Sie bestimmte Funktionen oder Operationen überschreiben und dabei die erforderlichen Formate einhalten. Integrieren Sie z. B. Ihr eigenes benutzerdefiniertes Modell und einen Datenlader, indem Sie diese Funktionen überschreiben:
get_model(cfg, weights)
: Erstellt das zu trainierende Modell.get_dataloader()
: Baut den Datenlader auf.
Weitere Einzelheiten und den Quellcode finden Sie in der BaseTrainer
Referenz.
DetectionTrainer
So wird das Ultralytics YOLO verwendet und angepasst DetectionTrainer
:
from ultralytics.models.yolo.detect import DetectionTrainer
trainer = DetectionTrainer(overrides={...})
trainer.train()
trained_model = trainer.best # Get the best model
Anpassen des DetectionTrainers
Um ein benutzerdefiniertes Erkennungsmodell zu trainieren, das nicht direkt unterstützt wird, überladen Sie die vorhandene 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()
Passen Sie den Trainer weiter an, indem Sie die Verlustfunktion ändern oder einen Callback hinzufügen, um das Modell alle 10 Epochen auf Google Drive hochzuladen. Hier ist ein Beispiel:
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()
Weitere Informationen zu Ereignissen und Einstiegspunkten, die Rückrufe auslösen, finden Sie in der Anleitung für Rückrufe.
Andere Motorkomponenten
Anpassen anderer Komponenten wie Validators
und Predictors
in ähnlicher Weise. Weitere Informationen finden Sie in der Dokumentation zu Prüfer und Prädiktoren.
Verwendung von YOLO mit benutzerdefinierten Trainern
Die YOLO
Modellklasse bietet einen High-Level-Wrapper für die Trainerklassen. Sie können diese Architektur für mehr Flexibilität in Ihren Workflows für maschinelles Lernen nutzen:
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)
Dieser Ansatz ermöglicht es Ihnen, die Einfachheit der YOLO beizubehalten und gleichzeitig den zugrunde liegenden Schulungsprozess an Ihre spezifischen Anforderungen anzupassen.
FAQ
Wie kann ich den Ultralytics YOLO DetectionTrainer für bestimmte Aufgaben anpassen?
Anpassen der DetectionTrainer
für bestimmte Aufgaben, indem Sie die Methoden überschreiben, um sie an Ihr benutzerdefiniertes Modell und Ihren Datenlader anzupassen. Beginnen Sie mit der Vererbung von DetectionTrainer
und umdefinieren Methoden wie get_model
um benutzerdefinierte 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 the best model
Für weitere Anpassungen, wie z.B. das Ändern der Verlustfunktion oder das Hinzufügen eines Rückrufs, lesen Sie bitte die Anleitung zu Rückrufen.
Was sind die Hauptkomponenten des BaseTrainer in Ultralytics YOLO?
Die BaseTrainer
dient als Grundlage für Trainingsroutinen, die durch Überschreiben der generischen Methoden für verschiedene Aufgaben angepasst werden können. Die wichtigsten Komponenten sind:
get_model(cfg, weights)
: Erstellt das zu trainierende Modell.get_dataloader()
: Baut den Datenlader auf.preprocess_batch()
: Erledigt die Stapelvorverarbeitung vor dem Vorwärtsdurchlauf des Modells.set_model_attributes()
: Legt Modellattribute auf der Grundlage von Datensatzinformationen fest.get_validator()
: Gibt einen Validator für die Modellbewertung zurück.
Weitere Einzelheiten zur Anpassung und zum Quellcode finden Sie in der BaseTrainer
Referenz.
Wie kann ich dem Ultralytics YOLO DetectionTrainer einen Rückruf hinzufügen?
Hinzufügen von Rückrufen zur Überwachung und Änderung des Trainingsprozesses in DetectionTrainer
. So fügen Sie einen Callback hinzu, 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 im Callback-Handbuch.
Warum sollte ich Ultralytics YOLO für die Modellschulung verwenden?
Ultralytics YOLO bietet eine hochgradige Abstraktion über leistungsstarke 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.
- Modularität: Die Komponenten können unabhängig voneinander geändert werden, ohne dass sich dies auf die gesamte Pipeline auswirkt.
- Integration: Nahtlose Zusammenarbeit mit gängigen Frameworks und Tools im ML-Ökosystem.
Erfahren Sie mehr über die Möglichkeiten von YOLO, indem Sie die wichtigsten Ultralytics YOLO Seite.
Kann ich den Ultralytics YOLO DetectionTrainer für nicht standardisierte Modelle verwenden?
Ja, die DetectionTrainer
ist sehr flexibel und anpassbar für nicht standardisierte Modelle. Vererben von DetectionTrainer
und Überladungsmethoden, 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()
Umfassende Anleitungen und Beispiele finden Sie in der DetectionTrainer
Referenz.