Zum Inhalt springen

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.

📅 Erstellt vor 1 Jahr ✏️ Aktualisiert vor 5 Tagen

Kommentare