Mejores prácticas de aprendizaje automático y consejos 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, es necesario definir los objetivos y recoger y anotar los datos. Después de preprocesar los datos para asegurarte de que están limpios y son coherentes, puedes pasar a entrenar tu modelo.
Observa: Consejos para el entrenamiento de modelos | Cómo manejar grandes conjuntos de datos | Tamaño del lote, GPU Utilización y Precisión mixta
¿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. Tiene un impacto directo en el rendimiento y la precisión de su aplicación. En esta guía, cubriremos las mejores prácticas, técnicas de optimización y consejos para la resolución de problemas que te ayudarán a entrenar tus modelos de visión por ordenador de forma efectiva.
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 se alimenta de un gran conjunto de imágenes etiquetadas. Realiza predicciones sobre lo que hay en esas imágenes, y las predicciones se comparan con las etiquetas o contenidos reales para calcular los errores. Estos errores muestran la distancia entre las predicciones del modelo y los valores reales.
Durante el entrenamiento, el modelo realiza predicciones de forma iterativa, calcula los errores y actualiza sus parámetros mediante 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.
Este proceso de aprendizaje permite al modelo de visión por ordenador realizar 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 capaz de 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 ocurre entre bastidores cuando entrenamos un modelo, veamos los puntos que hay que tener en cuenta al entrenar un modelo.
Entrenamiento en grandes conjuntos de datos
Hay varios aspectos en los que pensar cuando se planea utilizar un gran conjunto de datos para entrenar un modelo. Por ejemplo, puede 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
Cuando se entrenan modelos en grandes conjuntos de datos, es fundamental utilizar eficazmente su GPU . El tamaño del lote es un factor importante. Es el número de muestras de datos que procesa un modelo de aprendizaje automático en una sola iteración de entrenamiento. Utilizando el tamaño máximo de lote que admite su GPU, puede aprovechar al máximo sus capacidades y reducir el tiempo que tarda el entrenamiento del modelo. Sin embargo, debe evitar quedarse sin memoria en GPU . Si encuentra errores de memoria, reduzca el tamaño del lote gradualmente hasta que el modelo se entrene sin problemas.
Observa: 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
en el parámetro configuración de la formación para que coincida con su capacidad GPU . Además, el ajuste batch=-1
en su script de entrenamiento determinará automáticamente el tamaño del lote que pueden procesarse eficazmente en función de las capacidades de su dispositivo. Ajustando el tamaño del lote, puedes aprovechar al máximo los recursos de GPU y mejorar el proceso de formación en general.
Formación de subconjuntos
El entrenamiento de subconjuntos es una estrategia inteligente que consiste en 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 dispone de poco tiempo o está experimentando con distintas configuraciones del modelo, el entrenamiento de subconjuntos es una buena opción.
Cuando se trata de YOLO11, puede implementar fácilmente la formación de subconjuntos utilizando la función fraction
parámetro. Este parámetro permite especificar qué fracción del conjunto de datos se utilizará para el entrenamiento. Por ejemplo, si establece fraction=0.1
entrenará su modelo en el 10% de los datos. Puede utilizar esta técnica para realizar iteraciones rápidas y ajustar su modelo antes de comprometerse a entrenar un modelo utilizando un conjunto de datos completo. El entrenamiento de subconjuntos le ayuda a progresar rápidamente y a identificar posibles problemas desde el principio.
Formación multiescala
El entrenamiento multiescala es una técnica que mejora la capacidad de generalización del modelo entrenándolo con imágenes de distintos tamaños. Su modelo puede aprender a detectar objetos a diferentes escalas y distancias y hacerse más robusto.
Por ejemplo, al entrenar YOLO11, puede activar el entrenamiento multiescala configurando la función 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, si se ajusta 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 a través de diferentes tamaños de objetos y escenarios.
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 GPU pasa esperando a que los datos se carguen desde el disco. El modelo puede recibir datos continuamente sin retrasos causados por las operaciones de E/S del disco.
El almacenamiento en caché puede controlarse cuando se entrena YOLO11 utilizando la función cache
parámetro:
cache=True
: Almacena las imágenes de los conjuntos de datos en RAM, lo que proporciona la mayor velocidad de acceso 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 nuevos cada vez.cache=False
: Desactiva el almacenamiento en caché, confiando totalmente en la E/S de disco, que es la opción más lenta.
Entrenamiento de precisión mixto
El entrenamiento de precisión mixta utiliza tipos de coma flotante de 16 bits (FP16) y 32 bits (FP32). Los puntos fuertes de FP16 y FP32 se aprovechan utilizando FP16 para un cálculo más rápido 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, una copia maestra de los pesos del modelo se mantiene en FP32 para asegurar 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.
Para implementar el entrenamiento de precisión mixta, tendrás que modificar tus scripts de entrenamiento y asegurarte de que tu hardware (como las GPU) lo admite. Muchos marcos de aprendizaje profundo modernos, como PyTorch y TensorFlowofrecen soporte integrado para precisión mixta.
El entrenamiento de precisión mixta es sencillo cuando se trabaja con YOLO11. Puede utilizar la función amp
en la configuración del entrenamiento. Configuración de amp=True
permite 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.
Pesas preentrenadas
Utilizar ponderaciones preentrenadas es una forma inteligente de acelerar el proceso de entrenamiento de su modelo. Los pesos preentrenados proceden de modelos ya entrenados en grandes conjuntos de datos, lo que proporciona a su modelo una ventaja. El aprendizaje por transferencia adapta los modelos preentrenados a nuevas tareas relacionadas. El ajuste de un modelo preentrenado consiste en empezar con estas ponderaciones y continuar el entrenamiento en su conjunto de datos específico. Este método de entrenamiento acelera los tiempos de entrenamiento y, a menudo, mejora el rendimiento, ya que el modelo comienza con una sólida comprensión de las características básicas.
En pretrained
facilita el aprendizaje por transferencia con YOLO11. Configuración de pretrained=True
utilizará los pesos preentrenados por defecto, o puede especificar una ruta a un modelo preentrenado personalizado. El uso de pesos preentrenados y el aprendizaje por transferencia potencian eficazmente las capacidades de su modelo y reducen los costes de formación.
Otras técnicas a tener en cuenta cuando se maneja un gran conjunto de datos
Hay un par de técnicas más a tener en cuenta cuando se maneja un gran conjunto de datos:
- Programadores del ritmo 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. Cuando se entrena YOLO11, el
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. - Formación distribuida: 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 entre varias GPU o máquinas. Este enfoque es especialmente valioso para proyectos a escala empresarial con importantes recursos computacionales.
El número de épocas para entrenar
Cuando se entrena 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 que el modelo aprenda y perfeccione sus parámetros con el tiempo.
Una pregunta frecuente 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 adapta demasiado pronto, puede reducir el número de épocas. Si no se produce 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 necesitar 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 YOLO11, puede establecer el valor epochs
en el script de entrenamiento.
Parada anticipada
La detención temprana es una técnica valiosa para optimizar el entrenamiento de modelos. Controlando el rendimiento de la validación, puede detener el entrenamiento cuando el modelo deje de mejorar. Puede ahorrar recursos informáticos y evitar el sobreajuste.
El proceso consiste en establecer un parámetro de paciencia que determina cuántas épocas hay que esperar para obtener una mejora en las métricas de validación antes de detener el entrenamiento. Si el rendimiento del modelo no mejora en esas épocas, se detiene el entrenamiento para evitar pérdidas de tiempo y recursos.
Para YOLO11, puede activar la parada 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 ninguna 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álculo excesivo.
Elegir entre formación en la nube y formación local
Hay dos opciones para entrenar tu modelo: entrenamiento en la nube y entrenamiento local.
La formación 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 GPU y TPU 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 ser caro, especialmente durante largos periodos, y la transferencia de datos puede añadir costes y latencia.
La formación local proporciona un mayor control y personalización, lo que le permite adaptar su entorno a necesidades específicas y evitar los costes continuos de la nube. Puede resultar más económico para proyectos a largo plazo y, como los 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 alargar el tiempo de formación de los 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 sencillos, el optimizador ayuda al modelo a aprender ajustando sus parámetros para reducir los errores. Elegir el 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 tasa de aprendizaje determina el tamaño de los pasos al actualizar los parámetros. En aras de la estabilidad, puede empezar con una tasa de aprendizaje moderada y reducirla gradualmente con el tiempo para mejorar el aprendizaje a largo plazo. Además, el ajuste del impulso determina el grado de influencia de las actualizaciones anteriores sobre las actuales. Un valor común para el impulso es alrededor de 0,9. Generalmente proporciona un buen equilibrio. Suele proporcionar un buen equilibrio.
Optimizadores comunes
Los distintos optimizadores tienen diversos puntos fuertes y débiles. Veamos algunos de los optimizadores más 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.
- Sencillo y eficaz, pero puede tardar en converger y quedarse atascado en mínimos locales.
-
Adam (Estimación Adaptativa de Momentos):
- Combina las ventajas de SGD con impulso y RMSProp.
- Ajusta la tasa de aprendizaje para cada parámetro basándose en las estimaciones del primer y segundo momento de los gradientes.
- Adecuado para datos ruidosos y gradientes dispersos.
- Es eficaz y, por lo general, requiere menos ajustes, lo que lo convierte en un optimizador recomendado para YOLO11.
-
RMSProp (propagación de la raíz cuadrada 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 resolver el problema del gradiente evanescente y es eficaz para las redes neuronales recurrentes.
Para YOLO11, el optimizer
le permite elegir entre varios optimizadores, incluidos SGD, Adam, AdamW, NAdam, RAdam y RMSProp, o puede establecerlo en auto
para la selección automática en función de la configuración del modelo.
Conectar con la Comunidad
Formar parte de una comunidad de entusiastas de la visión por computador puede ayudarte a resolver problemas y aprender más rápido. Aquí tienes algunas formas de conectar, obtener ayuda y compartir ideas.
Recursos comunitarios
- Problemas en GitHub: Visita el repositorio GitHub deYOLO11 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 YOLO11 Documentación: Consulte la documentación oficial de YOLO11 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 retos y a mantenerse al día de las últimas tendencias y prácticas en la comunidad de visión por ordenador.
Principales conclusiones
El entrenamiento de modelos de visión por ordenador implica seguir buenas prácticas, optimizar las estrategias y resolver los 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 pesos preentrenados pueden hacer que sus modelos funcionen mejor y se entrenen más rápido. Métodos como el entrenamiento de subconjuntos y la detención temprana ayudan a ahorrar tiempo y recursos. Permanecer conectado con la comunidad y mantenerse al día de las nuevas tendencias le ayudará a seguir mejorando sus 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 , configure batch_size
en tu configuración de entrenamiento al tamaño máximo admitido por tu GPU. De este modo, te aseguras de que aprovechas al máximo las capacidades de GPU, reduciendo el tiempo de entrenamiento. Si se producen errores de memoria, reduzca gradualmente el tamaño del lote hasta que el entrenamiento se realice sin problemas. Para YOLO11, ajuste batch=-1
en su script de entrenamiento determinará automáticamente el tamaño de lote óptimo para un procesamiento eficiente. Para más información, consulte la página configuración de la formación.
¿Qué es el entrenamiento de precisión mixta y cómo se activa en YOLO11?
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 el modelo. precisión. Para habilitar el entrenamiento de precisión mixta en YOLO11, configure la opción amp
a True
en su configuración de entrenamiento. Esto activa el entrenamiento de Precisión Mixta Automática (AMP). Para obtener más información sobre esta técnica de optimización, consulte la página configuración de la formación.
¿Cómo mejora el entrenamiento multiescala el rendimiento del modelo YOLO11 ?
El entrenamiento multiescala mejora el rendimiento del modelo mediante el entrenamiento en imágenes de diferentes tamaños, lo que permite al modelo generalizar mejor a través de diferentes escalas y distancias. En YOLO11, puede activar el entrenamiento multiescala configurando 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, lo que hace que el modelo sea más robusto en diversos escenarios. Para más información, consulta la página configuración de la formación.
¿Cómo puedo utilizar pesos preentrenados para acelerar el entrenamiento en YOLO11?
El uso de 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 YOLO11, puede establecer los pretrained
a True
o especifique una ruta a pesos preentrenados personalizados en su configuración de entrenamiento. Este enfoque, conocido como aprendizaje por transferencia, aprovecha el conocimiento de grandes conjuntos de datos para adaptarse a su tarea específica. Más información sobre los pesos preentrenados y sus ventajas aquí.
¿Cuál es el número de épocas recomendado para el entrenamiento de un modelo y cómo se establece en YOLO11?
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 el modelo se ajusta demasiado pronto, puede reducir el número. Alternativamente, si no se observa sobreajuste, puede ampliar el entrenamiento a 600, 1200 o más épocas. Para establecer esto en YOLO11, utilice la opción epochs
en el script de entrenamiento. Para obtener más consejos sobre cómo determinar el número ideal de épocas, consulte esta sección sobre número de épocas.