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.
https://github.com/rodrigourquizo/PS4-controller-detector-