octubre 27, 2018 6:00 pm

Jesús

?? Read in English

A menudo nos maravillan los cada vez más increíbles avances en el área de la inteligencia artificial y, particularmente, en la visión computarizada. Ciertamente, es emocionante presenciar cómo un agente inteligente es capaz de discernir con base en información altamente compleja, como texto, imágenes o videos. Y es que hay algo profundamente cautivante en enseñarle a una pequeña porción de código a ser excelente en una tarea determinada. ¿Es un orgullo paternal, quizás?

De cualquier manera, entrenar un modelo no consiste únicamente en escoger la arquitectura más cool de deep learning o en idear un árbol de decisiones enrevesado que considere las características ocultas en nuestras imágenes. De hecho, es un proceso que conlleva muchas etapas, algunas de éstas más simples que otras, que van transformando los datos, masajeándolos, modificándolos para que nuestro algoritmo final pueda aprender de manera efectiva.

Entre las etapas más comunes de una línea de procesamiento (o pipeline) de computer vision están:

  • Seleccionar o recolectar los datos (imágenes, principalmente).
  • Pre-procesamiento, lo cual incluye transformaciones como normalización, estandarización, corrección de color, reescalado.
  • Selección de áreas de interés, mediante recortes, detección de objetos o segmentación de imágenes, entre otras técnicas.
  • Extracción de features (representación vectorial, imagen transformada, entre otros).
  • Predicción.

El resultado de este proceso suele ser utilizado para efectuar una acción. Por ejemplo, en un pipeline de reconocimiento facial, posiblemente este pipeline produzca un conjunto de puntos claves que denotan o delimitan el rostro de una persona. Múltiples acciones pueden tomarse a partir de éste producto, tales como:

  • Añadir accesorios chistosos a la cara de la persona (Snapchat, Instagram).
  • Garantizar acceso a un área restringida.
  • Etiquetar a individuos en una foto.

En la imagen de abajo puedes ver un ejemplo de un pipeline aplicado al problema de reconocer señales de PARE

¿Cómo implementar un pipeline de computer vision?

Depende realmente de diversos factores, como el volúmen de datos con los que cuentes, las dimensiones de tu problema, el objetivo del proyecto o aplicación que buscar construir, entre muchos otros.

Por ejemplo, si tu idea es experimentar por tu cuenta con un conjunto de datos interesante, quizás construir un pequeño proyecto en el que las piezas del pipeline sean clases o funciones escritas por ti tiene más sentido, puesto que te da mayor control y flexibilidad. Así mismo, si la data con la que vas a experimentar no es demasiado grande (algo poco probable en computer vision), es posible que no tengas que recurrir a frameworks especializados en big data como Spark o Hadoop, sino que puedas manejarte bastante bien con los recursos de tu computador personal.

Si formas parte de un equipo más grande, puede que una aproximación arquitectural, basada en microservicios desplegados en la nube tenga más sentido. En este caso, cada etapa del pipeline podría ser un servicio que se comunique con los demás mediante colas o vía HTTP, en el que los resultados de cada fase son persistidos en una o más bases de datos para experimentación futura.

Algunas librerías como Spark y scikit-learn ofrecen facilidades para implementar pipelines:

Como puedes ver, un pipeline no es más que la definición, a muy alto nivel, de un proceso que debe seguirse para poder obtener un resultado a partir de data visual, con el objeto de llevar a cabo una acción. La implementación puede variar en complejidad, dependiendo del caso, pero debe respetar el contrato, la esencia de la línea de procesamiento.

Sobre el Autor

Jesús Martínez es el creador de DataSmarts, un lugar para los apasionados por computer vision y machine learning. Cuando no se encuentra bloggeando, jugando con algún algoritmo o trabajando en un proyecto (muy) cool, disfruta escuchar a The Beatles, leer o viajar por carretera.