Personalización avanzada#
Las interfaces de línea de comandos y Python de Ultralytics YOLO son abstracciones de alto nivel basadas en ejecutores del motor base. Esta guía se centra en el motor Trainer y explica cómo personalizarlo según tus necesidades.
Ver: Domina Ultralytics YOLO: personalización avanzada
Para ver ejemplos prácticos de personalizaciones habituales del entrenador —métricas personalizadas, pérdida ponderada por clase, guardado de modelos, congelación del backbone y tasas de aprendizaje por capa—, consulta la guía Personalización del entrenador.
BaseTrainer#
La clase BaseTrainer proporciona una rutina de entrenamiento genérica que se adapta a distintas tareas. Personalízala sobrescribiendo funciones u operaciones específicas y respetando los formatos requeridos. Por ejemplo, integra tu propio modelo y cargador de datos sobrescribiendo estas funciones:
get_model(cfg, weights): crea el modelo que se va a entrenar.get_dataloader(dataset_path, batch_size, rank, mode): crea el cargador de datos.
Para obtener más información y consultar el código fuente, visita la referencia de BaseTrainer.
DetectionTrainer#
Así se usa y personaliza DetectionTrainer de Ultralytics YOLO:
from ultralytics.models.yolo.detect import DetectionTrainer
trainer = DetectionTrainer(overrides={...})
trainer.train()
trained_model = trainer.best # Obtén el mejor modeloPersonalización de DetectionTrainer#
Para entrenar un modelo de detección personalizado que no sea compatible directamente, amplía 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 entrenador modificando la función de pérdida o añadiendo una devolución de llamada que se ejecute al final de cada época, por ejemplo, para registrar o subir los pesos más recientes. 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 a custom loss function for the model."""
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(...)
# Devolución de llamada para registrar los pesos del modelo
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) # Se añade a las devoluciones de llamada existentes
trainer.train()Para obtener más información sobre los eventos que activan las devoluciones de llamada y sus puntos de entrada, consulta la guía de devoluciones de llamada.
Otros componentes del motor#
Personaliza otros componentes, como Validators y Predictors, de forma similar. Para obtener más información, consulta la documentación de validadores y predictores.
Uso de YOLO con entrenadores personalizados#
La clase de modelo YOLO proporciona una envoltura de alto nivel para las clases Trainer. Puedes aprovechar esta arquitectura para lograr una mayor flexibilidad en tus flujos de trabajo de aprendizaje automático:
from ultralytics import YOLO
from ultralytics.models.yolo.detect import DetectionTrainer
# Crea un entrenador personalizado
class MyCustomTrainer(DetectionTrainer):
def get_model(self, cfg=None, weights=None, verbose=True):
"""Custom code implementation."""
# Inicializa el modelo YOLO
model = YOLO("yolo26n.pt")
# Entrena con un entrenador personalizado
results = model.train(trainer=MyCustomTrainer, data="coco8.yaml", epochs=3)Este enfoque te permite mantener la sencillez de la interfaz de YOLO y, al mismo tiempo, personalizar el proceso de entrenamiento subyacente según tus necesidades específicas.
Preguntas frecuentes#
Personaliza
DetectionTrainerpara tareas específicas sobrescribiendo sus métodos y adaptándolos a tu modelo y cargador de datos personalizados. Empieza heredando deDetectionTrainery redefiniendo métodos comoget_modelpara 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 # Obtén el mejor modeloPara realizar otras personalizaciones, como cambiar la función de pérdida o añadir una devolución de llamada, consulta la guía de devoluciones de llamada.
BaseTraineres la base de las rutinas de entrenamiento y se puede personalizar para distintas tareas sobrescribiendo sus métodos genéricos. Entre sus componentes principales se incluyen:get_model(cfg, weights): crea el modelo que se va a entrenar.get_dataloader(dataset_path, batch_size, rank, mode): crea el cargador de datos.preprocess_batch(): gestiona el preprocesamiento de lotes antes de la pasada hacia delante del modelo.set_model_attributes(): establece los atributos del modelo según la información del conjunto de datos.get_validator(): devuelve un validador para evaluar el modelo.
Para obtener más información sobre la personalización y consultar el código fuente, visita la referencia de
BaseTrainer.Añade devoluciones de llamada para supervisar y modificar el proceso de entrenamiento en
DetectionTrainer. Así puedes añadir una devolución de llamada para registrar los pesos del modelo después de cada época de entrenamiento:from ultralytics.models.yolo.detect import DetectionTrainer # Devolución de llamada para registrar los pesos del modelo 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) # Se añade a las devoluciones de llamada existentes trainer.train()Para obtener más información sobre los eventos y puntos de entrada de las devoluciones de llamada, consulta la guía de devoluciones de llamada.
Ultralytics YOLO ofrece una abstracción de alto nivel sobre potentes ejecutores del motor, por lo que es ideal para el desarrollo y la personalización rápidos. Entre sus ventajas principales se incluyen:
- Facilidad de uso: las interfaces de línea de comandos y Python simplifican las tareas complejas.
- Rendimiento: optimizado para la detección de objetos en tiempo real y distintas aplicaciones de IA visual.
- Personalización: fácil de ampliar con modelos, funciones de pérdida y cargadores de datos personalizados.
- Modularidad: puedes modificar los componentes de forma independiente sin afectar a todo el flujo de procesamiento.
- Integración: funciona a la perfección con marcos de trabajo y herramientas populares del ecosistema de aprendizaje automático.
Descubre más sobre las capacidades de YOLO en la página principal de Ultralytics YOLO.
Sí,
DetectionTraineres muy flexible y se puede personalizar para modelos no estándar. Hereda deDetectionTrainery amplía los métodos para adaptarlos a las necesidades específicas de tu modelo. 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 consultar instrucciones y ejemplos detallados, revisa la referencia de
DetectionTrainer.