Saltar al contenido

Procedimientos recomendados y sugerencias de aprendizaje automático para el entrenamiento de modelos

Introducción

Uno de los pasos más importantes cuando se trabaja en un proyecto de visión por ordenador es el entrenamiento del modelo. Antes de llegar a este paso, tienes que definir tus objetivos y recoger y anotar tus datos. Tras preprocesar los datos para asegurarte de que están limpios y son coherentes, puedes pasar a entrenar tu modelo.

Entonces, ¿qué es el entrenamiento de modelos? El entrenamiento del modelo es el proceso de enseñar a tu modelo a reconocer patrones visuales y hacer predicciones basadas en tus datos. Tiene un impacto directo en el rendimiento y la precisión de tu aplicación. En esta guía, cubriremos las mejores prácticas, técnicas de optimización y consejos para solucionar problemas que te ayudarán a entrenar eficazmente tus modelos de visión por ordenador.

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 reales para calcular los errores. Estos errores muestran lo lejos que 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 a través de un proceso denominado retropropagación. En este proceso, el modelo ajusta sus parámetros internos (weights and biases) 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 por ordenador realice diversas tareas, como 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 nuevas imágenes no vistas, de modo que pueda comprender con precisión los datos visuales en aplicaciones del mundo real.

Ahora que sabemos lo que sucede en segundo plano cuando entrenamos un modelo, veamos los puntos que se deben tener en cuenta al entrenar un modelo.

Entrenamiento en grandes conjuntos de datos

Hay algunos aspectos diferentes en los que pensar cuando piensas utilizar un gran conjunto de datos para entrenar un modelo. Por ejemplo, puedes ajustar el tamaño del lote, controlar la utilización de GPU , elegir utilizar el entrenamiento multiescala, etc. Veamos cada una de estas opciones en detalle.

Tamaño del lote y utilización de GPU

When training models on large datasets, efficiently utilizing your GPU is key. Batch size is an important factor. It is the number of data samples that a machine learning model processes in a single training iteration. Using the maximum batch size supported by your GPU, you can fully take advantage of its capabilities and reduce the time model training takes. However, you want to avoid running out of GPU memory. If you encounter memory errors, reduce the batch size incrementally until the model trains smoothly.

Con respecto a YOLOv8, puede establecer el parámetro batch_size en el parámetro configuración de entrenamiento to match your GPU capacity. Also, setting batch=-1 en tu script de entrenamiento determinará automáticamente el tamaño del lote que puede procesarse eficazmente en función de las capacidades de tu dispositivo. Ajustando el tamaño del lote, puedes aprovechar al máximo tus recursos de GPU y mejorar el proceso global de entrenamiento.

Entrenamiento de subconjuntos

El entrenamiento de subconjuntos es una estrategia inteligente que implica entrenar el 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 tiene poco tiempo o experimenta con diferentes configuraciones de modelos, el entrenamiento de subconjuntos es una buena opción.

Cuando se trata de YOLOv8, puede implementar fácilmente el entrenamiento de subconjuntos mediante el comando fraction parámetro. Este parámetro le permite especificar qué fracción del conjunto de datos se usará para el entrenamiento. Por ejemplo, la configuración fraction=0.1 entrenará el modelo con el 10 % de los datos. Puede usar esta técnica para iteraciones rápidas y ajustar el modelo antes de comprometerse a entrenar un modelo con un conjunto de datos completo. El entrenamiento de subconjuntos le 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 distintos tamaños. Tu modelo puede aprender a detectar objetos a diferentes escalas y distancias y hacerse más robusto.

Por ejemplo, cuando entrenes YOLOv8, puedes activar el entrenamiento multiescala configurando 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, la configuración scale=0.5 reducirá el tamaño de la imagen a la mitad, mientras que scale=2.0 lo duplicará. La configuración de este parámetro permite que el modelo experimente una variedad de escalas de imagen y mejore sus capacidades de detección en diferentes tamaños y escenarios de objetos.

Caché

El almacenamiento en caché es una técnica importante para mejorar la eficacia del entrenamiento de los modelos de aprendizaje automático. Al almacenar imágenes preprocesadas en la memoria, el almacenamiento en caché reduce el tiempo que el 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 durante el entrenamiento YOLOv8 Usando el comando cache parámetro:

  • cache=True: Almacena imágenes de conjuntos de datos en la memoria RAM, lo que proporciona 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 la carga de datos nuevos cada vez.
  • cache=False: Deshabilita el almacenamiento en caché, confiando completamente en la E/S de 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 mediante el uso de 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 una computación más rápida y un menor uso de memoria. Sin embargo, en FP32 se conserva una copia maestra de los pesos del modelo para garantizar la precisión durante los pasos de actualización de pesos. Puede manejar modelos más grandes o tamaños de lote más grandes dentro de las mismas restricciones de hardware.

Visión general del entrenamiento de precisión mixto

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

El entrenamiento de precisión mixta es sencillo cuando se trabaja con YOLOv8. Puede utilizar la función amp en la configuración de entrenamiento. Ajuste amp=True habilita el entrenamiento automático de precisión mixta (AMP). El entrenamiento de precisión mixta es una forma sencilla pero eficaz de optimizar el proceso de entrenamiento de modelos.

Pesos preentrenados

Utilizar pesos preentrenados es una forma inteligente de acelerar el proceso de entrenamiento de tu modelo. Los pesos preentrenados proceden de modelos ya entrenados en grandes conjuntos de datos, lo que da ventaja a tu modelo. El aprendizaje por transferencia adapta los modelos preentrenados a nuevas tareas relacionadas. El ajuste fino de un modelo preentrenado implica empezar 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.

En pretrained hace que el aprendizaje por transferencia sea fácil con YOLOv8. Ajuste pretrained=True usará ponderaciones preentrenadas predeterminadas o puede especificar una ruta de acceso a un modelo preentrenado personalizado. El uso de pesas previamente entrenadas y el aprendizaje por transferencia aumentan eficazmente las capacidades de su modelo y reducen los costos de entrenamiento.

Otras técnicas que se deben tener en cuenta al manejar un conjunto de datos de gran tamaño

Hay un par de otras técnicas que se deben tener en cuenta al manejar un conjunto de datos de gran tamaño:

  • Programadores de la tasa de aprendizaje: La aplicació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 YOLOv8, la lrf ayuda a administrar 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 repartiendo la carga de trabajo de entrenamiento entre varias GPUs o máquinas.

El número de épocas para entrenar

Al entrenar un modelo, una época hace referencia a un paso 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 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 se sobreajusta pronto, puede reducir el número de épocas. Si no se produce un sobreajuste después de 300 épocas, puede 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 del 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 de forma eficaz, mientras que los conjuntos de datos más pequeños pueden necesitar menos épocas para evitar el sobreajuste. Con respecto a YOLOv8, puede establecer el parámetro epochs en el script de entrenamiento.

Parada temprana

La detención temprana es una técnica valiosa para optimizar el entrenamiento del modelo. Al supervisar el rendimiento de la validación, puede detener el entrenamiento una vez que el modelo deje de mejorar. Puede ahorrar recursos computacionales y evitar el sobreajuste.

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

Visión general de la parada anticipada

Para YOLOv8, puede habilitar la detención anticipada estableciendo el parámetro patience en su configuración de entrenamiento. Por ejemplo patience=5 significa que el entrenamiento se detendrá si no hay una 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 cálculos excesivos.

Elegir entre la formación en la nube y la local

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

El entrenamiento en la nube ofrece escalabilidad y un 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, acelerando los tiempos de entrenamiento y permitiendo experimentos 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.

La capacitación local proporciona un mayor control y personalización, lo que le permite adaptar su 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 los datos permanecen en las instalaciones, son más seguros. Sin embargo, el hardware local puede tener limitaciones de recursos y requerir mantenimiento, lo que puede dar lugar 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 la red neuronal para minimizar la función de pérdida, que mide el rendimiento del modelo. En términos más simples, 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 puede ajustar los parámetros del optimizador para mejorar el rendimiento del modelo. El ajuste de la velocidad de aprendizaje establece el tamaño de los pasos al actualizar los parámetros. Para mayor estabilidad, puede comenzar con una tasa de aprendizaje moderada y disminuirla gradualmente con el tiempo para mejorar el aprendizaje a largo plazo. Además, establecer el impulso determina cuánta influencia tienen las actualizaciones pasadas en las actuales. Un valor común para el impulso es alrededor de 0.9. Por lo general, proporciona un buen equilibrio.

Optimizadores comunes

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

  • SGD (Descenso 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 simple y eficiente, pero puede ser lento para converger y puede quedarse atascado en mínimos locales.
  • Adam (Estimación Adaptativa de Momentos):

    • Combina los beneficios de SGD con momentum y RMSProp.
    • Ajusta la tasa de aprendizaje de cada parámetro en función de las estimaciones del primer y segundo momento de los gradientes.
    • Muy adecuado para datos ruidosos y gradientes dispersos.
    • Eficiente y, por lo general, requiere menos ajustes, lo que lo convierte en un optimizador recomendado para YOLOv8.
  • RMSProp (Propagación de la raíz cuadrada media):

    • Ajusta la tasa de aprendizaje de 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 de desaparición y es eficaz para las redes neuronales recurrentes.

Para YOLOv8el optimizer le permite elegir entre varios optimizadores, incluidos SGD, Adam, AdamW, NAdam, RAdam y RMSProp, o puede configurarlo en auto para la selección automática basada en la configuración del modelo.

Conectar con la Comunidad

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

Recursos comunitarios

  • Cuestiones de GitHub: Visita el repositorio GitHub deYOLOv8 y utiliza la pestaña Cuestiones para hacer preguntas, informar de errores y sugerir nuevas funciones. La comunidad y los mantenedores son muy activos y están dispuestos a ayudar.
  • Ultralytics Servidor Discord: Únete al servidor Discord deUltralytics para chatear con otros usuarios y desarrolladores, obtener ayuda y compartir tus experiencias.

Documentación oficial

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

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

Conclusiones clave

El entrenamiento de modelos de visión artificial implica seguir buenas prácticas, optimizar sus estrategias y resolver problemas a medida que surgen. Técnicas como el ajuste del tamaño de los lotes, el entrenamiento de precisión mixta y el inicio con pesas previamente entrenadas pueden hacer que los modelos funcionen mejor y entrenen más rápido. Métodos como el entrenamiento de subconjuntos y la detención temprana le ayudan a ahorrar tiempo y recursos. Mantenerte conectado con la comunidad y mantenerte 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 GPU al entrenar un gran conjunto de datos con Ultralytics YOLO ?

Para mejorar la utilización de GPU , configura batch_size en tu configuración de entrenamiento al tamaño máximo admitido por tu GPU. Esto garantiza que aprovechas al máximo las capacidades de GPU, reduciendo el tiempo de entrenamiento. Si encuentras errores de memoria, reduce gradualmente el tamaño del lote hasta que el entrenamiento se realice sin problemas. Para YOLOv8, establece batch=-1 in your training script will automatically determine the optimal batch size for efficient processing. For further information, refer to the configuración de entrenamiento.

¿Qué es el entrenamiento de precisión mixto y cómo lo activo en YOLOv8?

El entrenamiento de 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. Este enfoque acelera el entrenamiento y reduce el uso de memoria sin sacrificar la precisión del modelo. Para activar el entrenamiento de precisión mixta en YOLOv8, establece la opción amp parámetro a True in your training configuration. This activates Automatic Mixed Precision (AMP) training. For more details on this optimization technique, see the configuración de entrenamiento.

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

El entrenamiento multiescala mejora el rendimiento del modelo mediante el entrenamiento en imágenes de distintos tamaños, lo que permite al modelo generalizar mejor a través de diferentes escalas y distancias. En YOLOv8, puedes activar el entrenamiento multiescala configurando la opción 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 doubles it. This technique simulates objects at different distances, making the model more robust across various scenarios. For settings and more details, check out the configuración de entrenamiento.

¿Cómo puedo utilizar pesos preentrenados para acelerar el entrenamiento en YOLOv8?

Utilizar pesos preentrenados puede reducir significativamente el tiempo de entrenamiento y mejorar el rendimiento del modelo, al partir de un modelo que ya comprende las características básicas. En YOLOv8, puedes establecer los pretrained parámetro a True or specify a path to custom pre-trained weights in your training configuration. This approach, known as transfer learning, leverages knowledge from large datasets to adapt to your specific task. Learn more about pre-trained weights and their advantages aquí.

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 ajusta demasiado pronto, puedes reducir el número. Alternativamente, si no se observa sobreajuste, puedes ampliar el entrenamiento a 600, 1200 o más épocas. Para establecerlo en YOLOv8, utiliza la opción epochs parameter in your training script. For additional advice on determining the ideal number of epochs, refer to this section on number of epochs.



Created 2024-06-26, Updated 2024-07-05
Authors: glenn-jocher (3), Laughing-q (1), abirami-vina (1)

Comentarios