¿Qué algoritmo utiliza Google para su sitio "Buscar por imagen"?

45

¿Cuál es su mejor estimación de cómo funciona la Búsqueda de imágenes de Google? Puedo subir una foto y buscar imágenes similares. ¿Qué algoritmo usa para identificar imágenes similares?

Cory
fuente
Podrían almacenar el histograma de la imagen. Esto funciona para diferentes escalas de la misma imagen y pequeñas diferencias debido a artefactos de compresión o lo que sea.
helio
1
Los histogramas no capturan información espacial; obtendrías falsas coincidencias.
Emre
Redes neuronales: research.googleblog.com/2015/06/…
endolith

Respuestas:

29

No sé qué algoritmo usa Google. Pero, dado que quería una mejor suposición, permítame darle algunas ideas sobre cómo se podría construir un sistema similar .

Todo el campo relacionado con la búsqueda-imagen-base-por-imagen se llama Recuperación de imagen basada en contenido (CBIR) . La idea es, de alguna manera, construir una representación de imagen (no necesariamente comprensible para los humanos) que contenga la información sobre el contenido de la imagen .

Existen dos enfoques básicos:

  • recuperación utilizando características de bajo nivel (locales): color, textura, forma en partes específicas de las imágenes (una imagen es una colección de descriptores de características locales )
  • enfoques semánticos donde una imagen es, de alguna manera, representada como una colección de objetos y sus relaciones

El enfoque local de bajo nivel está muy bien investigado. El mejor enfoque actual extrae características locales (hay una opción de algoritmo de extracción de características involucrado aquí) y usa sus descriptores locales (nuevamente, elección de descriptores) para comparar las imágenes.

En trabajos más nuevos, los descriptores locales se agrupan primero y luego los grupos se tratan como palabras visuales ; la técnica es muy similar a la búsqueda de documentos de Google, pero usando palabras visuales en lugar de letras.

Puede pensar en las palabras visuales como equivalentes a las raíces de las palabras en el lenguaje: por ejemplo, las palabras: trabajo, trabajo, trabajado, todas pertenecen a la misma raíz de palabra.

Uno de los inconvenientes de este tipo de métodos es que generalmente tienen un rendimiento inferior en imágenes de baja textura.

Ya he dado y visto muchas respuestas que detallan estos enfoques, así que solo proporcionaré enlaces a esas respuestas:

  • CBIR: 1 , 2
  • extracción / descripción de características: 1 , 2 , 3 , 4

Los enfoques semánticos se basan típicamente en representaciones jerárquicas de toda la imagen. Estos enfoques aún no se han perfeccionado, especialmente para los tipos de imágenes generales. Existe cierto éxito en la aplicación de este tipo de técnicas a dominios de imagen específicos.

Como actualmente estoy investigando estos enfoques, no puedo sacar ninguna conclusión. Ahora, dicho eso, expliqué una idea general detrás de estas técnicas en esta respuesta .

Una vez más, en breve: la idea general es representar una imagen con una estructura en forma de árbol, donde las hojas contienen los detalles de la imagen y los objetos se pueden encontrar en los nodos más cercanos a la raíz de dichos árboles. Luego, de alguna manera, compara los subárboles para identificar los objetos contenidos en diferentes imágenes.

Aquí hay algunas referencias para diferentes representaciones de árboles. No los leí todos, y algunos de ellos usan este tipo de representaciones para la segmentación en lugar de CBIR, pero aún así, aquí están:

penelope
fuente
22

Además de la respuesta de Penélope, hay dos enfoques, el hash perceptual y el modelo de bolsa de palabras cuya funcionalidad básica se implementa fácilmente y por lo tanto es agradable jugar con ellos o aprender de ellos, antes de aventurarse en un territorio más avanzado.

Hash perceptual

Los algoritmos de hash perceptuales apuntan a construir un hash, que a diferencia de un hash criptográfico, dará valores de hash similares o casi similares para imágenes idénticas que han sido ligeramente distorsionadas, por ejemplo, por escalado o compresión JPEG. Sirven para un propósito útil en la detección de duplicados cercanos en una colección de imágenes.

En su forma más básica, puede implementar esto de la siguiente manera:

  1. Convertir imagen a escala de grises

  2. Haz que tu imagen sea cero

  3. Aplasta tu imagen al tamaño de la miniatura, por ejemplo [32x32]
  4. Ejecute la transformación bidimensional de coseno discreto
  5. Mantenga la parte superior izquierda [8 x 8], los componentes de baja frecuencia más significativos
  6. Binarice el bloque, según el signo de los componentes.

El resultado es un hash de 64 bits resistente, porque se basa en los componentes de baja frecuencia de la imagen. Una variante sobre este tema sería dividir cada imagen en 64 subbloques y comparar la media de la imagen global con la media del subbloque local y escribir un 1 o 0 en consecuencia.

El hash perceptual se implementa por ejemplo por phash

Modelo de bolsa de palabras

El modelo de bolsa de palabras tiene como objetivo identificar semánticamente una imagen, por ejemplo, todas las imágenes con perros en ellas. Lo hace mediante el uso de ciertos parches de imagen con el mismo espíritu que uno clasificaría un documento de texto basado en la aparición de ciertas palabras. Se pueden clasificar las palabras, decir "perro" y "perros" y almacenarlas como identificador en un archivo invertido donde la categoría "perro" ahora apunta a todos los documentos que contienen "perro" o "perros".

En su forma más simple, uno puede hacer esto con imágenes de la siguiente manera:

  1. Implemente las llamadas características SIFT, por ejemplo, utilizando la excelente biblioteca vlfeat , que detectará los puntos de características SIFT y un descriptor SIFT por punto. Este descriptor es básicamente una plantilla construida de manera inteligente del parche de imagen que rodea ese punto de característica. Estos descriptores son tus palabras crudas.
  2. Recopile descriptores SIFT para todas las imágenes relevantes

Ahora tiene una gran colección de descriptores SIFT. El problema es que, incluso a partir de imágenes casi idénticas, habrá algunos desajustes entre los descriptores. Desea agrupar los idénticos más o menos como tratar algunas palabras, como "perro" y "perros" como idénticos y necesita compensar los errores. Aquí es donde entra en juego la agrupación.

  1. Tome todos los descriptores SIFT y agrúpelos, por ejemplo, con un algoritmo como k-means. Esto encontrará un número predeterminado de clústeres con centroides en los datos de su descriptor. Estos centroides son tus nuevas palabras visuales.
  2. Ahora, por imagen y sus descriptores originales encontrados, puede ver los grupos a los que se asignaron estos descriptores. A partir de esto, usted sabe qué centroides o palabras visuales 'pertenecen' a su imagen. Estos centroides o palabras visuales se convierten en el nuevo descriptor semántico de su imagen que puede almacenarse en un archivo invertido.

Una consulta de imagen, por ejemplo, encuéntrame imágenes similares a la imagen de consulta, se resuelve de la siguiente manera:

  1. Encuentre los puntos SIFT y sus descriptores en la imagen de consulta
  2. Asigne los descriptores de consulta a los centroides que encontró anteriormente en la fase de inscripción. Ahora tiene un conjunto de centroides o palabras visuales que pertenecen a su imagen de consulta
  3. Haga coincidir las palabras visuales de consulta con las palabras visuales en su archivo invertido y devuelva las imágenes coincidentes
Maurits
fuente
1
Su enfoque de bolsa de palabras es básicamente a lo que conducen mis enlaces para el "enfoque local" :) Aunque no es realmente de naturaleza semántica: nunca representaría a un solo perro con una característica, ni sería tan fácil de identificar diferentes especias para perros como perros. Pero el hashing perceptivo es bueno, no sabía sobre eso. Las explicaciones son agradables. Lo que me hizo pensar ... ¿tendría alguna sugerencia sobre cómo aplicar esa técnica a un área no rectangular? O tal vez proporcione algunas referencias a los artículos, podría leer un poco y, si la pregunta tiene sentido, abrirla como una pregunta separada.
Penélope
1
@penelope He leído en un artículo, hace años, donde los autores dividían una imagen en triángulos arbitrarios. Y existe la transformación de rastreo que también se ha utilizado como base para un hash perceptual. Volvere a ti.
Maurits
Todo lo que quiero preguntar sobre esto está mucho más allá del alcance de esta pregunta, así que abrí una nueva. Más información / referencias sobre la técnica básica también sería genial, ya sea en esta respuesta o en aquella. Mirando hacia el futuro :)
penelope
2

El otro enfoque interesante que parece descuidarse en las respuestas anteriores es Redes neuronales convolucionales profundas. Parece Google lo está utilizando en este momento por su buscador de imágenes y su servicio de traducción . Las CNN son extremadamente poderosas en tareas cognitivas como la búsqueda de similitudes. Parece que CNN lleva a cabo un procedimiento similar de Bag-of-worlds que está incrustado a través de sus capas de red. La desventaja de estas técnicas es la incapacidad de desaprender y el requisito de un gran conjunto de datos para el entrenamiento y, por supuesto, un alto costo computacional en la etapa de entrenamiento.

Documento sugerido al respecto:

e implementación de recuperación de imágenes de aprendizaje profundo de código abierto (el documento posterior): https://github.com/paucarre/tiefvision

MimSaad
fuente