Ultralytics YOLO27:

Buenas prácticas y consejos de aprendizaje automático para entrenar modelos#

Introducción#

Uno de los pasos más importantes al trabajar en un proyecto de visión por ordenador es entrenar el modelo. Antes de llegar a este punto, tienes que definir tus objetivos y recopilar y anotar tus datos. Después de preprocesar los datos para asegurarte de que estén limpios y sean coherentes, puedes pasar a entrenar tu modelo.

El entrenamiento del modelo es el proceso de enseñar a tu modelo a reconocer patrones visuales y hacer predicciones a partir de tus datos, y determina directamente la precisión de tu aplicación. En esta guía se explican las buenas prácticas, las técnicas de optimización y los consejos para solucionar problemas que te ayudarán a entrenar tus modelos de visión por ordenador de forma eficaz.



Watch: Model Training Tips | How to Handle Large Datasets | Batch Size, GPU Utilization and Mixed Precision

Cómo entrenar un modelo de aprendizaje automático#

Un modelo de visión por ordenador se entrena ajustando sus parámetros internos para minimizar los errores. Inicialmente, el modelo recibe un gran conjunto de imágenes etiquetadas. Hace predicciones sobre el contenido de estas imágenes y las predicciones se comparan con las etiquetas o el contenido reales para calcular los errores. Estos errores muestran cuánto se alejan las predicciones del modelo de los valores verdaderos.

Durante el entrenamiento, el modelo realiza predicciones de forma iterativa, calcula los errores y actualiza sus parámetros mediante un proceso llamado retropropagación. En este proceso, el modelo ajusta sus parámetros internos (pesos y sesgos) para reducir los errores. Al repetir este ciclo muchas veces, el modelo mejora gradualmente su precisión. Con el tiempo, aprende a reconocer patrones complejos, como formas, colores y texturas.

What is Backpropagation?

Este proceso de aprendizaje permite que el modelo de visión por ordenador realice diversas tareas, como la detección de objetos, la segmentación de instancias, la segmentación semántica y la clasificación de imágenes. El objetivo final es crear un modelo capaz de generalizar lo aprendido a imágenes nuevas que no haya visto, para comprender con precisión los datos visuales en aplicaciones del mundo real.

Ahora que sabemos qué ocurre entre bastidores cuando entrenamos un modelo, veamos los aspectos que debes tener en cuenta al entrenarlo.

Entrenamiento con conjuntos de datos grandes#

Hay varios aspectos que debes tener en cuenta cuando planeas utilizar un conjunto de datos grande para entrenar un modelo. Por ejemplo, puedes ajustar el tamaño del lote, controlar la utilización de la GPU o elegir el entrenamiento multiescala, entre otras opciones. Veamos cada una de estas opciones en detalle.

Tamaño del lote y utilización de la GPU#

Al entrenar modelos con conjuntos de datos grandes, es fundamental utilizar la GPU de forma eficiente. El tamaño del lote es un factor importante. Es el número de muestras de datos que un modelo de aprendizaje automático procesa en una sola iteración de entrenamiento. Si utilizas el tamaño de lote máximo que admite tu GPU, puedes aprovechar al máximo sus capacidades y reducir el tiempo que tarda el entrenamiento del modelo. Sin embargo, debes evitar quedarte sin memoria de la GPU. Si encuentras errores de memoria, reduce el tamaño del lote gradualmente hasta que el modelo se entrene sin problemas.



Watch: How to Use Batch Inference with Ultralytics YOLO26 | Speed Up Object Detection in Python 🎉

Con YOLO26, puedes establecer el parámetro batch en los argumentos del modo Train para adaptarlo a la capacidad de tu GPU. En un único acelerador, batch=-1 perfila el modelo y elige un tamaño de lote dirigido a una utilización de memoria aproximada del 60 %; una fracción como batch=0.70 establece un porcentaje diferente. Las ejecuciones con varias GPU requieren un tamaño de lote global explícito que sea múltiplo del número de dispositivos. En CPU y Apple silicon, AutoBatch muestra una advertencia y recurre a batch=16.

Entrenamiento con subconjuntos#

El entrenamiento con subconjuntos es una estrategia inteligente que consiste en entrenar el modelo con un conjunto de datos más pequeño que represente al conjunto de datos grande. Puede ahorrar tiempo y recursos, especialmente durante el desarrollo y las pruebas iniciales del modelo. Si tienes poco tiempo o estás experimentando con distintas configuraciones del modelo, el entrenamiento con subconjuntos es una buena opción.

En YOLO26, puedes implementar fácilmente el entrenamiento con subconjuntos mediante el parámetro fraction. Utiliza una proporción como fraction=0.1 para el 10 % de los datos de entrenamiento, un entero como fraction=300 para exactamente 300 imágenes de entrenamiento o una lista [train, val, test] como fraction=[300, 100, 0] para limitar cada división y omitir las imágenes de prueba. Las listas de dos elementos, como [300, 100], mantienen completa la división de prueba. Los conjuntos de datos NDJSON seleccionan registros espaciados uniformemente antes de descargarlos, por lo que las ejecuciones repetidas reutilizan exactamente el mismo subconjunto. Esta técnica permite iterar y ajustar rápidamente el modelo antes de comprometerte con el conjunto de datos completo.

Entrenamiento multiescala#

El entrenamiento multiescala es una técnica que mejora la capacidad de generalización de tu modelo al entrenarlo con imágenes de distintos tamaños. Tu modelo puede aprender a detectar objetos a diferentes escalas y distancias y volverse más robusto.

Por ejemplo, al entrenar YOLO26, puedes activar el aumento de escala estableciendo el parámetro scale. Este parámetro ajusta el tamaño de las imágenes de entrenamiento mediante un factor especificado, simulando objetos a distintas distancias. Por ejemplo, establecer scale=0.5 aplica aleatoriamente un zoom a las imágenes de entrenamiento con un factor entre 0.5 y 1.5 durante el entrenamiento. Configurar este parámetro permite que tu modelo trabaje con una variedad de escalas de imagen y mejore su capacidad de detección con objetos de distintos tamaños y en diferentes situaciones.

Ultralytics también admite el entrenamiento multiescala basado en el tamaño de imagen mediante el parámetro multi_scale. A diferencia de scale, que aplica zoom a las imágenes y después las rellena o recorta hasta imgsz, multi_scale cambia imgsz en cada lote (redondeado al stride del modelo). Por ejemplo, con imgsz=640 y multi_scale=0.25, el tamaño de entrenamiento se selecciona entre 480 y 800 en pasos de stride (por ejemplo, 480, 512, 544, ..., 800), mientras que multi_scale=0.0 mantiene un tamaño fijo.

Almacenamiento en caché#

El almacenamiento en caché es una técnica importante para mejorar la eficiencia del entrenamiento de modelos de aprendizaje automático. Al guardar las imágenes preprocesadas en la memoria, el almacenamiento en caché reduce el tiempo que la GPU pasa esperando a que se carguen los datos desde el disco. El modelo puede recibir datos continuamente sin retrasos causados por las operaciones de E/S del disco.

El almacenamiento en caché se puede controlar al entrenar YOLO26 mediante el parámetro cache:

  • cache=True: Guarda las imágenes del conjunto de datos en la RAM, lo que proporciona la mayor velocidad de acceso, pero aumenta el uso de memoria.
  • cache='disk': Guarda las imágenes en el disco; es más lento que la RAM, pero más rápido que cargar datos nuevos cada vez.
  • cache=False: Desactiva el almacenamiento en caché y depende completamente de la E/S del disco, por lo que es la opción más lenta.

Entrenamiento con precisión mixta#

El entrenamiento con precisión mixta utiliza tipos de coma flotante de 16 bits (FP16) y 32 bits (FP32). Aprovecha las ventajas de ambos: utiliza FP16 para realizar cálculos más rápidos y FP32 para mantener la precisión cuando sea necesario. La mayoría de las operaciones de la red neuronal se realizan en FP16 para beneficiarse de un cálculo más rápido y un menor uso de memoria. Sin embargo, se conserva una copia maestra de los pesos del modelo en FP32 para garantizar la precisión durante los pasos de actualización de los pesos. Así puedes trabajar con modelos o tamaños de lote más grandes dentro de las mismas limitaciones de hardware.

Mixed precision FP16 training benefits

Para implementar el entrenamiento con precisión mixta, tendrás que modificar tus scripts de entrenamiento y asegurarte de que tu hardware (como las GPU) lo admita. Muchos frameworks modernos de aprendizaje profundo, como PyTorch y TensorFlow, ofrecen compatibilidad integrada con la precisión mixta.

El entrenamiento con precisión mixta es sencillo al trabajar con YOLO26: AMP ya está activado de forma predeterminada (amp=True). En una GPU CUDA, YOLO realiza una comprobación única de las capacidades al inicio del entrenamiento y recurre a FP32 completo si falla; en CPU y Apple silicon, AMP se omite por completo. Establece amp=False para forzar FP32.

Pesos preentrenados#

Utilizar pesos preentrenados es una forma inteligente de acelerar el proceso de entrenamiento de tu modelo. Los pesos preentrenados proceden de modelos que ya se han entrenado con conjuntos de datos grandes, lo que proporciona a tu modelo una ventaja inicial. El aprendizaje por transferencia adapta modelos preentrenados a tareas nuevas relacionadas. Ajustar un modelo preentrenado consiste en empezar con esos pesos y continuar después el entrenamiento con tu conjunto de datos específico. Este método produce tiempos de entrenamiento más rápidos y, a menudo, un mejor rendimiento, porque el modelo parte de una comprensión sólida de las características básicas.

Los pesos preentrenados proceden del argumento model, por lo que model=yolo26n.pt ya parte de pesos de COCO. El parámetro pretrained controla si esos pesos se conservan (True, de forma predeterminada), se descartan (False) o se sustituyen por otro checkpoint (pretrained=path/to/best.pt). Establecer pretrained=True en un modelo *.yaml no descarga pesos por sí solo. Consulta Cómo ajustar YOLO con un conjunto de datos personalizado para conocer el flujo de trabajo completo del aprendizaje por transferencia.

Otras técnicas que debes tener en cuenta al trabajar con un conjunto de datos grande#

Hay un par de técnicas adicionales que debes tener en cuenta al trabajar con un conjunto de datos grande:

  • Programadores de la tasa de aprendizaje: Implementar programadores de la tasa de aprendizaje ajusta dinámicamente la tasa de aprendizaje durante el entrenamiento. Una tasa de aprendizaje bien ajustada puede evitar que el modelo sobrepase los mínimos y mejorar la estabilidad. Al entrenar YOLO26, el parámetro lrf ayuda a gestionar la programación de la tasa de aprendizaje estableciendo la tasa de aprendizaje final como una fracción de la inicial. Para comportamientos que no expone ningún argumento, como las tasas de aprendizaje por capa o el recorte de gradientes, crea una subclase del entrenador.
  • Entrenamiento distribuido: Para trabajar con conjuntos de datos grandes, el entrenamiento distribuido puede marcar una gran diferencia. Puedes reducir el tiempo de entrenamiento repartiendo la carga de trabajo entre varias GPU o máquinas. Este enfoque es especialmente valioso para proyectos a escala empresarial con importantes recursos computacionales.
  • Formato de memoria de canales al final: el entrenamiento con CUDA utiliza automáticamente el diseño de memoria NHWC más rápido en PyTorch 1.11 y versiones posteriores, excepto en Windows, donde se midió que es más lento. Configura channels_last=True para forzarlo o channels_last=False para mantener NCHW; PyTorch 1.10 y versiones anteriores, la CPU y MPS siguen usando NCHW de forma predeterminada.

Número de épocas de entrenamiento#

Al entrenar un modelo, una época es un recorrido completo por todo el conjunto de datos de entrenamiento. Durante una época, el modelo procesa cada ejemplo del conjunto de entrenamiento una vez y actualiza sus parámetros según el algoritmo de aprendizaje. Normalmente se necesitan varias épocas para que el modelo aprenda y refine sus parámetros con el tiempo.

Una pregunta habitual es cómo determinar el número de épocas durante las que se debe entrenar el modelo. Un buen punto de partida son 300 épocas. Si el modelo empieza a sobreajustarse pronto, puedes reducir el número de épocas. Si no se produce sobreajuste después de 300 épocas, puedes ampliar el entrenamiento a 600, 1200 o más épocas.

Sin embargo, el número ideal de épocas puede variar en función del tamaño de tu conjunto de datos y de los objetivos del proyecto. Los conjuntos de datos grandes pueden requerir más épocas para que el modelo aprenda eficazmente, mientras que los conjuntos más pequeños pueden necesitar menos épocas para evitar el sobreajuste. Con YOLO26, puedes establecer el parámetro epochs en tu script de entrenamiento.

Detención temprana#

La detención temprana es una técnica útil para optimizar el entrenamiento del modelo. Al supervisar el rendimiento en validación, puedes detener el entrenamiento cuando el modelo deje de mejorar. Así puedes ahorrar recursos computacionales y evitar el sobreajuste.

El proceso consiste en establecer un parámetro de paciencia que determina cuántas épocas se deben esperar para que mejore alguna métrica de validación antes de detener el entrenamiento. Si el rendimiento del modelo no mejora durante esas épocas, el entrenamiento se detiene para evitar malgastar tiempo y recursos.

Early stopping to prevent model overfitting

En YOLO26, puedes activar la detención temprana estableciendo el parámetro de paciencia en la configuración del entrenamiento. Por ejemplo, patience=5 significa que el entrenamiento se detendrá si no hay ninguna mejora en las métricas de validación durante 5 épocas consecutivas. Este método garantiza que el proceso de entrenamiento siga siendo eficiente y alcance un rendimiento óptimo sin un coste computacional excesivo.

Elegir entre el entrenamiento en la nube y el entrenamiento local#

Hay dos opciones para entrenar tu modelo: el entrenamiento en la nube y el entrenamiento local.

El entrenamiento en la nube ofrece escalabilidad y hardware potente, por lo que es ideal para trabajar con conjuntos de datos grandes y modelos complejos. Plataformas como Google Cloud, AWS y Azure proporcionan acceso bajo demanda a GPU y TPU de alto rendimiento, lo que acelera los tiempos de entrenamiento y permite experimentar con modelos más grandes. Sin embargo, el entrenamiento en la nube puede ser caro, especialmente durante periodos prolongados, y la transferencia de datos puede aumentar los costes y la latencia.

El entrenamiento local proporciona un mayor control y personalización, ya que te permite adaptar el entorno a tus necesidades específicas y evitar los costes recurrentes de la nube. Puede resultar más económico para proyectos a largo plazo y, como tus datos permanecen en tus instalaciones, es más seguro. Sin embargo, el hardware local puede tener limitaciones de recursos y requerir mantenimiento, lo que puede prolongar los tiempos de entrenamiento de los modelos grandes.

Seleccionar un optimizador#

Un optimizador es un algoritmo que ajusta los pesos de tu red neuronal para minimizar la función de pérdida, que mide el rendimiento del modelo. En términos sencillos, el optimizador ayuda al modelo a aprender modificando sus parámetros para reducir los errores. Elegir el optimizador adecuado afecta directamente a la rapidez y precisión con que aprende el modelo.

También puedes ajustar los parámetros del optimizador para mejorar el rendimiento del modelo. Ajustar la tasa de aprendizaje establece el tamaño de los pasos al actualizar los parámetros. Para lograr estabilidad, puedes empezar con una tasa de aprendizaje moderada y reducirla gradualmente con el tiempo para mejorar el aprendizaje a largo plazo. Además, establecer el momentum determina cuánto influyen las actualizaciones anteriores en las actuales. Un valor habitual para el momentum es aproximadamente 0.9. Por lo general, proporciona un buen equilibrio.

Optimizadores habituales#

Los distintos optimizadores tienen diferentes puntos fuertes y débiles. Veamos brevemente algunos optimizadores habituales.

  • SGD (Descenso de gradiente estocástico):

    • Actualiza los parámetros del modelo utilizando el gradiente de la función de pérdida con respecto a los parámetros.
    • Es sencillo y eficiente, pero puede converger lentamente y quedarse atascado en mínimos locales.
  • Adam (Estimación adaptativa de momentos):

    • Combina las ventajas de SGD con momentum y RMSProp.
    • Ajusta la tasa de aprendizaje de cada parámetro basándose en estimaciones del primer y segundo momento de los gradientes.
    • Es adecuado para datos ruidosos y gradientes dispersos.
    • Es eficiente y, por lo general, requiere menos ajustes. Para ejecuciones de entrenamiento más cortas, optimizer=auto de YOLO26 selecciona el AdamW, estrechamente relacionado, en lugar de Adam.
  • RMSProp (Propagación cuadrática media):

    • Ajusta la tasa de aprendizaje de cada parámetro dividiendo el gradiente por una media móvil de las magnitudes de los gradientes recientes.
    • Ayuda a abordar el problema del gradiente evanescente y es eficaz para las redes neuronales recurrentes.
  • MuSGD (híbrido de Muon + SGD):

    • Combina actualizaciones al estilo de SGD con un comportamiento inspirado en Muon para mejorar la estabilidad en entrenamientos a gran escala.
    • Es una buena opción si quieres una generalización similar a la de SGD, pero necesitas una convergencia más fluida que con el SGD estándar.
    • Es especialmente relevante para las recetas de entrenamiento de YOLO26; si no estás seguro, empieza con optimizer=auto y compáralo con MuSGD en tu conjunto de datos.

En YOLO26, el parámetro optimizer te permite elegir entre varios optimizadores, incluidos SGD, MuSGD, Adam, Adamax, AdamW, NAdam, RAdam y RMSProp, o establecerlo en auto para seleccionar automáticamente el optimizador según el número de iteraciones de entrenamiento.

yolo train model=yolo26n.pt data=coco8.yaml optimizer=MuSGD

Conectar con la comunidad#

Formar parte de una comunidad de entusiastas de la visión por ordenador puede ayudarte a resolver problemas y aprender más rápido. Estas son algunas formas de conectar, obtener ayuda y compartir ideas.

Recursos de la comunidad#

  • Incidencias de GitHub: Visita el repositorio de YOLO26 en GitHub y utiliza la pestaña Issues para hacer preguntas, informar de errores y sugerir nuevas funciones. La comunidad y los responsables del mantenimiento son muy activos y están preparados para ayudarte.
  • Servidor de Discord de Ultralytics: Únete al servidor de Discord de Ultralytics para hablar con otros usuarios y desarrolladores, obtener asistencia y compartir tus experiencias.

Documentación oficial#

  • Documentación de YOLO26 de Ultralytics: Consulta la documentación oficial de YOLO26 para encontrar guías detalladas y consejos útiles sobre distintos proyectos de visión por ordenador.

Utilizar estos recursos te ayudará a resolver problemas y mantenerte al día de las últimas tendencias y prácticas de la comunidad de visión por ordenador.

Conclusiones clave#

Entrenar modelos de visión por ordenador implica seguir buenas prácticas, optimizar tus estrategias y resolver los problemas a medida que surgen. Técnicas como ajustar el tamaño de los lotes, el entrenamiento con precisión mixta y empezar con pesos preentrenados pueden mejorar el rendimiento y acelerar el entrenamiento de tus modelos. Métodos como el entrenamiento con subconjuntos y la detención temprana te ayudan a ahorrar tiempo y recursos. Mantenerte en contacto con la comunidad y al día de las nuevas tendencias te ayudará a seguir mejorando tus habilidades de entrenamiento de modelos.

Preguntas frecuentes#

  • Para mejorar la utilización de la GPU, establece el parámetro batch en el tamaño máximo que admita tu GPU. En un único acelerador, batch=-1 perfila el modelo y tiene como objetivo una utilización de memoria aproximada del 60 %. En CPU y Apple silicon, recurre a batch=16, mientras que las ejecuciones con varias GPU requieren un tamaño de lote global explícito que sea múltiplo del número de dispositivos. Para obtener más información, consulta los argumentos del modo Train.

  • El entrenamiento con precisión mixta utiliza tipos de coma flotante de 16 bits (FP16) y 32 bits (FP32) para equilibrar la velocidad de cálculo y la precisión. En YOLO26 está activado de forma predeterminada mediante amp=True; establece amp=False para forzar FP32. AMP se omite en CPU y Apple silicon. Para obtener más información, consulta los argumentos del modo Train.

  • El entrenamiento multiescala mejora el rendimiento del modelo al entrenarlo con imágenes de distintos tamaños, lo que le permite generalizar mejor a través de diferentes escalas y distancias. YOLO26 ofrece dos parámetros independientes para ello. scale=0.5 selecciona un factor de zoom entre 0.5 y 1.5 y después rellena o recorta hasta un imgsz fijo, mientras que multi_scale=0.25 modifica imgsz en cada lote mediante pasos de stride. Para consultar la configuración y obtener más información, visita la documentación del modo Train.

  • Utilizar pesos preentrenados puede acelerar considerablemente el entrenamiento y mejorar la precisión del modelo al aprovechar un modelo que ya conoce las características visuales fundamentales. Cárgalos mediante el argumento model, como en model=yolo26n.pt; después, pretrained decide si esos pesos se conservan (True, de forma predeterminada), se descartan (False) o se sustituyen por otro checkpoint (pretrained=path/to/best.pt, la forma de transferir pesos a una compilación model=*.yaml). Obtén más información en la documentación del modo Train.

  • El número de épocas se refiere a los recorridos completos por el conjunto de datos de entrenamiento durante el entrenamiento del modelo. Un punto de partida habitual son 300 épocas. Si tu modelo se sobreajusta pronto, puedes reducir el número. Si no observas sobreajuste, puedes ampliar el entrenamiento a 600, 1200 o más épocas. Para establecerlo en YOLO26, utiliza el parámetro epochs en tu script de entrenamiento. Para obtener consejos adicionales sobre cómo determinar el número ideal de épocas, consulta esta sección sobre el número de épocas.

Comentarios