Mejores prácticas y consejos de aprendizaje automático para el entrenamiento de modelos#
Introducción#
Uno de los pasos más importantes al trabajar en un computer vision project es el entrenamiento del modelo. Antes de llegar a este paso, debes define your goals y collect and annotate your data. Después de preprocessing the data para asegurarte de que esté limpia y coherente, puedes pasar a entrenar tu modelo.
Model training 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. Esta guía repasa las mejores prácticas, las técnicas de optimización y los consejos de solución de problemas para ayudarte a entrenar tus modelos de computer vision de manera 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 artificial se entrena ajustando sus parámetros internos para minimizar 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 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 errores y actualiza sus parámetros mediante 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.
Este proceso de aprendizaje hace posible que el modelo de computer vision realice varias tasks, incluyendo object detection, instance segmentation, semantic segmentation y image classification. El objetivo final es crear un modelo que pueda generalizar su aprendizaje a imágenes nuevas y no vistas para comprender con precisión los datos visuales en aplicaciones del mundo real.
Ahora que sabemos qué sucede detrás de escena cuando entrenamos un modelo, veamos puntos a considerar al entrenar uno.
Entrenamiento en grandes conjuntos de datos#
Hay algunos aspectos diferentes a considerar cuando planeas usar un gran conjunto de datos para entrenar un modelo. Por ejemplo, puedes ajustar el tamaño del lote, controlar la utilización de la GPU, elegir usar entrenamiento multiescala, etc. Repasemos cada una de estas opciones en detalle.
Tamaño del lote y utilización de la GPU#
Al entrenar modelos en conjuntos de datos grandes, utilizar tu GPU de manera eficiente es clave. El tamaño del lote (batch size) 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 de forma incremental 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 configurar el parámetro batch en Train mode arguments para que coincida con la capacidad de tu GPU. En un solo acelerador, batch=-1 analiza el modelo y selecciona un batch size que apunta a una utilización de memoria de aproximadamente el 60%; una fracción como batch=0.70 apunta a una proporción diferente. Las ejecuciones multi-GPU requieren un tamaño de lote global explícito que sea un múltiplo del recuento de dispositivos. En CPU y Apple silicon, AutoBatch emite una advertencia y recurre a batch=16.
Entrenamiento con subconjuntos#
El entrenamiento con subconjuntos es una estrategia inteligente que implica entrenar tu modelo en un conjunto de datos más pequeño que representa al conjunto de datos más grande. Puede ahorrar tiempo y recursos, especialmente durante el desarrollo inicial y las pruebas del modelo. Si te falta tiempo o estás experimentando con diferentes configuraciones de modelo, el entrenamiento con subconjuntos es una buena opción.
En lo que respecta a YOLO26, puedes implementar fácilmente el entrenamiento por subconjuntos con el parámetro fraction. Utiliza una proporción como fraction=0.1 para el 10% de los datos de entrenamiento, un número entero como fraction=300 para exactamente 300 imágenes de entrenamiento, o una lista de [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] dejan la división de prueba completa. 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 realizar iteraciones y ajustes rápidos antes de comprometerse 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 varios tamaños. Tu modelo puede aprender a detectar objetos a diferentes escalas y distancias y volverse más robusto.
Por ejemplo, cuando entrenas YOLO26, puedes habilitar la aumento de escala configurando el parámetro scale. Este parámetro ajusta el tamaño de las imágenes de entrenamiento por un factor especificado, simulando objetos a diferentes distancias. Por ejemplo, configurar scale=0.5 acerca aleatoriamente las imágenes de entrenamiento por un factor entre 0.5 y 1.5 durante el entrenamiento. Configurar este parámetro le permite a tu modelo experimentar una variedad de escalas de imagen y mejorar 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 mediante el parámetro multi_scale. A diferencia de scale, que hace zoom en las imágenes y luego añade relleno o recortes de vuelta a imgsz, multi_scale cambia 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 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 utilizando el parámetro cache:
cache=True: Almacena las imágenes del conjunto de datos en la memoria RAM, lo que ofrece la velocidad de acceso más rápida a costa de un mayor consumo de memoria.cache='disk': Almacena 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 totalmente de la E/S de disco, lo que constituye la opción más lenta.
Entrenamiento de precisión mixta#
El entrenamiento de precisión mixta utiliza tipos de coma flotante de 16 bits (FP16) y de 32 bits (FP32). Las ventajas de FP16 y 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 neural network 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 los pesos. Puedes gestionar modelos más grandes o tamaños de lote mayores dentro de las mismas limitaciones de hardware.
Para implementar el entrenamiento de precisión mixta, tendrás que modificar tus scripts de entrenamiento y asegurarte de que tu hardware (como las GPUs) lo admita. Muchos frameworks modernos de deep learning, como PyTorch y TensorFlow, ofrecen compatibilidad integrada para la precisión mixta.
El entrenamiento en precisión mixta es sencillo cuando trabajas con YOLO26: AMP ya está activado de manera predeterminada (amp=True). En una GPU CUDA, YOLO realiza una comprobación de compatibilidad única al inicio del entrenamiento y vuelve a FP32 completo si falla; en CPU y Apple silicon, AMP se omite por completo. Configura amp=False para forzar FP32.
Pesos preentrenados#
Usar pesos preentrenados es una manera 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. Afinar un modelo preentrenado implica comenzar con estos pesos y luego continuar el entrenamiento con tu conjunto de datos específico. Este método de entrenamiento se traduce en tiempos de entrenamiento más rápidos y, a menudo, en un mejor rendimiento, ya que el modelo empieza con una sólida comprensión de las características básicas.
Los pesos preentrenados provienen del argumento model, por lo que model=yolo26n.pt ya comienza con los pesos COCO. El parámetro pretrained controla si esos pesos se mantienen (True, el predeterminado), se descartan (False) o se reemplazan por otro punto de control (pretrained=path/to/best.pt). Configurar pretrained=True en un modelo *.yaml no recupera los pesos por sí solo. Consulta How to Fine-Tune YOLO on a Custom Dataset para ver el flujo de trabajo completo de aprendizaje por transferencia.
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:
- Learning Rate Schedulers: Implementar planificadores 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 rebase los mínimos y mejorar la estabilidad. Al entrenar YOLO26, el parámetro
lrfayuda a gestionar la planificación de la tasa de aprendizaje configurando la tasa final como una fracción de la tasa inicial. Para comportamientos que ningún argumento expone, como tasas de aprendizaje por capa o recorte de gradientes, subclasea el entrenador. - 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 de entrenamiento entre varias GPU o máquinas. Este enfoque es particularmente valioso para proyectos a escala empresarial con recursos computacionales considerables.
- Formato de memoria channels-last:
channels_last=Trueutiliza el diseño de memoria NHWC en CUDA, lo que puede mejorar el rendimiento de la convolución en hardware compatible. Otros dispositivos emiten una advertencia y mantienen el diseño predeterminado.
El número de épocas para entrenar#
Al entrenar un modelo, una epoch se refiere a una pasada completa 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 en función del algoritmo de aprendizaje. Por lo general, se necesitan varias é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 sufre sobreajuste (overfitting) antes de tiempo, puedes reducir el número de épocas. Si el overfitting no se produce 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 más grandes pueden requerir más épocas para que el modelo aprenda con eficacia, mientras que los 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 del modelo. 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 para 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.
Para YOLO26, puedes habilitar la parada temprana (early stopping) configurando el parámetro patience en tu configuración de entrenamiento. Por ejemplo, patience=5 significa que el entrenamiento se detendrá si no hay mejoras 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álculo 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, y resulta ideal para gestionar grandes conjuntos de datos y modelos complejos. Plataformas como Google Cloud, AWS y Azure proporcionan acceso bajo demanda a GPUs y TPUs de alto rendimiento, lo que acelera los tiempos de entrenamiento y permite realizar experimentos con modelos más grandes. Sin embargo, el entrenamiento en la nube puede resultar costoso, especialmente durante períodos prolongados, y la transferencia de datos puede aumentar los costes y la latencia.
El entrenamiento local proporciona un 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, como 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.
Seleccionar un optimizador#
Un optimizador es un algoritmo que ajusta los pesos de tu red neuronal para minimizar la loss function, la cual mide el rendimiento del modelo. En términos más sencillos, el optimizador ayuda a que el modelo aprenda retocando sus parámetros para reducir los errores. Elegir el optimizador adecuado afecta directamente a la velocidad y precisión con la 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 la 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 actuales. Un valor común para el momentum 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 (Stochastic Gradient Descent / Descenso de Gradiente Estocástico):
- Actualiza los parámetros del modelo usando 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 atrapado en mínimos locales.
-
Adam (Adaptive Moment Estimation):
- Combina los beneficios tanto de SGD con momentum 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.
- Muy adecuado para datos ruidosos y gradientes dispersos.
- Eficiente y por lo general requiere menos ajuste. Para ejecuciones de entrenamiento más cortas, el parámetro
optimizer=autode YOLO26 selecciona el AdamW, que está estrechamente relacionado, en lugar de Adam propiamente dicho.
-
RMSProp (Root Mean Square Propagation):
- 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 resolver el problema del desvanecimiento del gradiente (vanishing gradient) y es eficaz para recurrent neural networks.
-
MuSGD (híbrido de Muon + SGD):
- Combina actualizaciones al estilo SGD con un comportamiento inspirado en Muon para mejorar la estabilidad en el entrenamiento a gran escala.
- Una buena opción cuando quieres una generalización similar a SGD pero necesitas una convergencia más suave que el SGD simple.
- Especialmente relevante para las YOLO26 training recipes; si no estás seguro, empieza con
optimizer=autoy compara con MuSGD en tu conjunto de datos.
Para YOLO26, el parámetro optimizer te permite elegir entre varios optimizadores, incluidos SGD, MuSGD, Adam, Adamax, AdamW, NAdam, RAdam y RMSProp, o puedes configurarlo en auto para la selección automática según el número de iteraciones de entrenamiento.
yolo train model=yolo26n.pt data=coco8.yaml optimizer=MuSGDConectando con la comunidad#
Ser parte de una comunidad de entusiastas de la visión artificial puede ayudarte a resolver problemas y aprender más rápido. Aquí hay algunas formas de conectarse, obtener ayuda y compartir ideas.
Recursos de la comunidad#
- GitHub Issues: Visita el YOLO26 GitHub repository y utiliza la pestaña Issues para hacer preguntas, informar de errores y sugerir nuevas funciones. La comunidad y los mantenedores son muy activos y están listos para ayudar.
- Ultralytics Discord Server: Únete al Ultralytics Discord server para chatear con otros usuarios y desarrolladores, obtener soporte y compartir tus experiencias.
Documentación oficial#
- Ultralytics YOLO26 Documentation: Echa un vistazo a la official YOLO26 documentation para ver guías detalladas y consejos útiles sobre varios proyectos de computer vision.
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 artificial.
Puntos clave#
Entrenar modelos de computer vision 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 precision mixta y empezar 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 al día con las nuevas tendencias te ayudará a seguir mejorando tus habilidades de entrenamiento de modelos.
FAQ#
Para mejorar la utilización de la GPU, configura el parámetro
batchcon el tamaño máximo admitido por tu GPU. En un solo acelerador,batch=-1analiza el modelo y apunta a una utilización de memoria de aproximadamente el 60%. Vuelve abatch=16en CPU y Apple silicon, mientras que las ejecuciones multi-GPU requieren un tamaño de lote global explícito que sea un múltiplo del recuento de dispositivos. Para obtener más información, consulta los Train mode arguments.El entrenamiento en precisión mixta utiliza tipos de coma flotante de 16 bits (FP16) y de 32 bits (FP32) para equilibrar la velocidad de cálculo y la precisión. En YOLO26 está habilitado por defecto a través de
amp=True; configuraamp=Falsepara forzar FP32. AMP se omite en CPU y Apple silicon. Para obtener más detalles, consulta los Train mode arguments.El entrenamiento multiescala mejora el rendimiento del modelo al entrenar con imágenes de varios tamaños, lo que permite que el modelo generalice mejor entre diferentes escalas y distancias. YOLO26 ofrece dos parámetros separados para esto.
scale=0.5muestrea un factor de zoom entre 0.5 y 1.5 y luego rellena o recorta de vuelta a unimgszfijo, mientras quemulti_scale=0.25varía el propioimgszen cada lote en pasos de zancada. Para ver configuraciones y más detalles, consulta la Train mode documentation.Usar pesos preentrenados puede acelerar enormemente el entrenamiento y mejorar la precisión del modelo aprovechando un modelo que ya está familiarizado con características visuales fundamentales. Cárgalos a través del argumento
model, como enmodel=yolo26n.pt;pretraineddecide entonces si esos pesos se conservan (True, el predeterminado), se descartan (False) o se reemplazan por otro punto de control (pretrained=path/to/best.pt, la forma de transferir pesos a una compilación demodel=*.yaml). Obtén más información en la Train mode documentation.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 habitual son 300 épocas. Si tu modelo sufre sobreajuste antes de tiempo, puedes reducir el número. Alternativamente, si no se observa sobreajuste, podrías ampliar el entrenamiento a 600, 1200 o más épocas. Para configurar esto en YOLO26, utiliza el parámetro
epochsen tu script de entrenamiento. Para obtener asesoramiento adicional sobre cómo determinar el número ideal de épocas, consulta esta sección sobre number of epochs.