Prácticas recomendadas y consejos de aprendizaje automático para el entrenamiento de modelos

Introducción

Uno de los pasos más importantes al trabajar en un proyecto de visión por computador es el entrenamiento del modelo. Antes de llegar a este paso, necesitas 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 al entrenamiento de tu modelo.



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

Entonces, ¿qué es el entrenamiento de modelos? El entrenamiento de modelos es el proceso de enseñar a tu modelo a reconocer patrones visuales y realizar predicciones basadas en tus datos. Impacta directamente en el rendimiento y la precisión de tu aplicación. En esta guía, cubriremos prácticas recomendadas, técnicas de optimización y consejos de solución de problemas para ayudarte a entrenar tus modelos de visión por computador de manera efectiva.

Cómo entrenar un modelo de aprendizaje automático

Un modelo de visión por computador se entrena ajustando sus parámetros internos para minimizar los errores. Inicialmente, el modelo recibe un gran conjunto de imágenes etiquetadas. Realiza predicciones sobre lo que hay en estas imágenes y las predicciones se comparan con las etiquetas o contenidos reales para calcular los errores. Estos errores muestran qué tan lejos están las predicciones del modelo de los valores reales.

Durante el entrenamiento, el modelo realiza predicciones de forma iterativa, calcula los errores y actualiza sus parámetros a través de un proceso llamado backpropagation. 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 hace posible que el modelo de visión por computador realice varias tareas, incluyendo detección de objetos, segmentación de instancias, segmentación semántica y clasificación de imágenes. El objetivo final es crear un modelo que pueda generalizar su aprendizaje a imágenes nuevas y no vistas, de modo que pueda comprender con precisión los datos visuales en aplicaciones del mundo real.

Ahora que sabemos qué sucede tras bambalinas cuando entrenamos un modelo, veamos los puntos a considerar al entrenar un modelo.

Entrenamiento en grandes conjuntos de datos

Hay algunos aspectos diferentes en los que pensar cuando planeas usar un conjunto de datos grande para entrenar un modelo. Por ejemplo, puedes ajustar el tamaño del lote (batch size), controlar la utilización de la GPU, optar por usar entrenamiento multiescala, etc. Analicemos cada una de estas opciones en detalle.

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

Al entrenar modelos en grandes conjuntos de datos, utilizar eficientemente tu GPU es clave. 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. Usando el tamaño de lote máximo admitido por tu GPU, puedes aprovechar al máximo sus capacidades y reducir el tiempo que toma el entrenamiento del modelo. Sin embargo, querrás 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 respecto a YOLO26, puedes establecer el parámetro batch_size en la configuración de entrenamiento para que coincida con la capacidad de tu GPU. Además, establecer batch=-1 en tu script de entrenamiento determinará automáticamente el tamaño del lote que puede procesarse de manera eficiente según las capacidades de tu dispositivo. Al ajustar el tamaño del lote, puedes aprovechar al máximo tus recursos de GPU y mejorar el proceso general de entrenamiento.

Entrenamiento por subconjuntos

El entrenamiento por subconjuntos es una estrategia inteligente que implica entrenar tu modelo en un conjunto de datos más pequeño que representa el conjunto de datos más grande. Puede ahorrar tiempo y recursos, especialmente durante el desarrollo y las pruebas iniciales del modelo. Si te falta tiempo o estás experimentando con diferentes configuraciones de modelo, el entrenamiento por subconjuntos es una buena opción.

Cuando se trata de YOLO26, puedes implementar fácilmente el entrenamiento por subconjuntos utilizando el parámetro fraction. Este parámetro te permite especificar qué fracción de tu conjunto de datos usar para el entrenamiento. Por ejemplo, establecer fraction=0.1 entrenará tu modelo en el 10% de los datos. Puedes usar esta técnica para iteraciones rápidas y para ajustar tu modelo antes de comprometerte a entrenar un modelo usando un conjunto de datos completo. El entrenamiento por subconjuntos te ayuda a progresar rápidamente e identificar posibles problemas desde el principio.

Entrenamiento multiescala

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

Por ejemplo, cuando entrenas YOLO26, puedes habilitar el entrenamiento multiescala configurando el parámetro scale. Este parámetro ajusta el tamaño de las imágenes de entrenamiento por un factor específico, simulando objetos a diferentes distancias. Por ejemplo, configurar scale=0.5 hace zoom aleatorio en las imágenes de entrenamiento por un factor entre 0.5 y 1.5 durante el entrenamiento. Configurar este parámetro permite que tu modelo experimente una variedad de escalas de imagen y mejore sus capacidades de detección en diferentes tamaños de objetos y escenarios.

Ultralytics también admite el entrenamiento multiescala por tamaño de imagen a través del parámetro multi_scale. A diferencia de scale, que hace zoom en las imágenes y luego rellena/recorta de nuevo al imgsz, multi_scale cambia el propio imgsz en cada lote (redondeado al paso del modelo). Por ejemplo, con imgsz=640 y multi_scale=0.25, el tamaño de entrenamiento se muestrea desde 480 hasta 800 en pasos de zancada (p. ej., 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 almacenar imágenes preprocesadas en la memoria, el almacenamiento en caché reduce el tiempo que la GPU pasa esperando a que los datos se carguen desde el disco. El modelo puede recibir datos continuamente sin retrasos causados por operaciones de E/S de disco.

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

  • cache=True: Almacena las imágenes del conjunto de datos en la RAM, proporcionando la velocidad de acceso más rápida pero a costa de un mayor uso de memoria.
  • cache='disk': Almacena las imágenes en el disco, más lento que la RAM pero más rápido que cargar datos frescos cada vez.
  • cache=False: Deshabilita el almacenamiento en caché, dependiendo completamente de la E/S del disco, que es la opción más lenta.

Entrenamiento de precisión mixta

El entrenamiento de precisión mixta utiliza tipos de punto flotante de 16 bits (FP16) y 32 bits (FP32). Las fortalezas tanto de FP16 como de FP32 se aprovechan utilizando FP16 para un cálculo más rápido y FP32 para mantener la precisión donde 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 mantiene una copia maestra de los pesos del modelo en FP32 para garantizar la precisión durante los pasos de actualización de pesos. Puedes manejar modelos más grandes o tamaños de lote más grandes dentro de las mismas limitaciones de hardware.

Mixed precision FP16 training benefits

Para implementar el entrenamiento de precisión mixta, deberás modificar tus scripts de entrenamiento y asegurarte de que tu hardware (como las GPU) lo admita. Muchos marcos modernos de deep learning, como PyTorch y TensorFlow, ofrecen soporte integrado para precisión mixta.

El entrenamiento de precisión mixta es sencillo cuando trabajas con YOLO26. Puedes usar la bandera amp en tu configuración de entrenamiento. Configurar amp=True habilita el entrenamiento de Precisión Mixta Automática (AMP). El entrenamiento de precisión mixta es una forma sencilla pero efectiva de optimizar el proceso de entrenamiento de tu modelo.

Pesos preentrenados

Usar pesos preentrenados es una forma inteligente de acelerar el proceso de entrenamiento de tu modelo. Los pesos preentrenados provienen de modelos ya entrenados en grandes conjuntos de datos, lo que le da a tu modelo una ventaja inicial. El transfer learning adapta modelos preentrenados a tareas nuevas y relacionadas. El ajuste fino de un modelo preentrenado implica comenzar con estos pesos y luego continuar el entrenamiento en tu conjunto de datos específico. Este método de entrenamiento da como resultado tiempos de entrenamiento más rápidos y, a menudo, un mejor rendimiento porque el modelo comienza con una base sólida de características básicas.

El parámetro pretrained facilita el transfer learning con YOLO26. Configurar pretrained=True usará los pesos preentrenados predeterminados, o puedes especificar una ruta a un modelo preentrenado personalizado. El uso eficaz de pesos preentrenados y transfer learning aumenta las capacidades de tu modelo y reduce los costos de entrenamiento.

Otras técnicas a considerar al manejar un conjunto de datos grande

Hay un par de otras técnicas a considerar al manejar un conjunto de datos grande:

  • Programadores de tasa de aprendizaje: Implementar programadores de 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 tasa inicial.
  • Entrenamiento distribuido: Para manejar grandes conjuntos de datos, el entrenamiento distribuido puede cambiar las reglas del juego. Puedes reducir el tiempo de entrenamiento distribuyendo la carga de trabajo entre múltiples GPU o máquinas. Este enfoque es particularmente valioso para proyectos a escala empresarial con recursos computacionales considerables.

El número de épocas para entrenar

Al entrenar un modelo, una época se refiere a una pasada completa por todo el conjunto de datos de entrenamiento. Durante una época, el modelo procesa cada ejemplo en el conjunto de entrenamiento una vez y actualiza sus parámetros según el algoritmo de aprendizaje. Por lo general, se necesitan múltiples épocas para permitir que el modelo aprenda y refine sus parámetros con el tiempo.

Una pregunta común que surge es cómo determinar el número de épocas para entrenar el modelo. Un buen punto de partida son 300 épocas. Si el modelo se sobreajusta (overfitting) pronto, puedes reducir el número de épocas. Si el sobreajuste no ocurre después de 300 épocas, puedes extender el entrenamiento a 600, 1200 o más épocas.

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

Parada temprana (Early stopping)

La parada temprana es una técnica valiosa para optimizar el entrenamiento de modelos. Al monitorear el rendimiento de la validación, puedes detener el entrenamiento una vez que el modelo deja de mejorar. Puedes ahorrar recursos computacionales y evitar el sobreajuste.

El proceso implica establecer un parámetro de paciencia que determina cuántas épocas esperar por una mejora en las métricas de validación antes de detener el entrenamiento. Si el rendimiento del modelo no mejora dentro de estas épocas, el entrenamiento se detiene para evitar desperdiciar tiempo y recursos.

Early stopping to prevent model overfitting

Para YOLO26, puedes habilitar la parada temprana configurando el parámetro patience en tu configuración de entrenamiento. Por ejemplo, patience=5 significa que el entrenamiento se detendrá si no hay mejora en las métricas de validación durante 5 épocas consecutivas. El uso de este método garantiza que el proceso de entrenamiento siga siendo eficiente y logre un rendimiento óptimo sin un cómputo excesivo.

Elegir entre entrenamiento en la nube y local

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

El entrenamiento en la nube ofrece escalabilidad y hardware potente, siendo ideal para manejar grandes conjuntos de datos y modelos complejos. Plataformas como Google Cloud, AWS y Azure brindan acceso bajo demanda a GPU y TPU de alto rendimiento, acelerando los tiempos de entrenamiento y permitiendo experimentos con modelos más grandes. Sin embargo, el entrenamiento en la nube puede ser costoso, especialmente durante largos períodos, y la transferencia de datos puede aumentar los costos y la latencia.

El entrenamiento local brinda mayor control y personalización, permitiéndote adaptar tu entorno a necesidades específicas y evitar costos continuos en la nube. Puede ser más económico para proyectos a largo plazo y, dado que tus datos permanecen en las instalaciones, es más seguro. Sin embargo, el hardware local puede tener limitaciones de recursos y requerir mantenimiento, lo que puede llevar a tiempos de entrenamiento más largos para modelos grandes.

Selección de 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 qué tan bien está funcionando el modelo. En términos más simples, el optimizador ayuda al modelo a aprender ajustando sus parámetros para reducir los errores. Elegir el optimizador correcto afecta directamente qué tan rápida y precisamente 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 mayor estabilidad, podrías comenzar con una tasa de aprendizaje moderada y disminuirla gradualmente con el tiempo para mejorar el aprendizaje a largo plazo. Además, establecer el momento (momentum) determina cuánta influencia tienen las actualizaciones pasadas en las actualizaciones actuales. Un valor común para el momento es alrededor de 0.9. Generalmente proporciona un buen equilibrio.

Optimizadores comunes

Diferentes optimizadores tienen varias fortalezas y debilidades. Echemos un vistazo a algunos optimizadores comunes.

  • 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.
    • Simple y eficiente, pero puede ser lento para converger y podría quedarse atascado en mínimos locales.
  • Adam (Estimación de Momento Adaptativo):

    • Combina los beneficios tanto de SGD con momento como de RMSProp.
    • Ajusta la tasa de aprendizaje para cada parámetro basándose en estimaciones de los primeros y segundos momentos de los gradientes.
    • Bien adaptado para datos ruidosos y gradientes dispersos.
    • Eficiente y generalmente requiere menos ajuste, lo que lo convierte en un optimizador recomendado para YOLO26.
  • RMSProp (Propagación de la Raíz Cuadrada Media):

    • Ajusta la tasa de aprendizaje para cada parámetro dividiendo el gradiente por un promedio móvil de las magnitudes de los gradientes recientes.
    • Ayuda a manejar el problema del gradiente que desaparece y es efectivo para redes neuronales recurrentes.
  • MuSGD (Híbrido de Muon + SGD):

    • Combina actualizaciones estilo SGD con comportamiento inspirado en Muon para una mayor estabilidad en el entrenamiento a gran escala.
    • Una buena opción cuando deseas una generalización similar a SGD pero necesitas una convergencia más fluida que la de SGD estándar.
    • Especialmente relevante para las recetas de entrenamiento de YOLO26; si no estás seguro, comienza con optimizer=auto y compara con MuSGD en tu conjunto de datos.

Para YOLO26, el parámetro optimizer te permite elegir entre varios optimizadores, incluidos SGD, MuSGD, Adam, AdamW, NAdam, RAdam y RMSProp, o puedes configurarlo en auto para una selección automática basada en la configuración del modelo.

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

Conectando con la comunidad

Ser parte de una comunidad de entusiastas de la visión por computador puede ayudarte a resolver problemas y aprender más rápido. Aquí hay algunas formas de conectar, obtener ayuda y compartir ideas.

Recursos de la comunidad

  • Problemas en GitHub: Visita el repositorio de GitHub de YOLO26 y usa la pestaña de Issues para hacer preguntas, informar errores y sugerir nuevas funciones. La comunidad y los mantenedores son muy activos y están listos para ayudar.
  • Servidor de Discord de Ultralytics: Únete al servidor de Discord de Ultralytics para chatear con otros usuarios y desarrolladores, obtener soporte y compartir tus experiencias.

Documentación oficial

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

El uso de estos recursos te ayudará a resolver desafíos y mantenerte al día con las últimas tendencias y prácticas en la comunidad de visión por computador.

Conclusiones clave

Entrenar modelos de visión por computador implica seguir buenas prácticas, optimizar tus estrategias y resolver problemas a medida que surgen. Técnicas como el ajuste de tamaños de lote, el entrenamiento de precisión mixta y comenzar con pesos preentrenados pueden hacer que tus modelos funcionen mejor y se entrenen más rápido. Métodos como el entrenamiento por subconjuntos y la parada temprana te ayudan a ahorrar tiempo y recursos. Mantenerte conectado con la comunidad y seguir nuevas tendencias te ayudará a seguir mejorando tus habilidades de entrenamiento de modelos.

Preguntas frecuentes

¿Cómo puedo mejorar la utilización de la GPU al entrenar un conjunto de datos grande con Ultralytics YOLO?

Para mejorar la utilización de la GPU, configura el parámetro batch_size en tu configuración de entrenamiento al tamaño máximo admitido por tu GPU. Esto garantiza que aproveches al máximo las capacidades de la GPU, reduciendo el tiempo de entrenamiento. Si encuentras errores de memoria, reduce gradualmente el tamaño del lote hasta que el entrenamiento se ejecute sin problemas. Para YOLO26, configurar batch=-1 en tu script de entrenamiento determinará automáticamente el tamaño de lote óptimo para un procesamiento eficiente. Para obtener más información, consulta la configuración de entrenamiento.

¿Qué es el entrenamiento de precisión mixta y cómo lo habilito en YOLO26?

El entrenamiento de precisión mixta utiliza tipos de punto flotante de 16 bits (FP16) y 32 bits (FP32) para equilibrar la velocidad computacional y la precisión. Este enfoque acelera el entrenamiento y reduce el uso de memoria sin sacrificar la precisión del modelo. Para habilitar el entrenamiento de precisión mixta en YOLO26, configura el parámetro amp en True en tu configuración de entrenamiento. Esto activa el entrenamiento de Precisión Mixta Automática (AMP). Para obtener más detalles sobre esta técnica de optimización, consulta la configuración de entrenamiento.

¿Cómo mejora el entrenamiento multiescala el rendimiento del modelo YOLO26?

El entrenamiento multiescala mejora el rendimiento del modelo al entrenar con imágenes de diferentes tamaños, lo que permite que el modelo generalice mejor a diferentes escalas y distancias. En YOLO26, puedes habilitar el entrenamiento multiescala configurando el parámetro scale en la configuración de entrenamiento. Por ejemplo, scale=0.5 muestrea un factor de zoom entre 0.5 y 1.5, luego rellena/recorta de nuevo a imgsz. Esta técnica simula objetos a diferentes distancias, haciendo que el modelo sea más robusto en diversos escenarios. Para obtener configuraciones y más detalles, consulta la configuración de entrenamiento.

¿Cómo puedo usar pesos preentrenados para acelerar el entrenamiento en YOLO26?

El uso de pesos preentrenados puede acelerar enormemente el entrenamiento y mejorar la precisión del modelo al aprovechar un modelo que ya está familiarizado con las características visuales fundamentales. En YOLO26, simplemente configura el parámetro pretrained en True o proporciona una ruta a tus pesos preentrenados personalizados en la configuración de entrenamiento. Este método, llamado transfer learning, permite que los modelos entrenados en grandes conjuntos de datos se adapten eficazmente a tu aplicación específica. Obtén más información sobre cómo usar pesos preentrenados y sus beneficios en la guía de configuración de entrenamiento.

¿Cuál es el número recomendado de épocas para entrenar un modelo y cómo lo configuro en YOLO26?

El número de épocas se refiere a las pasadas completas por el conjunto de datos de entrenamiento durante el entrenamiento del modelo. Un punto de partida típico son 300 épocas. Si tu modelo se sobreajusta pronto, puedes reducir el número. Alternativamente, si no se observa sobreajuste, podrías extender el entrenamiento a 600, 1200 o más épocas. Para configurar esto en YOLO26, usa 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