¿Cómo entrenar un conjunto de datos personalizado con YOLOv5?

¿Cómo entrenar un conjunto de datos personalizado con YOLOv5?

Nodo de origen: 1953267

Introducción

Hemos visto algunos términos sofisticados para la IA y el aprendizaje profundo, como modelos preentrenados, transferencia de aprendizaje, etc. Déjame educarte con una tecnología ampliamente utilizada y una de las más importantes y efectivas: Transferencia de aprendizaje con YOLOv5.

You Only Look Once, o YOLO, es uno de los métodos de identificación de objetos basados ​​en el aprendizaje profundo más utilizados. Usando un conjunto de datos personalizado, este artículo le mostrará cómo entrenar una de sus variaciones más recientes, YOLOv5.

OBJETIVOS DE APRENDIZAJE 

  1. Este artículo se centrará principalmente en entrenar el modelo YOLOv5 en una implementación de conjunto de datos personalizado.
  2. Veremos qué son los modelos pre-entrenados y qué es el aprendizaje por transferencia.
  3. Entenderemos qué es YOLOv5 y por qué estamos usando la versión 5 de YOLO.

Entonces, sin perder tiempo, comencemos con el proceso.

Tabla de Contenido

  1. Modelos pre-entrenados
  2. Transferir aprendizaje
  3. ¿Qué y por qué YOLOv5?
  4. Pasos involucrados en el aprendizaje por transferencia
  5. Implementación
  6. Algunos desafíos que puedes enfrentar
  7. Conclusión

Modelos Pre-entrenados

Es posible que haya escuchado a los científicos de datos usar el término "modelo preentrenado" ampliamente. Después de explicar qué hace un modelo/red de aprendizaje profundo, explicaré el término. Un modelo de aprendizaje profundo es un modelo que contiene varias capas apiladas juntas para cumplir un único propósito, como clasificación, detección, etc. Las redes de aprendizaje profundo aprenden al descubrir estructuras complicadas en los datos que se les alimentan y guardan los pesos en un archivo que luego se utilizan para realizar tareas similares. Los modelos preentrenados ya son modelos de Deep Learning entrenados. Lo que significa es que ya están entrenados en un enorme conjunto de datos que contiene millones de imágenes.

Así es como el TensorFlow sitio web define modelos pre-entrenados: Un modelo preentrenado es una red guardada que se entrenó previamente en un gran conjunto de datos, generalmente en una tarea de clasificación de imágenes a gran escala.

Unos altamente optimizados y extraordinariamente eficientes modelos pre-entrenados están disponibles en Internet. Se utilizan diferentes modelos para realizar diferentes tareas. Algunos de los modelos preentrenados son VGG-16, VGG-19, YOLOv5, YOLOv3 y Red 50.

El modelo a utilizar depende de la tarea que desee realizar. Por ejemplo, si quiero realizar una detección de objetos tarea, usaré el modelo YOLOv5.

Transferir aprendizaje

Transferir aprendizaje es la técnica más importante que facilita la tarea de un científico de datos. Entrenar a un modelo es una tarea pesada y que requiere mucho tiempo; si se entrena un modelo desde cero, no suele dar muy buenos resultados. Incluso si entrenamos un modelo similar a un modelo previamente entrenado, no funcionará con tanta eficacia y puede llevar semanas entrenar un modelo. En cambio, podemos usar los modelos previamente entrenados y usar los pesos ya aprendidos entrenándolos en un conjunto de datos personalizado para realizar una tarea similar. Estos modelos son altamente eficientes y refinados en términos de arquitectura y rendimiento, y se han abierto camino hasta la cima al tener un mejor desempeño en diferentes concursos. Estos modelos están entrenados en grandes cantidades de datos, lo que los hace más diversos en el conocimiento.

Por lo tanto, transferir el aprendizaje básicamente significa transferir el conocimiento obtenido al entrenar el modelo con datos anteriores para ayudar al modelo a aprender mejor y más rápido para realizar una tarea diferente pero similar.

Por ejemplo, usar un YOLOv5 para la detección de objetos, pero el objeto es diferente a los datos anteriores del objeto que se usó.

¿Qué y por qué YOLOv5?

YOLOv5 es un modelo preentrenado que significa que solo mira una vez que la versión 5 se usa para la detección de objetos en tiempo real y ha demostrado ser altamente eficiente en términos de precisión y tiempo de inferencia. Hay otras versiones de YOLO, pero como se podría predecir, YOLOv5 funciona mejor que otras versiones. YOLOv5 es rápido y fácil de usar. Se basa en el marco PyTorch, que tiene una comunidad más grande que Yolo v4 Darknet.

yolov5

Ahora veremos la arquitectura de YOLOv5.

La estructura puede parecer confusa, pero no importa, ya que no tenemos que mirar la arquitectura, sino usar directamente el modelo y los pesos.

En el aprendizaje de transferencia, usamos el conjunto de datos personalizado, es decir, los datos que el modelo nunca ha visto antes O los datos en los que el modelo no está entrenado. Dado que el modelo ya está entrenado en un gran conjunto de datos, ya tenemos los pesos. Ahora podemos entrenar el modelo para varias épocas en los datos en los que queremos trabajar. Se requiere capacitación ya que el modelo ha visto los datos por primera vez y requerirá algunos conocimientos para realizar la tarea.

Pasos involucrados en el aprendizaje por transferencia

Transferir el aprendizaje es un proceso simple, y podemos hacerlo en unos simples pasos:

  1. Preparación de datos
  2. El formato correcto para las anotaciones.
  3. Cambia algunas capas si quieres
  4. Vuelva a entrenar el modelo para algunas iteraciones
  5. Validar/Prueba

Preparación de datos

La preparación de datos puede llevar mucho tiempo si los datos elegidos son un poco grandes. La preparación de datos significa anotar las imágenes, que es un proceso en el que etiqueta las imágenes haciendo un cuadro alrededor del objeto en la imagen. Al hacer esto, las coordenadas del objeto marcado se guardarán en un archivo que luego se alimentará al modelo para el entrenamiento. Hay algunos sitios web, como hace sentido.ai y roboflow.com, que puede ayudarlo a etiquetar los datos. 

Así es como puede anotar los datos para el modelo YOLOv5 enmakesense.ai.

1. Visite https://www.makesense.ai/. 

2. Haga clic en comenzar en la parte inferior derecha de la pantalla.

yolov5

3. Seleccione las imágenes que desea etiquetar haciendo clic en el cuadro resaltado en el centro.

Cargue las imágenes que desea anotar y haga clic en detección de objetos.
yolov5

4. Después de cargar las imágenes, se le pedirá que cree etiquetas para las diferentes clases de su conjunto de datos.

Estoy detectando matrículas en un vehículo, por lo que la única etiqueta que usaré es "Placa de matrícula". Puede hacer más etiquetas simplemente presionando enter haciendo clic en el botón '+' en el lado izquierdo del cuadro de diálogo.

Una vez que haya creado todas las etiquetas, haga clic en iniciar proyecto.

yolov5

Si se ha saltado alguna etiqueta, puede editarla más tarde haciendo clic en acciones y luego editar etiquetas.

5. Comience a crear un cuadro delimitador alrededor del objeto en la imagen. Este ejercicio puede ser un poco divertido al principio, pero con datos muy grandes, puede ser agotador.

cuadro delimitador

6. Después de anotar todas las imágenes, debe guardar el archivo que contendrá las coordenadas de los cuadros delimitadores junto con la clase.

Por lo tanto, debe dirigirse al botón de acciones y hacer clic en exportar anotaciones. No olvide marcar la opción 'Un paquete zip que contiene archivos en formato YOLO', ya que esto guardará los archivos en el formato correcto según lo requerido en el modelo YOLO.

modelo YOLO

7. Este es un paso significativo, así que sígalo con cuidado.

Una vez que tenga todos los archivos y las imágenes, cree una carpeta con cualquier nombre. Haga clic en la carpeta y cree dos carpetas más con las imágenes de nombre y las etiquetas dentro de la carpeta. No olvide nombrar la carpeta de la misma manera que arriba, ya que el modelo busca etiquetas automáticamente después de ingresar la ruta de entrenamiento en el comando.

Para darle una idea de la carpeta, creé una carpeta llamada 'CarsData' y en esa carpeta hice dos carpetas: 'imágenes' y 'etiquetas'.

yolov5

Dentro de las dos carpetas, debe crear dos carpetas más llamadas 'tren' y 'val'. En la carpeta de imágenes, puede dividir las imágenes según su voluntad, pero debe tener cuidado al dividir la etiqueta, ya que las etiquetas deben coincidir con las imágenes que ha dividido.

8. Ahora cree un archivo zip de la carpeta y cárguelo en la unidad para que podamos usarlo en colab.

Implementación

Ahora llegaremos a la parte de implementación, que es muy simple pero complicada. Si no sabe qué archivos cambiar exactamente, no podrá entrenar el modelo en el conjunto de datos personalizado. 

Estos son los códigos que debe seguir para entrenar el modelo YOLOv5 en un conjunto de datos personalizado

Le recomiendo que use google colab para este tutorial, ya que también proporciona GPU que proporciona cálculos más rápidos.

1. !git clonar https://github.com/ultralytics/yolov5
Esto hará una copia del repositorio de YOLOv5, que es un repositorio de GitHub creado por ultralytics.

2. cd yolov5
Este es un comando de shell de línea de comandos que se usa para cambiar el directorio de trabajo actual al directorio YOLOv5.

3. !pip install -r requisitos.txt
Este comando instalará todos los paquetes y bibliotecas utilizados en el entrenamiento del modelo.

4. Descomprima '/content/drive/MyDrive/CarsData.zip'
Descomprimiendo la carpeta que contiene imágenes y etiquetas en google colab

Aquí viene el paso más importante…

Ya ha realizado casi todos los pasos y necesita escribir una línea más de código que entrenará el modelo, pero, antes de eso, debe realizar algunos pasos más y cambiar algunos directorios para proporcionar la ruta de su conjunto de datos personalizado. y entrena tu modelo con esos datos.

Aquí está lo que tú necesitas hacer.

Después de realizar los 4 pasos anteriores, tendrá la carpeta yolov5 en su google colab. Vaya a la carpeta yolov5 y haga clic en la carpeta 'datos'. Ahora verá una carpeta llamada 'coco128.yaml'. 

yolov5

Continúe y descargue esta carpeta.

Después de descargar la carpeta, debe realizar algunos cambios en ella y volver a cargarla en la misma carpeta desde la que la descargó.

Veamos ahora el contenido del archivo que hemos descargado, y se verá así.

yolov5

Vamos a personalizar este archivo de acuerdo con nuestro conjunto de datos y anotaciones.

Ya hemos descomprimido el conjunto de datos en colab, por lo que vamos a copiar la ruta de nuestro tren y las imágenes de validación. Después de copiar la ruta de las imágenes del tren, que estará en la carpeta del conjunto de datos y se verá así '/content/yolov5/CarsData/images/train', péguelo en el archivo coco128.yaml, que acabamos de descargar.

Haz lo mismo con las imágenes de prueba y validación.

Ahora, una vez que hayamos terminado con esto, mencionaremos el número de clases como 'nc: 1'. El número de clases, en este caso, es solo 1. Luego mencionaremos el nombre como se muestra en la imagen a continuación. Elimine todas las demás clases y la parte comentada, que no es necesaria, después de lo cual nuestro archivo debería verse así.

Yolo

Guarde este archivo con el nombre que desee. He guardado el archivo con el nombre customPath.yaml y ahora lo subo de nuevo al colab en el mismo lugar donde estaba coco128.yaml. 

Ahora hemos terminado con la parte de edición y estamos listos para entrenar el modelo.

Ejecute el siguiente comando para entrenar su modelo para algunas interacciones en su conjunto de datos personalizado.

No olvide cambiar el nombre del archivo que ha subido ('customPath.yaml). También puede cambiar el número de épocas que desea entrenar el modelo. En este caso, voy a entrenar el modelo solo durante 3 épocas.

5. !python train.py –img 640 –lote 16 –épocas 10 –data /content/yolov5/customPath.yaml –weights yolov5s.pt

Ten en cuenta la ruta donde subes la carpeta. Si se cambia la ruta, los comandos no funcionarán en absoluto.

Después de ejecutar este comando, su modelo debería comenzar a entrenar y verá algo como esto en su pantalla.

Yolo

Yolo

Una vez completadas todas las épocas, su modelo se puede probar en cualquier imagen.

Puede personalizar un poco más en el archivo detect.py sobre lo que desea guardar y lo que no le gusta, las detecciones donde se detectan las matrículas, etc.

6. !python detect.py –weight /content/yolov5/runs/train/exp/weights/best.pt –source ruta_de_la_imagen

Puede usar este comando para probar la predicción del modelo en algunas de las imágenes.

Algunos desafíos que puedes enfrentar

Aunque los pasos explicados anteriormente son correctos, existen algunos problemas que puede enfrentar si no los sigue exactamente. 

  1. Camino equivocado: Esto puede ser un dolor de cabeza o un problema. Si ingresó la ruta incorrecta en algún lugar al entrenar la imagen, puede que no sea fácil de identificar y no podrá entrenar el modelo.
  2. Formato incorrecto de las etiquetas: este es un problema generalizado al que se enfrentan las personas al entrenar un YOLOv5. El modelo solo acepta un formato en el que cada imagen tiene su propio archivo de texto con el formato deseado dentro. A menudo, se envía a la red un archivo de formato XLS o un solo archivo CSV, lo que genera un error. Si está descargando los datos desde algún lugar, en lugar de anotar todas y cada una de las imágenes, puede haber un formato de archivo diferente en el que se guardan las etiquetas. Aquí hay un artículo para convertir el formato XLS al formato YOLO. (enlace después de la finalización del artículo).
  3. No nombrar los archivos correctamente: No nombrar el archivo correctamente conducirá nuevamente a un error. Preste atención a los pasos al nombrar las carpetas y evite este error.

Conclusión

En este artículo, aprendimos qué es el aprendizaje por transferencia y el modelo preentrenado. Aprendimos cuándo y por qué usar el modelo YOLOv5 y cómo entrenar el modelo en un conjunto de datos personalizado. Pasamos por todos y cada uno de los pasos, desde preparar el conjunto de datos hasta cambiar las rutas y, finalmente, alimentarlos a la red en la implementación de la técnica, y entendimos completamente los pasos. También analizamos los problemas comunes que se enfrentan al entrenar un YOLOv5 y su solución. Espero que este artículo te haya ayudado a entrenar tu primer YOLOv5 en un conjunto de datos personalizado y que te guste el artículo.

Sello de tiempo:

Mas de Analítica Vidhya