etiquetado darknet yolo, detalles de entrenamiento

El archivo de script y enlace de descarga del programa correspondiente a este artículo es un ejemplo de todo el proceso de formación de etiquetado de datos personalizados de darkent yolo , que también se puede obtener enviando un mensaje privado.

1. Datos de la etiqueta

Use la herramienta labelImg.exe para etiquetar los datos. De manera predeterminada, se usa el formato de conjunto de datos voc y luego se usa el script para convertirlo al formato de datos específico de yolo y generar algunos datos de preparación dependientes del entrenamiento.
inserte la descripción de la imagen aquí

Preparación:

  • (1) Ejecute el script 0: limpie los archivos img, xml y txt del archivo de entrenamiento y elimine todos los datos del último entrenamiento (haga una copia de seguridad si es necesario)
  • (2) Copie la imagen de entrenamiento en el directorio train/JPEGImages (se recomienda escalar la imagen por debajo de 1080 si la imagen es demasiado grande)

Estructura de directorios de exe y tren
inserte la descripción de la imagen aquíinserte la descripción de la imagen aquí

1.1 Etiquetado

Utilice la secuencia de comandos 1——LabelImg.cmd para abrir la herramienta,
botón Open Dir para seleccionar el directorio de datos de imagen que se va a anotar, aquí está to_path/train/JPEGImages
button Change Save Dir , seleccione el directorio xml para almacenar el archivo de anotación, to_path/ tren/Anotaciones
inserte la descripción de la imagen aquí

Después de cargar la imagen, haga clic en el botón Editar etiqueta para etiquetar la etiqueta de categoría del objetivo
inserte la descripción de la imagen aquí
Presione a y d para cambiar de imagen, presione w para comenzar a dibujar un marco estándar y ctrl+s para guardar los datos de la imagen etiquetada actual.

Consulte el contenido de Internet en detalle y busque yolov3 para marcar datos personalizados. Una vez completada la anotación, el archivo de anotación xml correspondiente a cada imagen se obtendrá de train/Annotations en el directorio.
inserte la descripción de la imagen aquíinserte la descripción de la imagen aquí

1.2 Generar el archivo de lista de entrenamiento train.txt

La capacitación debe proporcionar las direcciones absolutas de todas las imágenes. Tenga en cuenta aquí que la máquina de etiquetado puede no estar en la misma máquina que la capacitación posterior, y la ruta cambiará. Más tarde, la modificación y el reemplazo del lote se realizarán de acuerdo con la ruta real.

Simplemente ejecute el script 2——Label_generate_traintxt.cmd , y el archivo train.txt se generará en el directorio actual. El directorio en
inserte la descripción de la imagen aquí
el cuadro rojo puede cambiar de la siguiente manera y puede generarse automáticamente modificando los parámetros del script
inserte la descripción de la imagen aquí

1.3 Convertir formato de anotación de datos

exe/label_conver_voc_2_yolo.pyPrimero modifique la lista de clases en el archivo de script para que sea el nombre de la etiqueta en la herramienta de etiquetado. Por ejemplo, si hay 4 etiquetas car, huoche, guache y keche, comente la línea anterior con # y modifíquela como se muestra en la figura. debajo _
inserte la descripción de la imagen aquí

Después de modificar y guardar, ejecute el script 3——Label_conver_voc_2_yolo.cmd, y luego podrá ver el archivo de etiqueta en formato txt en el directorio tren\labels. El formato es:
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
aquí 标签序号 x y w hel número de serie de la etiqueta comienza desde 0, y el valor es el subíndice de la lista de clases en el script de python; posición Es un porcentaje del ancho y alto relativos de la imagen.

En realidad, esto se obtiene convirtiendo el archivo xml de train/Annotations en el directorio de archivos de anotaciones, correspondencia uno a uno ( txt, xml y las imágenes deben tener una correspondencia uno a uno ).

Problemas que pueden surgir:

  • El ancho y el alto de la imagen en el archivo xml marcado por LabelImage.exe es 0, lo que genera un error de conversión de txt y se informa un error para el entrenamiento. El script usa la biblioteca PIL para agregar un enlace de verificación y reparación para garantizar que la conversión sea correcta.

    inserte la descripción de la imagen aquí
  • Indicar que la etiqueta no existe: porque el error de entrada de la etiqueta al etiquetar, es inconsistente con los elementos de la lista de clases en el script

2. Organizar datos de entrenamiento

Bajo el directorio de la herramienta de entrenamiento darknet en la máquina de entrenamiento, copie el directorio de archivos de etiquetas train y el archivo de lista train.txt al nuevo directorio de entrenamiento como data-vehicle-0926-772 La estructura del directorio aquí es la siguiente
inserte la descripción de la imagen aquíinserte la descripción de la imagen aquí

2.1 Modificar la ruta del tren.txt

Modifique la ruta real de la ruta del archivo de lista de imágenes, como se explica en 1.2, Generar archivo de lista de entrenamiento train.txt. Preste atención al formato de nueva línea, que requiere formatos unix y utf8 . Puede cometer errores en el entrenamiento, pero generará errores similares en STB.

Cannot load image “…” STB Reason: can’t fopen… Segmentation fault (core dumped)

2.2 Modificar yolov3.cfg

Copie un 原始yolov3.cfgarchivo del directorio darknet al directorio de capacitación actual. Hay dos formas rápidas de modificar

  • (1) Modificar los parámetros de la estructura de la red

    Busque en el archivo cfg 所有[yolo]标签段(共3个), modifique las clases de datos en el cuadro rojo
    inserte la descripción de la imagen aquí
    a la cantidad de categorías al marcar, por ejemplo, 4 categorías , y modifique los filtros a (cantidad de categorías + 5) * 3, aquí se modifica a (4 + 5) * 3 = 27 . (Se pueden modificar otras categorías en consecuencia)
    Tenga en cuenta que hay 3 conjuntos de datos para modificar en total.

  • (2) Modificar los parámetros de entrenamiento

    Los parámetros aquí son relativamente profesionales.Cuando se entrena con una gran cantidad de datos, es necesario ajustar continuamente el diseño de parámetros. Actualmente usamos el diseño predeterminado. Use lote = 64, subdivisión = 16 durante el entrenamiento Si el rendimiento de la GPU de la máquina es bueno y la memoria de video es suficiente, la subdivisión se puede reducir a 8, 4, 2, etc. (3090 se puede modificar a 2).
    inserte la descripción de la imagen aquí

2.3, obj.nombre y obj.datos

solo modifícalo
inserte la descripción de la imagen aquí

2.4 Archivo de script de entrenamiento trian.sh

El contenido del guión es

cd ..
./darknet detector train data-vehicle-0926-772/obj.data data-vehicle-0926-772/yolov3.cfg /yolov3.cfg darknet53.conv.74 -i 0 -clear

Por ejemplo, el archivo de script existente en la máquina es
inserte la descripción de la imagen aquí

2.5 Archivo de script de prueba test.sh

(Después de completar el entrenamiento) Use el archivo de modelo especificado para el entrenamiento para probar la imagen y generar la imagen de resultado.
Por ejemplo, ejecutar en el directorio darknet del servidor

./darknet 
	detector 
	test 
	car-0612-400/obj.data 
	car-0612-400/yolov3-tiny.cfg 
	car-0612-400/weights/yolov3-tiny_best.weights  
	-i 0 -thresh 0.25 
	./car-0612-400/train/JPEGImages/11.jpg 
	-ext_output

La consola imprimirá los resultados de la detección y, una vez completada la operación, se generará un archivo de predicciones.jpg.
inserte la descripción de la imagen aquí

3. Entrenamiento

En el directorio de datos de entrenamiento, simplemente ejecute el script de entrenamiento train.sh , verifique si hay algún error de acuerdo con la entrada de datos de entrenamiento de la consola y realice los ajustes específicos.
Durante el entrenamiento formal, se ejecutará en segundo plano y nohup train.sh &el registro de entrenamiento nohup.out se puede generar usando el comando.

inserte la descripción de la imagen aquí
Para la salida en medio del entrenamiento, preste atención a la pérdida media en el medio Intuitivamente, cuanto menor sea, mejor.
inserte la descripción de la imagen aquí
Puede usar el script drawLossPlot.py para dibujar la curva de pérdida (tren) más tarde
inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/wanggao_1990/article/details/131107407
Recomendado
Clasificación