Construye un simple sistema de recuperación de imágenes con un Autoencoder

0

La recuperación de imágenes es un campo de investigación muy activo y en rápido avance en la última década. Los sistemas más conocidos son Google Image Search y Pinterest Visual Pin Search. En este artículo, aprenderemos a construir un sistema de recuperación de imágenes muy simple usando un tipo especial de red neuronal, llamada autoencodo . La forma en que vamos a proceder es de una manera no supervisada, es decir, sin mirar las etiquetas de las imágenes. De hecho, recuperaremos imágenes solo mediante el uso de sus contenidos visuales (texturas, formas, …). Este tipo de recuperación de imágenes se llama recuperación de imágenes basada en contenido (CBIR) opuesta a palabras clave o recuperación de imágenes basadas en texto.

Para este artículo, usaremos imágenes de dígitos escritos a mano, el conjunto de datos MNIST y el marco de aprendizaje profundo Keras.

El conjunto de datos MNIST

Autoencoders

En resumen, los autoencoders son redes neuronales que intentan copiar sus entradas a sus resultados. Trabajan comprimiendo la entrada en una representación de espacio latente y luego reconstruyendo la salida de esta representación. Este tipo de red se compone de dos partes:

  1. Encoder: Esta es la parte de la red que comprime la entrada en una representación de espacio latente. Puede representarse mediante una función de codificación h = f (x) .
  2. Decodificador: Esta parte pretende reconstruir la entrada de la representación del espacio latente. Se puede representar mediante una función de decodificación r = g (h) .

Si desea obtener más información sobre los autoencoders, le sugiero que lea mi publicación previa en el blog . [19659009] Esta representación latente, o código, es lo que nos interesará aquí ya que es la forma en que se encuentra la red neuronal para comprimir el contenido visual de cada imagen. Significa que todas las imágenes similares se codificarán (con suerte) de forma similar.

Existen varios tipos de autoencoders, pero dado que se trata de imágenes, lo más eficiente es utilizar un autoencoder convolucional , que utiliza capas de convolución para codificar y decodificar imágenes.

https://medium.com/media/23a8630598211e76d8a136d45ca5e0e2/href

El primer paso es, por tanto, entrenar nuestro autoencoder con nuestro conjunto de entrenamiento, para que aprenda el camino para codificar nuestras imágenes en una representación de espacio latente.

Una vez realizada la capacitación, solo necesitamos la parte de codificación de la red.

https://medium.com/media/fe6f78b4f2d298dc8f54d396df6caecf/href

Este codificador ahora se puede utilizar para codificar nuestra imagen de consulta.

Nuestra imagen de consulta

La ​​misma codificación debe hacerse en nuestra base de datos de búsqueda, donde queremos encontrar imágenes similares a la imagen de consulta. Luego podemos comparar el código de consulta con el código de la base de datos e intentar encontrar los más cercanos. Para realizar esta comparación, utilizaremos la técnica de vecinos más cercanos.

Vecinos más cercanos

La forma en que vamos a recuperar los códigos más cercanos es mediante la ejecución del algoritmo de vecinos más cercanos. El principio detrás de los métodos vecinos más cercanos es encontrar un número predefinido de muestras más cercanas en distancia al nuevo punto. La distancia puede ser cualquier medida métrica, pero la opción más común es la distancia euclidiana. Para una imagen de consulta q y una muestra s, ambas de dimensión n, esta distancia se puede calcular con la siguiente fórmula.

En este ejemplo, recuperaremos las 5 imágenes más cercanas a la imagen de consulta.

https://medium.com/media/d1f2f77a5658a647b9289ea8261b2810/href

Resultados

¡Estas son las imágenes que recuperamos, se ve genial! Todas las imágenes recuperadas son bastante similares a nuestra imagen de consulta y también todas corresponden al mismo dígito. Esto muestra que el autoencoder, incluso sin mostrar las etiquetas correspondientes de las imágenes, ha encontrado una forma de codificar imágenes similares de una manera muy similar.

Las 5 imágenes recuperadas

Resumen

En este artículo, aprendí a crear un sistema de recuperación de imágenes muy simple mediante el uso de un autoencoder y el algoritmo de vecinos más cercanos. Continuamos entrenando nuestro autoencoder en un gran conjunto de datos, para que aprenda la forma de codificar de manera eficiente el contenido visual de cada imagen. Luego comparamos el código de nuestra imagen de consulta con los códigos de nuestro conjunto de datos de búsqueda y recuperamos los 5 más cercanos. Vimos que nuestro sistema estaba dando muy buenos resultados ya que el contenido visual de nuestras 5 imágenes recuperadas estaba cerca de nuestra imagen de consulta y también que todas representaban el mismo dígito, incluso sin usar ninguna etiqueta en el proceso.

Espero que esto el artículo fue claro y útil para los nuevos profesionales de Deep Learning y nos dio una buena idea de cómo es la recuperación de imágenes con autoencoders. Siéntase libre de darme su opinión o hacerme preguntas si algo no es lo suficientemente claro.

nathanhubens / Unsupervised-Image-Retrieval


Construir un simple sistema de recuperación de imágenes con un autoencoder fue publicado originalmente en Towards Data Science en Medium, donde las personas continúan la conversación resaltando y respondiendo a esta historia.

Deja un comentario

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