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.



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

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.

How to Train a Machine Learning Model

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.

During training, the model iteratively makes predictions, calculates errors, and updates its parameters through a process called backpropagation. In this process, the model adjusts its internal parameters (weights and biases) to reduce the errors. By repeating this cycle many times, the model gradually improves its accuracy. Over time, it learns to recognize complex patterns such as shapes, colors, and textures.

¿Qué es la retropropagación?

This learning process makes it possible for the computer vision model to perform various tasks, including object detection, instance segmentation, and image classification. The ultimate goal is to create a model that can generalize its learning to new, unseen images so that it can accurately understand visual data in real-world applications.

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

Al entrenar modelos en grandes conjuntos de datos, es fundamental utilizar eficazmente tu 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 tu GPU, puedes aprovechar al máximo sus capacidades y reducir el tiempo que tarda el entrenamiento del modelo. Sin embargo, debes evitar quedarte sin memoria GPU . Si encuentras errores de memoria, reduce el tamaño del lote de forma incremental hasta que el modelo se entrene sin problemas.

With respect to YOLO11, you can set the batch_size en el parámetro configuración de entrenamiento para que coincida con tu capacidad GPU . Además, ajusta batch=-1 in your training script will automatically determine the batch size that can be efficiently processed based on your device's capabilities. By fine-tuning the batch size, you can make the most of your GPU resources and improve the overall training process.

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.

When it comes to YOLO11, you can easily implement subset training by using the 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.

For example, when you train YOLO11, you can enable multiscale training by setting the 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.

Caching can be controlled when training YOLO11 using the 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

Mixed precision training uses both 16-bit (FP16) and 32-bit (FP32) floating-point types. The strengths of both FP16 and FP32 are leveraged by using FP16 for faster computation and FP32 to maintain precision where needed. Most of the neural network's operations are done in FP16 to benefit from faster computation and lower memory usage. However, a master copy of the model's weights is kept in FP32 to ensure accuracy during the weight update steps. You can handle larger models or larger batch sizes within the same hardware constraints.

Visión general del entrenamiento de precisión mixto

To implement mixed precision training, you'll need to modify your training scripts and ensure your hardware (like GPUs) supports it. Many modern deep learning frameworks, such as Tensorflow, offer built-in support for mixed precision.

Mixed precision training is straightforward when working with YOLO11. You can use the 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

Using pretrained weights is a smart way to speed up your model's training process. Pretrained weights come from models already trained on large datasets, giving your model a head start. Transfer learning adapts pretrained models to new, related tasks. Fine-tuning a pre-trained model involves starting with these weights and then continuing training on your specific dataset. This method of training results in faster training times and often better performance because the model starts with a solid understanding of basic features.

En pretrained parameter makes transfer learning easy with YOLO11. Setting 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:

  • Learning Rate Schedulers: Implementing learning rate schedulers dynamically adjusts the learning rate during training. A well-tuned learning rate can prevent the model from overshooting minima and improve stability. When training YOLO11, the 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.

A common question that comes up is how to determine the number of epochs to train the model for. A good starting point is 300 epochs. If the model overfits early, you can reduce the number of epochs. If overfitting does not occur after 300 epochs, you can extend the training to 600, 1200, or more epochs.

However, the ideal number of epochs can vary based on your dataset's size and project goals. Larger datasets might require more epochs for the model to learn effectively, while smaller datasets might need fewer epochs to avoid overfitting. With respect to YOLO11, you can set the 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.

The process involves setting a patience parameter that determines how many epochs to wait for an improvement in validation metrics before stopping training. If the model's performance does not improve within these epochs, training is stopped to avoid wasting time and resources.

Visión general de la parada anticipada

For YOLO11, you can enable early stopping by setting the patience parameter in your training configuration. For example, 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

An optimizer is an algorithm that adjusts the weights of your neural network to minimize the loss function, which measures how well the model is performing. In simpler terms, the optimizer helps the model learn by tweaking its parameters to reduce errors. Choosing the right optimizer directly affects how quickly and accurately the model learns.

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.
    • Efficient and generally requires less tuning, making it a recommended optimizer for YOLO11.
  • 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.
    • Helps in handling the vanishing gradient problem and is effective for recurrent neural networks.

For YOLO11, the 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

  • GitHub Issues: Visit the YOLO11 GitHub repository and use the Issues tab to ask questions, report bugs, and suggest new features. The community and maintainers are very active and ready to help.
  • 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 Documentation: Check out the official YOLO11 documentation for detailed guides and helpful tips on various computer vision projects.

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

Training computer vision models involves following good practices, optimizing your strategies, and solving problems as they arise. Techniques like adjusting batch sizes, mixed precision training, and starting with pre-trained weights can make your models work better and train faster. Methods like subset training and early stopping help you save time and resources. Staying connected with the community and keeping up with new trends will help you keep improving your model training skills.

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 parameter in your training configuration to the maximum size supported by your GPU. This ensures that you make full use of the GPU's capabilities, reducing training time. If you encounter memory errors, incrementally reduce the batch size until training runs smoothly. For YOLO11, setting 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 página configuración de entrenamiento.

What is mixed precision training, and how do I enable it in YOLO11?

Mixed precision training utilizes both 16-bit (FP16) and 32-bit (FP32) floating-point types to balance computational speed and precision. This approach speeds up training and reduces memory usage without sacrificing model accuracy. To enable mixed precision training in YOLO11, set the amp parámetro a True en tu configuración de entrenamiento. Esto activa el entrenamiento de Precisión Mixta Automática (AMP). Para más detalles sobre esta técnica de optimización, consulta la página configuración de entrenamiento.

How does multiscale training enhance YOLO11 model performance?

Multiscale training enhances model performance by training on images of varying sizes, allowing the model to better generalize across different scales and distances. In YOLO11, you can enable multiscale training by setting the 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 distintas distancias, lo que hace que el modelo sea más robusto en distintos escenarios. Para los ajustes y más detalles, consulta la página configuración de entrenamiento.

How can I use pre-trained weights to speed up training in YOLO11?

Using pre-trained weights can significantly reduce training times and improve model performance by starting from a model that already understands basic features. In YOLO11, you can set the pretrained parámetro a True o especifica una ruta a pesos preentrenados personalizados en tu configuración de entrenamiento. Este enfoque, conocido como aprendizaje por transferencia, aprovecha el conocimiento de grandes conjuntos de datos para adaptarse a tu tarea específica. Más información sobre los pesos preentrenados y sus ventajas aquí.

The number of epochs refers to the complete passes through the training dataset during model training. A typical starting point is 300 epochs. If your model overfits early, you can reduce the number. Alternatively, if overfitting isn't observed, you might extend training to 600, 1200, or more epochs. To set this in YOLO11, use the epochs en tu script de entrenamiento. Para obtener más consejos sobre cómo determinar el número ideal de épocas, consulta esta sección sobre número de épocas.

📅 Created 3 months ago ✏️ Updated 4 days ago

Comentarios