¿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?
¿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?
Respuestas:
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:
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:
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:
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:
Convertir imagen a escala de grises
Haz que tu imagen sea cero
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:
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.
Una consulta de imagen, por ejemplo, encuéntrame imágenes similares a la imagen de consulta, se resuelve de la siguiente manera:
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