Directorio de artículos
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.
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
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
Después de cargar la imagen, haga clic en el botón Editar etiqueta para etiquetar la etiqueta de categoría del objetivo
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.
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
el cuadro rojo puede cambiar de la siguiente manera y puede generarse automáticamente modificando los parámetros del script
1.3 Convertir formato de anotación de datos
exe/label_conver_voc_2_yolo.py
Primero 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 _
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:
aquí 标签序号 x y w h
el 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.
- 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
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.cfg
archivo 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
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).
2.3, obj.nombre y obj.datos
solo modifícalo
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
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.
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.
Para la salida en medio del entrenamiento, preste atención a la pérdida media en el medio Intuitivamente, cuanto menor sea, mejor.
Puede usar el script drawLossPlot.py para dibujar la curva de pérdida (tren) más tarde