YOLOv5 entrena su propio conjunto de datos para realizar el reconocimiento de video

escrito en frente

Originalmente usé este modelo para ubicar firmas manuscritas, pero debido al organizador de la competencia, los datos no pueden hacerse públicos, así que usé un video de apertura del mundo animal para hacer mi conjunto de datos. Durante el proceso de ejecutar todo el modelo, me referí a muchos buenos blogs. La razón de escribir este blog es registrar lo que veo y siento. Mi modelo se ejecuta en la plataforma móvil de nueve días . Los blogs a los que se hace referencia en este artículo son los siguientes:
YOLOv5 entrena su propio conjunto de datos (versión completa ultra detallada)
detección de objetivos: le enseña a usar yolov5 para entrenar su propio modelo de detección de objetivos

El propósito de escribir este artículo es darte algunos consejos y también registrar tu propio crecimiento.

1. Medio ambiente

Hay muchos modelos de reconocimiento, pero el más práctico es el YOLOV5, que está hecho por una empresa extranjera y es más fácil de usar. Aquí está el enlace a github

Todo es difícil al principio, creo que mientras el entorno esté configurado para un modelo, el modelo tendrá un 90% de éxito. Pero, afortunadamente, las diversas bibliotecas requeridas por YOLOv5 son relativamente populares y no hay problemas (este artículo aumenta principalmente la confianza para todos), por lo que creo que el entorno se adapta bien.
Aquí todavía sugiero que primero cree un entorno virtual. No lo creé cuando estaba ejecutando en el servidor. Un tutorial sobre cómo crear un entorno virtual y luego activar su propio entorno virtual. Aquí tengo que decir que el servidor es realmente fragante.
El entorno que necesitamos se escribió en el proyecto YOLOv5, en requirements.txt, por lo que solo necesitamos extraer el código de github al local, y luego se puede instalar un comando:

pip install -r requirements.txt

Estoy ejecutando en el servidor para demostrarle:
inserte la descripción de la imagen aquí
si aparecen las cosas anteriores, está más o menos bien

A continuación, puede ejecutar directamente train.py para verificar si su entorno está configurado correctamente. Creo que este paso es muy importante. Cuando vi que el modelo puede ejecutarse, me dio mucha confianza.
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
Si lo ejecuta directamente, el conjunto de datos utilizado es el predeterminado coco128. Debe descargarse del sitio web oficial por primera vez y luego se puede usar. Si la época aparece como se muestra en la figura anterior, significa que el modelo ha comenzado a entrenarse y el entorno se ha configurado. En otras palabras, no tienes que preocuparte por el entorno de este modelo en el futuro. Enhorabuena por dar un gran paso.

Si le dice que faltan paquetes, simplemente instale pip lo que falte y, en general, no se informará ningún error.

Después de ejecutar con éxito, puede crear su propio conjunto de datos para prepararse para el entrenamiento.

2. Crea tu propio conjunto de datos

2.1 Convertir video a imagen

En esta sección, necesitamos procesar el video cuadro por cuadro y convertirlo en una imagen, lo cual es conveniente para nuestro conjunto de datos final. Aquí estoy usando vedio_to_pictureseste código, el programa se colocará en el apéndice a continuación. La función principal del programa es procesar las imágenes cuadro por cuadro en imágenes una por una, y guardarlas en la carpeta allimages en el directorio actual.
La información básica de mi video es:
inserte la descripción de la imagen aquí
utilicé la grabadora de pantalla incorporada de QQ para grabar un video en la estación b (o de otros sitios web, no recuerdo exactamente), la velocidad de cuadro obtenida es 19.58 cuadros por segundo, y el total duración Es de 69 segundos. Entonces, la cantidad de imágenes obtenidas es de aproximadamente 19.58 * 69 = 1351. Al final, obtuve 1357 imágenes utilizando el procesamiento de imágenes, de la siguiente manera, que coincide aproximadamente.
inserte la descripción de la imagen aquí

Puede elegir algunas imágenes para crear su propio conjunto de datos en función de las imágenes que obtenga, porque finalmente usé 45 imágenes para crear mi propio conjunto de datos, así que las seleccioné manualmente. Puede escribir una función aleatoria para seleccionar automáticamente.

2.2 Anotar imágenes para crear un conjunto de datos estándar

Esta sección es para etiquetar las 45 imágenes obtenidas anteriormente y convertirlas en el formato estándar del conjunto de datos que YOLO puede entrenar.

Cómo se ve un conjunto de datos estándar

El primer vistazo al formato del conjunto de datos de YOLO es el número de categoría del objeto, x, y, w, h.
inserte la descripción de la imagen aquí
Tome el primer dato como ejemplo, por ejemplo:

0 0.21584984358706988 0.5041743970315399 0.11678832116788321 0.10296846011131726

El primer 0 se refiere al código de este tipo de objeto, que se numerará automáticamente después de marcar el objeto. Las siguientes coordenadas representan respectivamente las coordenadas del centro del objetivo y el ancho y alto del objetivo, donde el ancho y el alto son el ancho y el alto normalizados.

Etiqueta tu propio conjunto de datos con labelImg

Se puede etiquetar cualquier software de etiquetado de imágenes. Aquí elijo LabelImg (el tutorial de instalación se adjunta arriba). El formato de la etiqueta que elijo aquí es el formato voc (que se muestra en el lado izquierdo de la imagen a continuación), y el código será utilizado más tarde. El formato voc se convierte al formato YOLO. La razón por la que no elegí directamente el formato YOLO es que mi formato labelImgYOLO no es estándar. Puede ser porque la versión que instalé es demasiado antigua. Algunos estudiantes usan directamente el Formato YOLO para etiquetar, también puedes probar.

inserte la descripción de la imagen aquí
Hay algunos consejos al marcar aquí, como cambiar la categoría a marcar por adelantado, guardar automáticamente, algunas teclas de acceso directo, la tecla w puede abrir rápidamente el marco, la tecla d para cambiar al siguiente, etc., recuerde configurar el carpeta guardada. Puedes buscarlo.

Una vez completada la anotación, voc obtiene el archivo xml. Esto es lo que
inserte la descripción de la imagen aquí
hago aquí Aquí hay una conversión de formato.
Primero, cree una nueva carpeta de datos en la carpeta YOLOv5. La llamé hanzi_data aquí:

inserte la descripción de la imagen aquí
Luego cree la carpeta de imágenes (no se puede cambiar el nombre) y la carpeta de Anotaciones en la carpeta hanzi_data, una para almacenar las imágenes que desea entrenar, es decir, las imágenes que marcamos, y otra para almacenar nuestros archivos xml. Como sigue:

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

Divida el conjunto de entrenamiento, el conjunto de prueba y el conjunto de validación

A continuación, divida el conjunto de entrenamiento, el conjunto de prueba y el conjunto de verificación. Esto es split_train_val.pylo que obtiene al ejecutar el código, y el enlace se proporcionará más adelante. Si su carpeta ha cambiado, el código se modificará en consecuencia.
inserte la descripción de la imagen aquí
Si la carpeta del resultado de la ejecución no se ha modificado, aparecerá una nueva carpeta ImageSets después se completa la ejecución. Aquí ejecutamos los resultados de la siguiente manera:

inserte la descripción de la imagen aquí
Abra la carpeta y hay una carpeta principal en ella, y luego hay cuatro archivos txt de prueba, tren, trenval y val, todos los cuales son los nombres de las imágenes sin sufijos. Tengo un invitado no invitado aquí. Es un problema con el almacenamiento de mi código. Generalmente, no habrá tal cosa. Puedo eliminarlo aquí.

inserte la descripción de la imagen aquí

Formato XML a formato yolo_txt

Aquí está la ejecución text_to_yolo.py, y luego puede obtener la carpeta dataSet_path y la carpeta de etiquetas, como se muestra a continuación:

inserte la descripción de la imagen aquí
Los tres txt en la carpeta dataSet_path almacenan las rutas de su propio conjunto de entrenamiento, conjunto de verificación y conjunto de prueba, respectivamente.

inserte la descripción de la imagen aquí
En este momento, los datos txt debajo de la carpeta de etiquetas también son el modo YOLO estándar, como se muestra a continuación:

inserte la descripción de la imagen aquí
En este punto, el conjunto de datos está creado y listo para el entrenamiento.

Cree su propio archivo de configuración

Cree un nuevo archivo myvoc.yaml (puede personalizar el nombre) en la carpeta de datos en el directorio yolov5 y ábralo con el Bloc de notas.
El contenido es:
la ruta del conjunto de entrenamiento y el conjunto de verificación (train.txt y val.txt) ( se puede cambiar a una ruta relativa )
, el número de categorías y el nombre de categoría del objetivo.
inserte la descripción de la imagen aquí

3. Formación modelo

Cambiar la configuración del modelo

Seleccione un modelo, la carpeta del modelo en el directorio yolov5 es el archivo de configuración del modelo, hay versiones n, s, m, l, x, el modelo es complejo a su vez, los pesos aumentan a su vez y el tiempo de entrenamiento también aumenta en doblar.
Aquí elijo yolov5s y luego hago los cambios, de la siguiente manera:

inserte la descripción de la imagen aquí

empezar a entrenar

python train.py --weights weights/yolov5s.pt  --cfg models/yolov5s.yaml  --data data/myvoc.yaml --epoch 200 --batch-size 8

–weights El camino de tu propio peso, mira donde se encuentra tu yolov5s.pt, puede que necesites cambiarlo.
–cfg La ruta de la configuración del modelo, que es la configuración del modelo modificada en el paso anterior.
–data es la ruta para crear su propio archivo de configuración al crear su propio conjunto de datos.
–rondas de entrenamiento
de época –tamaño del lote La cantidad de fotos alimentadas en una sesión de entrenamiento, si la configuración de la computadora no es buena, cámbiela a un tamaño más pequeño.

proceso de entrenamiento

Durante el proceso de entrenamiento, se imprimirá la ubicación donde se almacenan los resultados del entrenamiento, generalmente almacenados en la última carpeta exp en run/train/

inserte la descripción de la imagen aquí
Mi modelo entrenado se almacena en run/train/exp 22.
inserte la descripción de la imagen aquí
Además, hay imágenes de su proceso de entrenamiento en la exp entrenada:
inserte la descripción de la imagen aquí
hay algunas otras imágenes del proceso de entrenamiento:
R_curve tasa de recuperación Recuperación y grado de confianza confianza La relación entre.
La P en la curva PR de PR_curve significa Precisión (tasa de precisión) y R significa Recuperación (tasa de recuperación), que representa la relación entre la tasa de precisión y la tasa de recuperación. En general, la recuperación se establece en la abscisa y la precisión es establecido en es la coordenada vertical. El área bajo la curva PR es el AP, y el valor AP promedio de todas las categorías es el mapa. El valor AP es un índice de evaluación importante para medir el rendimiento del clasificador del modelo de detección de objetos. Cuanto mayor sea el valor AP, mejor será el rendimiento del clasificador, y cuanto menor sea el valor AP, peor será el rendimiento del clasificador.
P_curve es un gráfico de la relación entre precisión y confianza.
F1_curve se define matemáticamente como puntuación F1, también conocida como puntuación F equilibrada, que se define como la media armónica de precisión y recuperación.
confusion_matrix se refiere a la matriz de confusión.

control de modelo

El código para la verificación del modelo es el siguiente:

python detect.py --weights runs/train/exp/weights/best.pt --source ../data/video/animal.mp4

--weights donde se almacenan los pesos
--source lo que desea detectar. Admite imágenes, carpetas, videos y cámaras.

Aquí estoy probando Animal.mp4 bajo test_data

inserte la descripción de la imagen aquí
Se puede ver que al ejecutar un video, procesa las imágenes cuadro por cuadro, lo que refleja sus características rápidas.
Finalmente, se guardará en run/detect/exp, como se muestra a continuación.
inserte la descripción de la imagen aquí
Mi resultado final es el siguiente:

demostración de YOLO

El modelo está básicamente aquí, no te preocupes si encuentras problemas, la máquina no se romperá y siempre es posible intentarlo unas cuantas veces más.

4 preguntas relacionadas

caché de entrenamiento

El caché de datos también se generará durante el entrenamiento, en su carpeta hanzi_data/dataSet_path, si necesita volver a entrenar más tarde, es posible que deba eliminarlo. (Está bien si no lo borro)
inserte la descripción de la imagen aquí

tiempo de entrenamiento

Mis datos son 45 fotos, usando GPU, 200 épocas sobre 25 minutos de entrenamiento.

inserte la descripción de la imagen aquí

apéndice del código

video_to_pictures
split_train_val.py
text_to_yolo.py

Supongo que te gusta

Origin blog.csdn.net/weixin_53665577/article/details/129648364
Recomendado
Clasificación