with utilizar tutorial reconocimiento porque machine learning imagenes imagen español ejemplos clasificador basicos aplicaciones machine-learning tensorflow object-detection

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

  1. Cree su propio conjunto de datos en formato PASCAL VOC
  2. Genere TFRecords de él
  3. Configurar una tubería
  4. 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}