Ir al contenido

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

Introducción

Uno de los pasos más importantes al trabajar en un proyecto de visión artificial es el entrenamiento del modelo. Antes de llegar a este paso, debe definir sus objetivos y recopilar y anotar sus datos. Después de preprocesar los datos para asegurarse de que estén limpios y sean consistentes, puede pasar a entrenar su modelo.



Ver: Consejos para el entrenamiento de modelos | Cómo manejar grandes conjuntos de datos | Tamaño del lote, utilización de la GPU y Precisión mixta

Entonces, ¿qué es el entrenamiento de modelos? El entrenamiento de modelos es el proceso de enseñar a su modelo a reconocer patrones visuales y hacer predicciones basadas en sus datos. Impacta directamente en el rendimiento y la precisión de su aplicación. En esta guía, cubriremos las mejores prácticas, las técnicas de optimización y los consejos para la resolución de problemas para ayudarlo a entrenar sus modelos de visión artificial de manera efectiva.

Cómo entrenar un modelo de aprendizaje automático

Un modelo de visión artificial se entrena ajustando sus parámetros internos para minimizar los errores. Inicialmente, el modelo se alimenta con un gran conjunto de imágenes etiquetadas. Hace predicciones sobre lo que hay en estas imágenes, y las predicciones se comparan con las etiquetas o el contenido real para calcular los errores. Estos errores muestran cuán lejos están las predicciones del modelo de los valores verdaderos.

Durante el entrenamiento, el modelo realiza predicciones iterativamente, calcula errores y actualiza sus parámetros a través de 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.

¿Qué es la retropropagación?

Este proceso de aprendizaje hace posible que el modelo de visión artificial realice varias tareas, incluyendo la detección de objetos, la segmentación de instancias y la 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 lo que está sucediendo detrás de escena cuando entrenamos un modelo, veamos los puntos a considerar al entrenar un modelo.

Entrenamiento en conjuntos de datos grandes

Hay algunos aspectos diferentes a tener en cuenta cuando planea utilizar un conjunto de datos grande para entrenar un modelo. Por ejemplo, puede ajustar el tamaño del lote, controlar la utilización de la GPU, optar por utilizar el 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 grandes conjuntos de datos, utilizar eficientemente su 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. Al utilizar el tamaño de lote máximo admitido por su GPU, puede aprovechar al máximo sus capacidades y reducir el tiempo que lleva el entrenamiento del modelo. Sin embargo, debe evitar quedarse sin memoria de la GPU. Si encuentra errores de memoria, reduzca el tamaño del lote de forma incremental hasta que el modelo se entrene sin problemas.



Ver: Cómo usar la inferencia por lotes con Ultralytics YOLO11 | Acelerar la detección de objetos en python 🎉

Con respecto a YOLO11, puede establecer el batch_size parámetro en la configuración de entrenamiento para que coincida con la capacidad de su GPU. Además, configurar batch=-1 en su script de entrenamiento determinará automáticamente el tamaño de lote que se puede procesar de manera eficiente según las capacidades de tu dispositivo. Al ajustar el tamaño del lote, puedes aprovechar al máximo los recursos de tu GPU y mejorar el proceso de entrenamiento en general.

Entrenamiento de 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 el conjunto de datos más 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 diferentes configuraciones de modelo, el entrenamiento con subconjuntos es una buena opción.

Cuando se trata de YOLO11, puedes implementar fácilmente el entrenamiento con subconjuntos utilizando el fraction parámetro. 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 con el 10% de los datos. Puedes utilizar esta técnica para realizar iteraciones rápidas y ajustar tu modelo antes de comprometerte a entrenar un modelo utilizando un conjunto de datos completo. El entrenamiento con subconjuntos te ayuda a avanzar rápidamente e identificar posibles problemas de forma temprana.

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 y volverse más robusto.

Por ejemplo, cuando entrenas YOLO11, puedes habilitar el entrenamiento multiescala configurando el scale parámetro. Este parámetro ajusta el tamaño de las imágenes de entrenamiento por un factor especificado, simulando objetos a diferentes distancias. Por ejemplo, establecer scale=0.5 Amplía aleatoriamente las imágenes de entrenamiento en un factor entre 0.5 y 1.5 durante el entrenamiento. La configuración de este parámetro permite que su modelo experimente una variedad de escalas de imagen y mejore sus capacidades de detección en diferentes tamaños y escenarios de objetos.

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 las imágenes preprocesadas en la memoria, el almacenamiento en caché reduce el tiempo que la GPU pasa esperando 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 YOLO11 utilizando el cache parámetro:

  • 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 la memoria.
  • cache='disk': Almacena las imágenes en el disco, más lento que la RAM pero más rápido que cargar datos nuevos cada vez.
  • cache=False: Desactiva el almacenamiento en caché, confiando completamente en 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). Los puntos fuertes de FP16 y FP32 se aprovechan utilizando FP16 para una computación más rápida 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 una computación más rápida y un menor uso de la 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. Puedes manejar modelos más grandes o tamaños de lote más grandes dentro de las mismas limitaciones de hardware.

Descripción general del entrenamiento de precisión mixta

Para implementar el entrenamiento de precisión mixta, deberá modificar sus scripts de entrenamiento y asegurarse de que su hardware (como las GPU) lo admita. Muchos marcos modernos de aprendizaje profundo, como PyTorch y TensorFlow, ofrecen soporte integrado para la precisión mixta.

El entrenamiento de precisión mixta es sencillo cuando se trabaja con YOLO11. Puedes utilizar el amp flag en tu configuración de entrenamiento. Establecer amp=True habilita el entrenamiento de Precisión Mixta Automática (AMP). El entrenamiento de precisión mixta es una forma sencilla pero eficaz de optimizar el proceso de entrenamiento de tu modelo.

Pesos Pre-entrenados

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 aprendizaje por transferencia adapta los 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 sólida comprensión de las características básicas.

El pretrained parámetro facilita el aprendizaje por transferencia con YOLO11. Establecer pretrained=True utilizará los pesos preentrenados predeterminados, o puedes especificar una ruta a un modelo preentrenado personalizado. El uso de pesos preentrenados y el aprendizaje por transferencia aumenta eficazmente las capacidades de tu modelo y reduce los costes de entrenamiento.

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

Hay un par de técnicas más a considerar al manejar un conjunto de datos grande:

  • Programadores de Tasa de Aprendizaje: La implementación de 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 YOLO11, el lrf Este parámetro 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 de entrenamiento en múltiples GPUs o máquinas. Este enfoque es particularmente valioso para proyectos a escala empresarial con importantes recursos computacionales.

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 del conjunto de entrenamiento una vez y actualiza sus parámetros basándose en el algoritmo de aprendizaje. Normalmente 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 se sobreajusta al principio, puedes reducir el número de épocas. Si no se produce sobreajuste 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 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 eficazmente, mientras que los conjuntos de datos más pequeños pueden necesitar menos épocas para evitar el sobreajuste. Con respecto a YOLO11, puedes establecer el epochs parámetro en tu script de entrenamiento.

Parada temprana

La parada anticipada es una técnica valiosa para optimizar el entrenamiento del modelo. Al supervisar 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 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 la pérdida de tiempo y recursos.

Descripción general de la parada temprana

Para YOLO11, puedes habilitar la parada anticipada estableciendo el parámetro de paciencia 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 asegura 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 es ideal para manejar 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 experimentar con modelos más grandes. Sin embargo, el entrenamiento en la nube puede ser caro, especialmente durante largos periodos, y la transferencia de datos puede aumentar los costes y la latencia.

El entrenamiento local proporciona un mayor control y personalización, lo que te permite adaptar tu entorno a necesidades específicas y evitar los costes continuos de 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 conducir 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 el rendimiento del modelo. En términos más sencillos, el optimizador ayuda al modelo a aprender ajustando sus parámetros para reducir los errores. La elección del optimizador adecuado afecta directamente a la rapidez y precisión con la que aprende el modelo.

También puedes ajustar los parámetros del optimizador para mejorar el rendimiento del modelo. El ajuste de la tasa de aprendizaje establece el tamaño de los pasos al actualizar los parámetros. Para la estabilidad, puedes empezar con una tasa de aprendizaje moderada y disminuirla gradualmente con el tiempo para mejorar el aprendizaje a largo plazo. Además, el establecimiento del momento 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

Los diferentes optimizadores tienen varios puntos fuertes y débiles. 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 Adaptativa de Momentos):

    • Combina los beneficios tanto de SGD con momento como de RMSProp.
    • Ajusta la tasa de aprendizaje para cada parámetro basándose en las estimaciones de los momentos primero y segundo de los gradientes.
    • Adecuado para datos ruidosos y gradientes dispersos.
    • Eficiente y generalmente requiere menos ajuste, lo que lo convierte en un optimizador recomendado para YOLO11.
  • RMSProp (Propagación de la Raíz del Error Cuadrático Medio):

    • 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 de la desaparición del gradiente y es eficaz para redes neuronales recurrentes.

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

Conectando 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í tienes algunas formas de conectarte, obtener ayuda y compartir ideas.

Recursos de la comunidad

  • Problemas en GitHub: Visita el repositorio de YOLO11 en GitHub 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.
  • 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 YOLO11: Consulta la documentación oficial de YOLO11 para obtener guías detalladas y consejos útiles sobre diversos proyectos de visión artificial.

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

Puntos clave

El entrenamiento de modelos de visión artificial implica seguir buenas prácticas, optimizar tus estrategias y resolver los problemas a medida que surgen. Técnicas como el ajuste de los tamaños de lote, el entrenamiento de precisión mixta y el inicio con pesos pre-entrenados pueden hacer que tus modelos funcionen mejor y se entrenen más rápido. Métodos como el entrenamiento de subconjuntos y la parada anticipada 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.

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, establece el parámetro batch_size en tu configuración de entrenamiento al tamaño máximo soportado por tu GPU. Esto asegura que aproveches al máximo las capacidades de la GPU, reduciendo el tiempo de entrenamiento. Si encuentras errores de memoria, reduce incrementalmente el tamaño del lote hasta que el entrenamiento se ejecute sin problemas. Para YOLO11, establecer batch=-1 en tu script de entrenamiento determinará automáticamente el tamaño de lote óptimo para un procesamiento eficiente. Para más información, consulta la configuración de entrenamiento.

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

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óndel modelo. Para habilitar el entrenamiento de precisión mixta en YOLO11, establece el parámetro amp a 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 YOLO11?

El entrenamiento multiescala mejora el rendimiento del modelo entrenando con imágenes de diferentes tamaños, lo que permite que el modelo generalice mejor a través de diferentes escalas y distancias. En YOLO11, puedes habilitar el entrenamiento multiescala estableciendo el parámetro scale en la configuración de entrenamiento. Por ejemplo, scale=0.5 reduce el tamaño de la imagen a la mitad, mientras que scale=2.0 lo duplica. Esta técnica simula objetos a diferentes distancias, haciendo que el modelo sea más robusto en varios escenarios. Para la configuración y más detalles, consulta la configuración de entrenamiento.

¿Cómo puedo usar pesos pre-entrenados para acelerar el entrenamiento en YOLO11?

El uso de pesos pre-entrenados 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 YOLO11, simplemente establece el pretrained a True o proporciona una ruta a tus pesos pre-entrenados personalizados en la configuración de entrenamiento. Este método, llamado aprendizaje por transferencia, 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 utilizar los pesos pre-entrenados y sus beneficios en el guía de configuración de entrenamiento.

El número de épocas se refiere a las pasadas completas a través del conjunto de datos de entrenamiento durante el entrenamiento del modelo. Un punto de partida típico es de 300 épocas. Si tu modelo se sobreajusta pronto, puedes reducir el número. Alternativamente, si no se observa sobreajuste, puedes extender el entrenamiento a 600, 1200 o más épocas. Para establecer esto en YOLO11, utiliza el epochs parámetro en tu script de entrenamiento. Para obtener consejos adicionales sobre cómo determinar el número ideal de épocas, consulta esta sección sobre número de épocas.



📅 Creado hace 1 año ✏️ Actualizado hace 2 meses

Comentarios