Siguiendo a Messi utilizando TensorFlow y Object Detection

En publicaciones anteriores estuvimos utilizando TensorFlow en combinación con el modelo de Object Detection, pero siempre haciendo uso de los tradicionales conjuntos de datos preestablecidos [ejemplo COCO database]. En esta oportunidad, nuestro desafío debería llevarnos a otro nivel. Les propongo analizar un segmento de un partido de fútbol e identificar sus jugadores. Al hablar de fútbol, lo primero que me vino a la mente es buscar el talento del astro argentino Lionel Messi. Empecemos nuestro análisis:
  • Entrenemos un modelo personalizado que nos permita ubicar a astro argentino.
  • Analicemos una transmisión real [en este caso seleccioné Uruguay-Argentina por eliminatorias 31 de agosto 2017] para ver qué resultados podemos obtener.
  • Pensemos si es posible mejorar o aportar algo a la táctica de este pasional deporte, utilizando esta tecnología.
*Vamos a utilizar TensorFlow y el modelo propuesto para Object Detection, todo bajo licencia Apache License 2.0.

En esta oportunidad voy a empezar por mostrarle el resultado obtenido:

Si les parece interesante, los invito a dedicar unos minutos más y seguir el paso a paso, para comprender el procedimiento de construcción de este modelo.

Debemos completar dos elementos importantes:
  1. Construir la base de datos personalizada con los objetos a detectar. [en este caso Lionel Messi en plena acción]. 
  2. Entrenar y evaluar el modelo utilizando TensorFlow.
  3. Utilizar el modelo creado.

Paso a paso

Momento de construir la base de datos personalizada

  1. Si exploramos la documentación oficial, encontraremos una sección exclusiva para construir nuestro dataset personalizado. Aquí lo pueden ver.
  2. Necesitamos las fotografías de los objetos que queremos detectar y el etiquetado de las mismas.
    1. Para este caso como herramient utilicé RectLabel, una buena opción para MacOS. [hay otra alternativas que podrían evaluar como LabelImg]
    2. Luego para las primeras pruebas he recolectado unas 119 fotografías[muy poco cantidad, solo con fines de prueba] de un partido de fútbol. 
    3. He etiquetado unas 100 unidades seleccionando al astro Argentino.
  3. El siguiente paso, es convertir esas fotografías y etiquetas en archivos con TFFormat. Aquí pueden ver el script utilizado [utilicé un paso intermedio convirtiendo el marcado xml a csv para las anotaciones de las fotografías, esto da mucha más flexibilidad para los siguientes paso y si hay que repetir parte de esta actividad aquí el script].
  4. Recuerden que lo ideal es construir el conjunto de entrenamiento y el conjunto de evaluación.

Momento de entrenar/evaluar el modelo personalizado 

  1. Con estos archivos completos, pasaremos a entrenar el modelo.
    1. Para este paso he utilizado ML Engine ya que no contaba con la infraestructura local para realizar el proceso en 1 hora promedio. [aquí está la descripción oficial del procedimiento]
      1. 5 workers utilizando standard gpu.
      2. también es muy recomendable asociar TensorBoard para visualizar el proceso de entrenamiento y evaluación.
      3. Recuerde que debe utilizar una interacción directa con Google Cloud Storage. Es decir todos los archivos deben estar en este tipo de repositorio para poder interactuar con el motor de entrenamiento.
  2. Luego de una 21.77 unidades utilizadas, 1 hora 9 mins y unos 20k iteraciones tenemos varios checkpoints y un modelo aceptable.
  3. Utilizando el checkpoint más avanzado, procedemos a convertir el modelo entrenado para inferencia. [aquí pueden ver la documentación oficial]

    totalloss del proceso de entrenamiento

    resumen del job en ML Engine

Utilizar el modelo personalizado

  1. Terminado este procedimiento vamos a utilizado el modelo desde estas opciones:
    1. script que utiliza el modelo y genera un video con el resultado de las detecciones. Aquí el ejemplo de implementación.
    2. script que puede evaluar el vídeo en realtime y decodificar las etiquetas para calcular las apariciones del astro argentino. Aquí el ejemplo de implementación. 

Mismo video en slow-motion aquí.

Quizás es el inicio de una línea de investigación interesante,  tratar de mejorar la táctica deportiva, incorporando más jugadores y validando asociaciones.

Es real que estamos utilizando solo la transmisión que entrega la TV tradicional, pero qué ocurriría si tuviéramos la opción de camaras con más detalles o una visión completa del campo de juego?. Se podrían calcular las posiciones de todos los jugadores, de hecho probamos que se pueden identificar fácilmente, entonces… podríamos encontrar mejores tácticas basadas en la posición de los jugadores y sus conocidas habilidades?

Espero que se hayan divertido con este procedimiento, y esperemos ver cada vez más este tipo de implementaciones en disciplinas deportivas, no solo en el fútbol sino en los demás deportes.


Licencia Creative Commons
Siguiendo a Messi utilizando TensorFlow y Object Detection por Nicolas Bortolotti se distribuye bajo una Licencia Creative Commons Atribución-CompartirIgual 4.0 Internacional.

Entradas más populares de este blog

Regresión lineal simple en #TensorFlow, aprendizaje automático para mayor exactitud

Humedad y temperatura desde #Arduino a #Firebase

TensorFlow, una simple aproximación al calculo numérico en Python