machine-learning - utilizar - tensorflow reconocimiento de imagen
Capacitar la detección de objetos de Tensorflow en un conjunto de datos propio (2)
Escribí una publicación de blog en Medium sobre mi experiencia también sobre cómo entrené un detector de objetos (en particular, es un detector de mapache) con Tensorflow en mi propio conjunto de datos. Esto también podría ser útil para otros y es complementario a la respuesta de eshirima.
Después de pasar un par de días tratando de lograr esta tarea, me gustaría compartir mi experiencia sobre cómo respondí la pregunta:
¿Cómo uso TS Object Detection para entrenar usando mi propio conjunto de datos?
Esto supone que el módulo ya está instalado. Consulte su documentation si no.
Renuncia
Esta respuesta no pretende ser la forma correcta o única de entrenar el módulo de detección de objetos. Simplemente estoy compartiendo mi experiencia y lo que me ha funcionado. Estoy abierto a sugerencias y aprender más sobre esto, ya que todavía soy nuevo en ML en general.
TL; DR
- Cree su propio conjunto de datos en formato PASCAL VOC
- Genere TFRecords de él
- Configurar una tubería
- Visualizar
Cada sección de esta respuesta consta de una Edición correspondiente (ver más abajo). Después de leer cada sección, lea también Editar para obtener aclaraciones. Se agregaron correcciones y consejos para cada sección.
Herramientas utilizadas
LabelImg : una herramienta para crear anotaciones en formato PASCAL VOC.
1. Cree su propio conjunto de datos PASCAL VOC
PD: Para simplificar, la convención de nomenclatura de carpetas de mi respuesta sigue a la de Pascal VOC 2012
Un vistazo al conjunto de datos de mayo de 2012 , notará que la carpeta tiene la siguiente estructura
+VOCdevkit +VOC2012 +Annotations +ImageSets +Action +Layout +Main +Segmentation +JPEGImages +SegmentationClass +SegmentationObject
Por el momento, se realizaron modificaciones en las siguientes carpetas:
Anotaciones
: Aquí se colocarán todos los archivos XML correspondientes de las imágenes. Use la herramienta sugerida arriba para crear las anotaciones.
No se preocupe por las etiquetas
<truncated>
y
<difficulty>
ya que serán ignoradas por los binarios de capacitación y evaluación.
JPEGImages : ubicación de sus imágenes reales. Asegúrese de que sean del tipo JPEG porque eso es lo que se admite actualmente para crear TFRecords utilizando su script proporcionado.
ImageSets-> Main : esto simplemente consiste en archivos de texto. Para cada clase, existe un train.txt , trainval.txt y val.txt correspondientes . A continuación se muestra una muestra del contenido de aeroplane_train.txt en la carpeta VOC 2012
2008_000008 -1
2008_000015 -1
2008_000019 -1
2008_000023 -1
2008_000028 -1
2008_000033 1
La estructura es básicamente el nombre de la imagen seguido de un booleano que dice si el objeto correspondiente existe en esa imagen o no. Tomemos, por ejemplo, la imagen 2008_000008 no consiste en un avión, por lo tanto, está marcado con un -1, pero la imagen 2008_000033 sí.
Escribí un pequeño script de Python para generar estos archivos de texto. Simplemente recorra los nombres de las imágenes y asigne un 1 o -1 junto a ellos para la existencia del objeto. Agregué algo de aleatoriedad entre mis archivos de texto al mezclar los nombres de las imágenes.
Los archivos
{classname} _val.txt
consisten en los conjuntos de datos de validación de
prueba
.
Piense en esto como los datos de la prueba durante el entrenamiento.
Desea dividir su conjunto de datos en capacitación y validación.
Más información se puede encontrar
here
.
El formato de estos archivos es similar al del entrenamiento.
En este punto, la estructura de su carpeta debería ser
+VOCdevkit +VOC2012 +Annotations --(for each image, generated annotation) +ImageSets +Main --(for each class, generated *classname*_train.txt and *classname*_val.txt) +JPEGImages --(a bunch of JPEG images)
1.1 Generando mapa de etiquetas
Con el conjunto de datos preparado, necesitamos crear los mapas de etiquetas correspondientes. Navegue a models / object_detection / data y abra pascal_label_map.pbtxt .
Este archivo consta de un JSON que asigna una identificación y un nombre a cada elemento. Modifique este archivo para reflejar sus objetos deseados.
2. Generar TFRecords
Si observa su código, especialmente esta line , solo toman explícitamente el aeroplane_train.txt . Para las mentes curiosas, he aquí por qué . Cambie este nombre de archivo a cualquiera de sus archivos de texto del tren de clase.
Asegúrese de que VOCdevkit esté dentro de models / object_detection, luego puede continuar y generar los TFRecords .
Primero revise su código si tiene algún problema. Se explica por sí mismo y está bien documentado.
3. Configuración de tubería
Las instructions deben explicarse por sí mismas para cubrir este segmento. Las configuraciones de muestra se pueden encontrar en object_detection/samples/configs .
Para aquellos que buscan entrenar desde cero como lo hice yo, solo asegúrese de eliminar los nodos
fine_tune_checkpoint
y
from_detection_checkpoint
.
Here''s
como se veía mi archivo de configuración como referencia.
A partir de aquí, puede continuar con el tutorial y ejecutar el proceso de capacitación.
4. Visualiza
Asegúrese de ejecutar la evaluación en paralelo a la capacitación para poder visualizar el proceso de aprendizaje. Para citar a Jonathan Huang
la mejor manera es simplemente ejecutar el binario eval.py. Normalmente ejecutamos este binario en paralelo al entrenamiento, apuntándolo al directorio que contiene el punto de control que se está entrenando. El binario eval.py escribirá registros en un
eval_dir
que usted especifique y luego apunte con Tensorboard.Desea ver que el mAP se ha "despegado" en las primeras horas, y luego desea ver cuándo converge. Es difícil saber sin mirar estos gráficos cuántos pasos necesita.
EDITAR I (28 de julio de ''17):
Nunca esperé que mi respuesta recibiera tanta atención, así que decidí volver y revisarla.
Herramientas
Para mis compañeros usuarios de Apple, en realidad podría usar RectLabel para anotaciones.
Pascal VOC
Después de investigar, finalmente me di cuenta de que trainval.txt es en realidad la unión de conjuntos de datos de capacitación y validación.
Mire su kit de desarrollo oficial para comprender el formato aún mejor.
Generación de mapas de etiquetas
En el momento de escribir esto, el ID 0 representa
none_of_the_above
.
Se recomienda que sus ID comiencen por 1.
Visualizar
Después de ejecutar su evaluación y dirigir el tensorboard a su directorio Eval, le mostrará el mAP de cada categoría junto con el rendimiento de cada categoría. Esto es bueno, pero también me gusta ver mis datos de entrenamiento en paralelo con Eval.
Para hacer esto, ejecute tensorboard en un puerto diferente y apúntelo a su directorio de trenes
tensorboard --logdir=${PATH_TO_TRAIN} --port=${DESIRED_NUMBER}