Imagine tener una colección de datos de cientos de miles a millones de imágenes sin metadatos que describan el contenido de cada imagen. ¿Cómo podemos construir un sistema que sea capaz de encontrar un subconjunto de aquellas imágenes que mejor respondan a la consulta de búsqueda de un usuario?
Lo que básicamente necesitaremos es un motor de búsqueda que sea capaz de clasificar los resultados de las imágenes según su correspondencia con la consulta de búsqueda, que puede expresarse en un lenguaje natural o mediante otra imagen de consulta.
La forma en que resolveremos el problema en esta publicación es entrenando un modelo neuronal profundo que aprende una representación (o incrustación) de longitud fija de cualquier imagen y texto de entrada y hace que esas representaciones estén cercanas en el espacio euclidiano si los pares texto- imagen o imagen-imagen son “similares”.
No pude encontrar un conjunto de datos de clasificación de resultados de búsqueda que fuera lo suficientemente grande, pero pude obtener este conjunto de datos: http://jmcauley.ucsd.edu/data/amazon/ que vincula imágenes de artículos de comercio electrónico con sus título y descripción. Usaremos estos metadatos como fuente de supervisión para aprender representaciones significativas de texto e imagen unidas. Los experimentos se limitaron a artículos de moda (ropa, zapatos y joyería) y a 500.000 imágenes para gestionar los cálculos y los costes de almacenamiento.
El conjunto de datos que tenemos vincula cada imagen con una descripción escrita en lenguaje natural. Entonces definimos una tarea en la que queremos aprender una representación unida de longitud fija para imágenes y texto de modo que cada representación de imagen esté cerca de la representación de su descripción.
El modelo toma 3 entradas: la imagen (que es el ancla), el título de la imagen + descripción (el ejemplo positivo) y la tercera entrada es un texto muestreado al azar (el ejemplo negativo).
Luego definimos dos submodelos:
El submodelo de imagen produce la incrustación para Anchor **E_a ** y el submodelo de texto genera la incrustación para el título positivo + descripción E_p y la incrustación para el texto negativo E_n .
Luego entrenamos optimizando la siguiente pérdida triplete:
L = máx( d(E_a, E_p)-d(E_a, E_n)+alfa, 0)
Donde d es la distancia euclidiana y alfa es un hiperparámetro igual a 0,4 en este experimento.
Básicamente, lo que permite esta pérdida es hacer que **d(E_a, E_p) sea pequeño y d(E_a, E_n) **grande, de modo que la incrustación de cada imagen esté cerca de la incrustación de su descripción y lejos de la incrustación de texto aleatorio.
Una vez que aprendimos el modelo de incrustación de imágenes y el modelo de incrustación de texto, podemos visualizarlos proyectándolos en dos dimensiones usando tsne (https://scikit-learn.org/stable/modules/generated/sklearn.manifold.TSNE.html).
Las imágenes de prueba y su correspondiente descripción de texto están vinculadas por líneas verdes.
Podemos ver en la trama que generalmente, en el espacio de incrustación, las imágenes y sus correspondientes descripciones son cercanas. Que es lo que esperaríamos dada la pérdida de entrenamiento que se utilizó.
Aquí utilizamos algunos ejemplos de consultas de texto para buscar las mejores coincidencias en un conjunto de 70.000 imágenes. Calculamos la incrustación de texto para la consulta y luego la incrustación de cada imagen de la colección. Finalmente seleccionamos las 9 imágenes principales que son las más cercanas a la consulta en el espacio de incrustación.
Estos ejemplos muestran que los modelos de incrustación pueden aprender representaciones útiles de imágenes e incrustaciones de composiciones simples de palabras.
Aquí usaremos una imagen como consulta y luego buscaremos en la base de datos de 70.000 imágenes los ejemplos que más se parezcan a ella. La clasificación está determinada por qué tan cerca está cada par de imágenes en el espacio de incrustación utilizando la distancia euclidiana.
Los resultados ilustran que las incrustaciones generadas son representaciones de imágenes de alto nivel que capturan las características más importantes de los objetos representados sin estar excesivamente influenciadas por la orientación, la iluminación o detalles locales menores, sin estar entrenados explícitamente para hacerlo.
En este proyecto trabajamos en los bloques de aprendizaje automático que nos permiten construir un motor de búsqueda basado en palabras clave e imágenes aplicado a una colección de imágenes. La idea básica es aprender una función de incrustación significativa y unida para texto e imagen y luego usar la distancia entre elementos en el espacio de incrustación para clasificar los resultados de la búsqueda.
Referencias: