Ultralytics YOLO27:

Personalización avanzada#

Tanto la interfaz de línea de comandos de Ultralytics YOLO como las interfaces de Python son abstracciones de alto nivel construidas sobre ejecutores de motores base. Esta guía se centra en el motor Trainer, explicando cómo personalizarlo para tus necesidades específicas.



Watch: Mastering Ultralytics YOLO: Advanced Customization
Consejo

Para obtener ejemplos prácticos de personalizaciones comunes del recomendador de entrenamiento —métricas personalizadas, pérdida ponderada por clases, guardado de modelos, congelación del esqueleto y tasas de aprendizaje por capa—, consulta la guía Personalización del recomendador de entrenamiento.

BaseTrainer#

La clase BaseTrainer proporciona una rutina de entrenamiento genérica adaptable para varias tareas. Personalízala sobrescribiendo funciones u operaciones específicas mientras cumples con los formatos requeridos. Por ejemplo, integra tu propio modelo y cargador de datos personalizados sobrescribiendo estas funciones:

  • get_model(cfg, weights): Construye el modelo que se va a entrenar.
  • get_dataloader(): Construye el cargador de datos.

Para obtener más detalles y el código fuente, consulta la BaseTrainer Reference.

DetectionTrainer#

A continuación se muestra cómo usar y personalizar el componente DetectionTrainer de Ultralytics YOLO:

from ultralytics.models.yolo.detect import DetectionTrainer

trainer = DetectionTrainer(overrides={...})
trainer.train()
trained_model = trainer.best  # Get the best model

Personalización del DetectionTrainer#

Para entrenar un modelo de detección personalizado que no esté directamente compatible, sobrecarga la funcionalidad existente de get_model:

from ultralytics.models.yolo.detect import DetectionTrainer

class CustomTrainer(DetectionTrainer):
    def get_model(self, cfg=None, weights=None, verbose=True):
        """Loads a custom detection model given configuration and weight files."""

trainer = CustomTrainer(overrides={...})
trainer.train()

Personaliza aún más el recomendador de entrenamiento modificando la función de pérdida o añadiendo una función de retrollamada para subir el modelo a Google Drive cada 10 épocas. Aquí tienes un ejemplo:

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=None, weights=None, verbose=True):
        """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()

Para obtener más información sobre los eventos de activación de funciones de retrollamada y los puntos de entrada, consulta la Guía de funciones de retrollamada.

Otros componentes del motor#

Personaliza otros componentes como Validators y Predictors de manera similar. Para obtener más información, consulta la documentación para Validadores y Predictores.

Uso de YOLO con recomendadores de entrenamiento personalizados#

La clase de modelo YOLO proporciona un contenedor de alto nivel para las clases de recomendadores de entrenamiento. Puedes aprovechar esta arquitectura para obtener una mayor flexibilidad en tus flujos de trabajo de aprendizaje automático:

from ultralytics import YOLO
from ultralytics.models.yolo.detect import DetectionTrainer

# Create a custom trainer
class MyCustomTrainer(DetectionTrainer):
    def get_model(self, cfg=None, weights=None, verbose=True):
        """Custom code implementation."""

# Initialize YOLO model
model = YOLO("yolo26n.pt")

# Train with custom trainer
results = model.train(trainer=MyCustomTrainer, data="coco8.yaml", epochs=3)

Este enfoque te permite mantener la simplicidad de la interfaz de YOLO mientras personalizas el proceso de entrenamiento subyacente para adaptarlo a tus requisitos específicos.

Preguntas frecuentes#

  • Personaliza DetectionTrainer para tareas específicas sobrescribiendo sus métodos para adaptarlos a tu modelo y cargador de datos personalizados. Comienza heredando de DetectionTrainer y redefine métodos como get_model para implementar funcionalidades personalizadas. Aquí tienes un ejemplo:

    from ultralytics.models.yolo.detect import DetectionTrainer
    
    class CustomTrainer(DetectionTrainer):
        def get_model(self, cfg=None, weights=None, verbose=True):
            """Loads a custom detection model given configuration and weight files."""
    
    trainer = CustomTrainer(overrides={...})
    trainer.train()
    trained_model = trainer.best  # Get the best model

    Para una mayor personalización, como cambiar la función de pérdida o añadir una función de retrollamada, consulta la Guía de funciones de retrollamada.

  • El componente BaseTrainer sirve como base para las rutinas de entrenamiento, personalizable para varias tareas sobrescribiendo sus métodos genéricos. Los componentes clave incluyen:

    • get_model(cfg, weights): Construye el modelo que se va a entrenar.
    • get_dataloader(): Construye el cargador de datos.
    • preprocess_batch(): Gestiona el preprocesamiento de lotes antes de la pasada hacia adelante del modelo.
    • set_model_attributes(): Establece los atributos del modelo basándose en la información del conjunto de datos.
    • get_validator(): Devuelve un validador para la evaluación del modelo.

    Para obtener más detalles sobre la personalización y el código fuente, consulta la BaseTrainer Reference.

  • Añade funciones de retrollamada para supervisar y modificar el proceso de entrenamiento en DetectionTrainer. Así es como se añade una función de retrollamada para registrar los pesos del modelo después de cada época de entrenamiento:

    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()

    Para obtener más detalles sobre los eventos de funciones de retrollamada y los puntos de entrada, consulta la Guía de funciones de retrollamada.

  • Ultralytics YOLO proporciona una abstracción de alto nivel sobre potentes ejecutores de motores, lo que lo hace ideal para el desarrollo rápido y la personalización. Los beneficios clave incluyen:

    • Facilidad de uso: Tanto la interfaz de línea de comandos como las de Python simplifican las tareas complejas.
    • Rendimiento: Optimizado para la detección de objetos en tiempo real y diversas aplicaciones de visión por inteligencia artificial.
    • Personalización: Fácilmente ampliable para modelos personalizados, funciones de pérdida y cargadores de datos.
    • Modularidad: Los componentes se pueden modificar de forma independiente sin afectar a toda la canalización.
    • Integración: Funciona sin problemas con marcos y herramientas populares en el ecosistema de aprendizaje automático.

    Obtén más información sobre las capacidades de YOLO explorando la página principal de Ultralytics YOLO.

  • Sí, el componente DetectionTrainer es altamente flexible y personalizable para modelos no estándar. Hereda de DetectionTrainer y sobrecarga los métodos para satisfacer las necesidades de tu modelo específico. Aquí tienes un ejemplo sencillo:

    from ultralytics.models.yolo.detect import DetectionTrainer
    
    class CustomDetectionTrainer(DetectionTrainer):
        def get_model(self, cfg=None, weights=None, verbose=True):
            """Loads a custom detection model."""
    
    trainer = CustomDetectionTrainer(overrides={...})
    trainer.train()

    Para obtener instrucciones y ejemplos completos, revisa la DetectionTrainer Reference.

Comentarios