Inteligencia Artificial como servicio: reconocimiento de imágenes

El enorme desarrollo que está viviendo la tecnología asociada a la Inteligencia Artificial (IA) está dando lugar en los últimos tiempos a nuevas herramientas y aplicaciones espectaculares.

Una de las áreas donde los avances han sido más notables es el reconocimiento de imágenes, en parte gracias al desarrollo de nuevas técnicas de Deep Learning o aprendizaje profundo. Hoy en día tenemos ya al alcance de nuestra mano sistemas más precisos que los propios humanos, en las tareas de clasificación y detección en imágenes.

Según un reciente estudio de O’Really sobre el mercado de la IA, el reconocimiento de imágenes es una de las áreas donde más empresas están invirtiendo en EEUU dentro de la inversión en IA.

The New Artificial Intelligence Market. O’Reilly. Aman Naimat

Los casos de uso son muchos y en diversas industrias y sectores, algunos ejemplos interesantes serían los siguientes:

  • Etiquetado de imágenes: extraer tags o keywords asociados a imágenes, para poder clasificar o buscar a posteriori. Múltiples aplicaciones en sector turismo o retail.
  • Verificación de usuarios basada en rostro: seguridad, autenticación, perfilado/segmentación de clientes, identificación en tiendas físicas.
  • Análisis de opinión: detección del sentimiento o la experiencia de compra en tiendas físicas.
  • Análisis de clientes: conocer mejor al usuario a través de la detección de logos o texto en los productos que consume.
  • Diagnóstico de enfermedades: diagnóstico por imagen en base a comparación con diagnósticos previos. Retinopatías, diabetes, imagen médica…
  • Realidad aumentada: gaming, catálogo virtual, interacción avanzada con el medio…
  • Detección de matrículas: seguridad, segmentación, identificación…

¿Cómo llevar a cabo proyectos que integren reconocimiento de imágenes?

Una de las tareas más complejas a la hora de abordar proyectos que integren técnicas avanzadas de IA es el desarrollo de los modelos y la puesta en producción de los mismos.

En el caso de las técnicas de reconocimiento de imágenes, una alternativa muy interesante es apoyarnos en los modelos pre-entrenados que las principales plataformas cloud nos ofrecen.

De esta forma limitaremos notablemente los esfuerzos necesarios de perfiles muy requeridos y agilizaremos la puesta en producción de nuestros servicios o aplicaciones.

Sin embargo, los servicios de reconocimiento de imágenes que ofrece cada proveedor difieren en funcionalidad y características, lo que hace necesario realizar un análisis previo para elegir la solución que mejor se adapte a nuestro escenarios o proyecto.

En este artículo vamos a realizar una pequeña comparativa teniendo en cuenta las características (a finales de 2017) de tres de estos servicios en la nube, analizando las virtudes y carencias de cada uno.

Comparativa de servicios en la nube

En concreto vamos a analizar los servicios que ofrecen AWS, Google Cloud y Microsoft Azure. En primer lugar, analizaremos qué funcionalidades deseables están cubiertas y cuáles no en cada plataforma:

Es necesario aclarar que no sólo debemos fijarnos en si una funcionalidad está disponible o no, sino también cómo de preciso es el modelo que hay detrás, es decir, cómo de bien funciona el servicio en un caso dado.

Esto puede depender de nuestro contexto y el tipo de imágenes que vayamos a usar, factores como la calidad de la imagen puede afectar mucho a la precisión de los resultados.

Por otro lado, debemos tener en cuenta otros factores como la integración con otras herramientas y servicios en la nube, las limitaciones del API y los costes.

Ejemplo comparativo con la misma foto

Sacar una conclusión sobre la calidad de un servicio u otro es complicado. Sin embargo, podemos hacer el ejercicio de enviar la misma imagen a las tres plataformas y comparar los resultados que obtenemos.

De esta forma podremos hacernos una mejor idea de los resultados obtenidos en igualdad de condiciones.

Para llevar a cabo este ejercicio hemos desarrollado una pequeña aplicación hecha con Python y Flask que, dada una imagen, la envía a los tres proveedores y nos muestra el resultado, en este caso, de las funcionalidad de etiquetado y detección de caras.

Esta aplicación está disponible en Github y es un buen ejemplo de cómo podemos invocar los tres servicios desde los diferentes SDKs que se proporcionan.

En este caso hemos usado una foto de un compañero de Paradigma. En primer lugar, vemos qué etiquetado de la foto hace cada plataforma y con qué certidumbre. Como podemos observar, el número de etiquetas que nos devuelven y la precisión de las mismas es muy variable, hay que tener en cuenta que la certidumbre en el caso de AWS se da en el rango de 0-100 y en caso de Google Cloud y Azure entre 0-1:

Por otro lado, podemos ver en donde se detecta la cara dentro de la imagen, recuadrada en cada caso con un color diferente. También vemos otros datos relativos al análisis del sentimiento, la edad, el género, las gafas y otros atributos. Como podemos observar cada servicio nos ofrece una propiedades diferentes.

Hay que tener en cuenta que, en este caso, hemos utilizado sólo un subconjunto de las tres APIs con el objetivo de hacer una comparativa los más equivalente posible. Las tres APIs disponen de más funcionalidades que no analizaremos en este artículo, por ejemplo la localización en la imagen de rasgos faciales (ojos, boca, nariz…).

Conclusión

En resumen, las APIs de visión o de reconocimiento de imágenes están ya lo bastante maduras para ser incorporadas en proyectos productivos. Todavía existen notables diferencias entre unos proveedores y otros en cuanto a las funcionalidades ofrecidas y la precisión de los modelos, pero los servicios están evolucionando muy rápidamente.

En este artículo hemos analizado tres plataformas, pero existen más. Debemos seleccionar cuidadosamente qué servicio nos conviene más para nuestro caso de uso y tener en cuenta que estamos en mitad de una carrera de las grandes plataformas cloud por ofrecer mejores servicios a coste inferior. Sin duda, esto es una ventaja para los desarrolladores y las empresas que quieran explotar esta tecnología en sus productos.

Como conclusión, podemos afirmar que la Inteligencia Artificial, como servicio, es una muy buena alternativa para introducirnos en estas tecnologías de última generación sin la complejidad y el conocimiento necesario que suponen entrenar y productivizar nuestro propio modelo basado en técnicas de Machine Learning o Deep Learning. La era de la IA ya ha llegado para quedarse.
Nuevo llamado a la acción

Manuel Zaforas es Ingeniero Superior en Informática por la UPM. Está interesado en Big Data, AI, Data Science, Machine Learning, Deep Learning, HPC, IoT, Cloud, NoSQL, NewSQL, Python y Agile. Actualmente trabaja en Paradigma como Scrum Master y Arquitecto Software dentro del área de AI & Big Data, ayudando a diferentes compañías a llevar a cabo sus procesos de transformación digital gracias al cambio cultural y a la implantación de la tecnología más innovadora.

Ver toda la actividad de Manuel Zaforas