Evaluando imágenes con redes neuronales profundas

Buenas! como andan? Por acá todo en orden. Retomando después del fin de semana largo acá en Argentina por el día de la soberanía nacional. 

Y bueno la verdad que vengo de unas semanas muy muy a tope de trabajo y la semana pasada se me hizo imposible grabar un episodio, así que les pido disculpas por eso.

Pero hoy tengo un tema que está muy pero muy interesante, y que tiene que ver con evaluación de fotos tanto desde la parte técnica de la foto como desde la parte estética.

Así que espero que les guste y les resulte tan interesante como a mí.

Pero antes, quiero aprovechar para contarles que en Coconuts estamos buscando front end developer con conocimientos de ReactJs y tambien .NET developers así que si están interesados me avisan y les cuento de que se trata.

Y si además quieren estar en contacto conmigo a traves de Twitter, ahi me pueden encontrar como @pochocosta y en Instagram también como @pochocosta.

Y por último, si llegaste a la web y estás escuchando estos audios por primera vez, que sepas que te podes suscribir al podcast en Spotify, Apple Podcast o la aplicación de podcast que más te guste para no perderte ninguno de los próximos episodios.

Ahora sí, vayamos al tema de la semana.

NIMA: Neural Image Assessment

Y para empezar a hablar de esto nos tenemos que ir hasta Diciembre de 2017, que es cuando Google presentó una red neuronal convolucional profunda a la que llamó NIMA que es el acrónimo de Neural Image Assessment.

Lo que resuelven con NIMA son dos temas: por un lado hacen una evaluación de la calidad técnica de la imagen y le pone un puntaje. Esto se refiere a si la foto se ve nítida o está movida, si está pixelada, todo lo que haga al enfoque desde lo técnico.

Por otro lado lo que hace es aplicar una puntuación desde lo estético, o sea que evalúa la belleza de lo que se está mostrando en la foto, desde el punto de vista de lo que los humanos consideramos belleza. O sea, algo totalmente subjetivo.

Para esto lo que hicieron fue entrenar una red neuronal convolucional con datos etiquetados por humanos pero no para que diga si una foto tiene buena calidad o mala calidad, sino para que prediga un puntaje.

O sea, sería como el juez de un concurso de fotografías al cual le muestran una foto y va a decir: mmmm a esta foto le pongo un 7. Algo así digamos.

Super, super interesante.

Ahora cuando sigamos avanzando vamos a ir viendo para que se puede usar todo esto, de hecho esto YA se está usando y en varios lugares.

Ahora, metamos un poco de contexto en lo que se refiere a la calidad técnica de la foto. 

Evaluar la calidad técnica de una foto

Para esto se conocen dos tipos de abordajes, un de ellos es lo que se conoce como “con referencia” y es donde se da una imagen como ideal y se compara la imagen que se quiere evaluar contra esa ideal. 

Hay métricas que ya se venían usando para esto como por ejemplo la relación de señal y ruido o el índice de similaridad estructural.

El otro abordaje es el que se conoce como “sin referencia” o ciego, que es donde no hay una imagen de referencia. Como en este caso por ejemplo.

Así que bueno, esto es para tener una referencia de lo que se venía usando mayormente hasta ese momento.

Ahora para encarar el entrenamiento de la parte estética lo que hicieron fue usar una base de datos que se llama AVA que tiene más de 250.000 fotos con metadatos que describen lo que se ve en la foto, cada foto está asignada a las 60 categorías que tiene la base de datos, y tiene el histograma de puntuaciones que recibió la foto por los votantes en un concurso de fotografía.

Para darnos una idea, cada foto de esta base de datos fue calificada en promedio por unas 200 personas.

Entonces lo que hace este modelo llamado NIMA es hacer una predicción de probabilidad a cada uno de los puntajes posibles del 1 al 10.

Datasets para los entrenamientos

La arquitectura que usan en ambos casos es la misma, solamente que están entrenadas con dos conjuntos de datos distintos. Para la estética usaron el que mencioné antes que se llama AVA y para la técnica usaron un conjunto de datos que se llama TID2013.

Y son nada más y nada menos que las arquitecturas usadas para hacer clasificación de imágenes, que ya las mencionamos en episodios pasados cuando hablamos de cómo funcionan las redes neuronales convolucionales o cuando hablamos de transferencia de aprendizaje.

Por ej. MobileNet, Inception-v2, VGG16.

Earth Mover’s Distance

Pero con una modificación. Lo que cambia es la función de pérdida. La que están usando se llama Earth Mover’s Distance, en castellano Distancia de movimiento de tierra. 

Es una función de pérdida que está bien interesante, por eso me parece que vale la pena aprovechar y explicar más o menos en qué consiste.

Earth Mover’s Distance quiere decir como la cantidad de tierra que hay que mover. O sea, si tuviéramos dos montoncitos de tierra, cuánto tendríamos que mover desde el que más tiene al otro para que queden iguales.

¿y porque usaron una función de pérdida de este tipo? Bueno, en este caso a diferencia de la función de pérdida que se usa en un clasificador de objetos importa alejada o acercada estuvo una predicción con respecto al valor real.

En cambio en un clasificador de objetos, esto no pasa, porque da lo mismo si clasificó a un perro como gato o como caballo. Está igual de mal en ambos casos.

Pero en este problema que se está resolviendo, se quiere “castigar” más a una predicción alejada que a una cercana.

Por ejemplo, si la calidad de una imagen los humanos la habían calificada con 8 puntos, se quiere castigar más a una predicción que diga que la calidad es 2 que una predicción que diga que la calidad es 7. ¿Se entiende no?

Bien, básicamente de eso se trata esta función de pérdida. Muy interesante.

NIMA en acción

En cuanto al resto. Yo les dejo en las notas un ejemplo de fotos con la puntuación promedio de la base de datos AVA y la puntuación promedio calculada por el modelo para que vean que se asemeja bastante.

Clasificación de algunos ejemplos del conjunto de datos AVA usando NIMA.

Evaluación técnica de imágenes

Después para la parte técnica les dejo unos ejemplos de fotos que se usaron dentro del conjunto de datos de prueba que son tomadas de otra base de datos que tiene fotos originales y para cada una de esas originales distintas variaciones con diferentes distorsiones.

Entonces en base a eso se puede ver como va calificando a las distintas distorsiones y que puntajes les va poniendo y como queda todo bastante lógico con respecto a la percepción que vamos a tener nosotros mismos.

Clasificación de algunos ejemplos del conjunto de datos TID2013 con NIMA. Los puntajes de NIMA pronosticados se muestran debajo de cada imagen.

Así que si entran a las notas del programa y se fijan, en ambos casos el modelo comple con lo que propone resolver. Puede calificar tanto técnica como estéticamente una imagen de manera muy similar a la que lo haríamos los humanos.

Entonces veamos para que se está usando esto.

Casos de uso de la evaluación de fotos

Google en su publicación original, dice que estos puntajes se podrían usar para hacer una edición inteligente de las fotos para optimizarlas y buscar que aumenten su calificación técnica o estética.

Ahora bien, esta técnica me imagino yo que lo están usando en su aplicación Google Fotos, cuando el asistente le propone al usuario una foto con un efecto aplicado – al mejor estilo de los filtros de instagram – que resalta colores, brillo o contraste. Y que probablemente según su modelo esa versión tenga una mejor calificación que la foto original.

Esto yo lo he visto en funcionamiento y por lo general las fotos que elige son fotos que tienen belleza estética, muchas veces pueden ser paisajes.

Y finalmente el filtro que le aplica seguramente está resaltando alguna característica de la foto que hace que se vea aún mejor.

De esto tambien les dejo algunos ejemplos para que vean en las notas del programa.

Ejemplos de fotos optimizadas y sus respectivos puntajes NIMA

Sigamos. Dentro de los posibles usos en la publicación mencionan la posibilidad de que los usuarios encuentren fácilmente las mejores imágenes entre un conjunto grande de fotos o mismo hacer una calificación en tiempo real para que el usuario pueda verla en el mismo momento en que está sacando las fotos.

Bien. Ahora también hay un caso de uso muy muy interesante que es el que aplicó el sitio idealo.de, que es comparador de precios online de Alemania.

Este sitio tiene un portal exclusivo para buscar y comparar precios de hoteles.

Evaluar fotos de hoteles

El problema que ellos tenían es que para cada hotel reciben docenas de fotos y se enfrentaban al desafío de elegir cual era la foto más atractiva para mostrar como foto principal de ese hotel.

Además se habían dado cuenta que las fotos eran tan importantes como las reseñas a la hora de que una persona se decida por un hotel. No solo comparar los precios es lo que importa!

Como se suele decir, una imagen vale más que mil palabras. Más real imposible.

La cosa es que tienen millones de hoteles cargados en su base de datos y más de 100 millones de fotos. Asi que imaginense el esfuerzo que tendrían que hacer manualmente un análisis para calificar todas las fotos segun su atractivo.

Entonces lo que hicieron fue usar las redes neuronales de NIMA para calificar tanto la estética como la técnica de las fotos de hoteles.

Hay un muy buen artículo publicado donde cuentan con detalle cómo hicieron para implementarlo. Incluso los problemas que fueron encontrando en el camino, por haber usado un modelo pre entrenado con las imágenes del conjunto de datos AVA.

El problema ahí es que ese conjunto de datos tiene fotos de muchas categorías además de habitaciones, como paisajes, comida, personas.

Entonces lo que decidieron fue re entrenar el modelo con un set de datos etiquetados creado por ellos que solo tenia fotos de habitaciones y con eso obtuvieron un resultado mucho mejor.

Clasificación para un listado de hotel específico (segunda iteración)

Y bueno esto fue todo por hoy, espero que les haya gustado y si es así les pido que me lo hagan saber. Me pueden mandar un mensaje, o dejar una reseña un iTunes, o compartirlo en las redes sociales.

Aprovecho también para darle las gracias a los de dejan sus comentarios y me gusta en ivoox, y gracias por estar ahí escuchando y también a quienes me mandan sugerencias de temas para hablar.

Ahora sí, nos escuchamos en el próximo episodio donde seguiremos hablando de este hermoso mundo de la inteligencia artificial.

Dejar recomendación en iTunes

Comentarios

2 respuestas a «Evaluando imágenes con redes neuronales profundas»

  1. Avatar de Roberto
    Roberto

    Hola Pocho, muchas gracias por tu labor. Te escribo para decirte que este podcast no se puede reproducir aquí, ni en google podcast. Lo he podido escuchar en spotify. Gracias

    1. Avatar de Pocho Costa
      Pocho Costa

      Gracias por avisarme Roberto! Lo reviso para solucionar cuanto antes!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *