1

Deteccion de mandos de PS4 con la API de detecction de objetos de Tensorflow

Requisitos:
-Python 3.8, 3.7 en Anaconda
-Tensorflow version 2.2.0
-Tensorflow API, instalacion y tutorial: https://tensorflow-object-detection-api-tutorial.readthedocs.io/en/latest/install.html
-labelImg(Herramienta para dibujar los bounding boxes y generar archivos xml con la data): https://pypi.org/project/labelImg/

En el tutorial de la API se menciona como hacerlo paso a paso,pero aca hay un resumen:
1-Recolectar data, en mi caso recolecte aprox. 80 imagenes de entrenamiento y aprox. 20 de test, ademas usar la menor cantidad de pixeles si usas una camara

2- Reescalar las imagenes a un mismo tamaño,es decir, que todas tengan la misma cantidad de pixeles, si usas CPU no es muy conveniente tener imagenes muy pesadas

3-Crear los bounding boxes de todas las imagenes, tanto de entrenamiento como de evaluacion, y guardar los archivos xml

4-Convertir los archivos xml a un pandas dataframe,tanto de entramiento como de test, esto para asegurar que los archivos no esten desordenados.

5-Generar los archivos de tipo RECORD a partir de los dataframes, que serian train.record y test.record, estos archivos son la base de tu entrenamiento( no estan en el repositorio ya que exceden los 100 Mb)

6-Generar un labelmap.pbtxt con el id y nombre de los objetos, ejemplo para este caso:
{
id:1
name: controller
}
7.Importar una arquitectura(en el repositorio ya hay una incluida:efficientdet_d0_coco17_tpu-32):
-Las arquitecturas las pueden descargar aqui:https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/tf2_detection_zoo.md

8.El archivo pipeline.config debes ajustarlo segun tus datos

9-Entrenar y asegurar que la perdidad disminuya de forma lineal, no es muy recomendable que la perdida llegue a 0.0 ya que podria causar overfitting y no generalizaría para otras imagenes que no estan en nuestro dataset.

Como se podrá observar en la imagen prediction.jpg hizo una errónea y una buena detección debido a que solo se entrenó con algo de 80 imagenes por motivos de recursos, para un mejor desempeño se debería recolectar mucha mas data.