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:
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.
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_pictures
este 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:
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.
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.
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.
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
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í:
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:
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.py
lo 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.
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:
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í.
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:
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.
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:
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.
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:
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/
Mi modelo entrenado se almacena en run/train/exp 22.
Además, hay imágenes de su proceso de entrenamiento en la exp entrenada:
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
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.
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)
tiempo de entrenamiento
Mis datos son 45 fotos, usando GPU, 200 épocas sobre 25 minutos de entrenamiento.