Cómo usar Elasticsearch para implementar "búsqueda de imágenes"

1. ¿Qué es la búsqueda de mapas?

"Búsqueda de imágenes" se refiere a un método de búsqueda de imágenes. Los usuarios pueden cargar una imagen y el motor de búsqueda arrojará resultados de imágenes similares o relacionadas. Este método de búsqueda no requiere que el usuario ingrese texto, pero encuentra imágenes similares o relacionadas comparando la información visual de las imágenes. Esta tecnología es útil en muchas aplicaciones diferentes, como encontrar imágenes idénticas o similares, encontrar la fuente de una imagen o identificar objetos en una imagen, entre otras.

La base técnica de la búsqueda de imágenes incluye principalmente el procesamiento de imágenes y el aprendizaje automático. A través del procesamiento de imágenes, se pueden extraer las características de las imágenes (como el color, la forma, la textura, etc.) y luego estas características se pueden comparar a través de modelos de aprendizaje automático para encontrar imágenes similares. En los últimos años, el aprendizaje profundo también ha jugado un papel importante en la búsqueda de imágenes, haciendo que los resultados de búsqueda sean más precisos y eficientes.

Por ejemplo: Google "búsqueda por imagen", reconocimiento de imágenes de Baidu.

c9986120562f7020ec670890bf3b6c3b.png cd3f2e099331f2af9982e3ad5de84371.png
2. ¿Por qué quieres buscar por imagen? ¿La búsqueda tradicional no es buena?

Tanto la búsqueda de imágenes como la búsqueda de texto tradicional tienen sus propias ventajas y aplicaciones. Aquí hay algunas razones para usar la búsqueda de imágenes:

  • encontrar imágenes similares

Si tiene una imagen y desea encontrar imágenes similares, o buscar otras versiones de la imagen (como resoluciones diferentes o si tiene una marca de agua, etc.), la búsqueda de imágenes es el método más sencillo.

  • encontrar la fuente de la imagen

Si encuentra una imagen que le gusta pero no sabe de dónde proviene, la búsqueda de imágenes puede ayudarlo a encontrar su fuente original, como de qué sitio web proviene o quién la tomó.

  • Identificar lo que hay en una imagen

La búsqueda de imágenes también puede ayudarlo a identificar objetos o personas en imágenes. Digamos, por ejemplo, que tiene una imagen que contiene un objeto desconocido y puede usar una búsqueda de imágenes para identificar de qué se trata.

  • Más allá de las barreras lingüísticas y culturales

A veces, es posible que no pueda describir exactamente lo que está buscando con palabras, o es posible que no sepa su nombre correcto. En este caso, la búsqueda de imágenes puede ayudarlo a encontrar la información que necesita, independientemente del idioma y las diferencias culturales.

Por ejemplo: llevé a los niños a jugar en la comunidad, y cuando encontré un insecto, los niños se juntaron y el niño curioso preguntó: "¿Cómo se llama este insecto?" Los padres ni siquiera lo sabían, era un Un poco como el insecto de frijol que vi cuando era joven, pero no es exactamente lo mismo, y finalmente obtuve la respuesta con la ayuda de "Baidu Map".

En general, la búsqueda de imágenes es una herramienta muy útil que complementa y mejora la búsqueda de texto tradicional. Sin embargo, no es una panacea y, a veces, debe usarse junto con la búsqueda de texto para obtener los mejores resultados de búsqueda.

3. ¿Cómo implementa Elasticsearch 8.X la búsqueda de gráficos?

Desde un punto de vista macro, similar a los varios pasos principales de "poner un elefante en el refrigerador", Elasticsearch 8.X necesita dos pasos principales para realizar la búsqueda de imágenes:

Paso 1: Extracción de características

Utilice métodos de procesamiento de imágenes y aprendizaje automático, como redes neuronales convolucionales, para extraer características de las imágenes. Estas características generalmente se codifican como un vector, que se puede usar para medir la similitud de las imágenes. Hay algunas bibliotecas de herramientas de código abierto que se pueden usar para la extracción de características de imágenes, algunos ejemplos son los siguientes:

Biblioteca de herramientas idioma principales características
OpenCV C++,Python,Java Proporcione una variedad de algoritmos de extracción de características, como SIFT, SURF, ORB, etc.; también proporcione una serie de funciones de procesamiento de imágenes
TensorFlow Pitón Proporcione modelos de redes neuronales profundas previamente entrenados, como ResNet, VGG, Inception, etc., para extraer características de imágenes.
PyTorch Pitón Proporcione modelos de redes neuronales profundas previamente entrenados, como ResNet, VGG, Inception, etc., para extraer características de imágenes.
VL hazaña C,MATLAB Proporcione una variedad de algoritmos de extracción de características, como SIFT, HOG, LBP, etc.

Estas bibliotecas proporcionan una gran cantidad de herramientas y funciones para la extracción de características de imágenes, lo que puede ayudar a los desarrolladores a implementar rápidamente la extracción de características de imágenes. Cabe señalar que diferentes métodos de extracción de características pueden ser adecuados para diferentes tareas, y qué método elegir depende de los requisitos específicos de la aplicación.

Paso 2: indexación y búsqueda

Almacene los vectores de características extraídos en Elasticsearch y luego use la capacidad de búsqueda de Elasticsearch para encontrar imágenes similares. El tipo de datos vectoriales de Elasticsearch se puede usar para almacenar vectores, y las consultas script_score se pueden usar para calcular la similitud.

4. Combate real de "búsqueda de imágenes" de Elasticsearch 8.X

4.1 Combinación de arquitectura

22353cd3a8e3b2a88705c84ec3d35c78.png
  • Capa de datos: los datos de imagen están dispersos en Internet y deben recopilarse y realizarse.

  • Capa de recopilación: use rastreadores o herramientas existentes para recopilar datos y almacenarlos localmente.

  • Capa de almacenamiento: con la ayuda de herramientas de conversión de vectores o herramientas de modelo, recorra la imagen como un vector y guárdela en Elasticsearch.

  • Capa empresarial: una vez que la imagen se convierte en un vector, la búsqueda de imágenes se realiza con la ayuda de la recuperación de knn.

4.2 Selección de herramientas clip-ViT-B-32-multilingual-v1

frase-transformers/clip-ViT-B-32-multilingual-v1 es una versión multilingüe del modelo CLIP-ViT-B32 de OpenAI.

12e06a028be307aac1ed71e2ee295c75.png

El modelo puede mapear texto (más de 50 idiomas) e imágenes en un espacio vectorial denso común, de modo que las imágenes y el texto coincidente estén estrechamente conectados. Este modelo se puede utilizar para la búsqueda de imágenes (los usuarios buscan en una gran cantidad de imágenes) y la clasificación de imágenes multilingües (las etiquetas de las imágenes se definen como texto).

Dirección del modelo: https://huggingface.co/sentence-transformers/clip-ViT-B-32-multilingual-v1

4.3 Generación de vectores

Las siguientes funciones pueden generar vectores a partir de imágenes de conjuntos de datos existentes.

model.encode(image)

La referencia vectorial generada es la siguiente:

be04545a0eade6e78d1561955e18de00.png

4.4 Ejecutar una búsqueda

POST my-image-embeddings/_search
{
  "knn"           : {
  "field"         : "image_embedding",
  "k"             : 5,
  "num_candidates": 10,
  "query_vector"  : [
      -0.7245588302612305,
      0.018258392810821533,
      -0.14531010389328003,
      -0.08420199155807495,
     .....省略.......
    ]
  },
  "fields": [
    "image_id",
    "image_name",
    "relative_path"
  ]
}

La solicitud de búsqueda anterior utiliza el complemento k-NN (k-vecino más cercano) de Elasticsearch para encontrar la imagen más cercana a query_vector.

Los significados de los parámetros específicos son los siguientes:

parámetro significado
conocido Indica que se utilizará la búsqueda del vecino más cercano.
campo Define los campos para realizar búsquedas k-NN. En este caso, el campo image_embedding debería contener el vector de incrustación de la imagen.
num_candidatos es una opción que controla la precisión de la búsqueda y la compensación de rendimiento. En un índice grande, encontrar los k vecinos más cercanos exactos puede ser lento. Por lo tanto, el complemento k-NN primero encuentra num_candidates candidatos, y luego entre estos candidatos encuentra los k vecinos más cercanos. En este ejemplo, num_candidates: 10 significa que primero se encuentran 10 candidatos y luego se encuentran 5 vecinos más cercanos entre estos candidatos.
consulta_vector Vectores de consulta para comparar. El complemento k-NN calcula la distancia entre este vector y cada vector en el índice y devuelve los k vectores más cercanos. En este caso, query_vector es una gran lista de flotantes que representan el vector de incrustación de la imagen.
campos Define los campos devueltos. En este ejemplo, los resultados de la búsqueda solo contendrán los campos image_id, image_name y relative_path. Si no se especifica el parámetro de campos, los resultados de la búsqueda contendrán todos los campos.

4.5 Visualización de resultados de búsqueda de imágenes

99884afb28df62392a884939aa51dbea.gif

c785992f3cf164e315af9a19b5c51a28.png

5. Resumen

Para resumir, la implementación de la función de búsqueda de imágenes se centra en dos componentes clave: Elasticsearch y el modelo pre-entrenado sentencia-transformers/clip-ViT-B-32-multilingual-v1.

Elasticsearch, como servidor de búsqueda basado en Lucene, proporciona una plataforma basada en interfaz web RESTful para la búsqueda distribuida de texto completo para múltiples usuarios. Por otro lado, sentence-transformers/clip-ViT-B-32-multilingual-v1, este modelo pre-entrenado, basado en el modelo CLIP de OpenAI, puede generar representaciones vectoriales de texto e imágenes, lo cual es muy útil para comparar la similitud. de texto e imágenes importante.

En el proceso de implementación específico, las características de cada imagen son extraídas por el modelo previamente entrenado, y el vector obtenido puede considerarse como la representación matemática de la imagen. Estos vectores se almacenarán en Elasticsearch, que proporciona un mecanismo eficiente de búsqueda de vecinos más cercanos para la función de búsqueda de gráficos. Cuando se carga una nueva imagen para la búsqueda, el modelo previamente entrenado también se usa para extraer características, obtener un vector y compararlo con el vector de imagen almacenado en Elasticsearch para encontrar la imagen más similar.

Todo el proceso refleja el importante papel del modelo preentrenado en la extracción de características de la imagen y la poderosa capacidad de Elasticsearch en la búsqueda eficiente del vecino más cercano. La combinación de los dos proporciona un soporte técnico fiable para la realización de la función de búsqueda de imágenes.

referencia

  • 1、https://huggingface.co/sentence-transformers/clip-ViT-B-32-multilingual-v1

  • 2、https://github.com/rkouye/es-clip-image-search

  • 3、https://github.com/radoondas/flask-elastic-image-search

  • 4、https://www.elastic.co/guide/en/elasticsearch/reference/current/knn-search.html

  • 5, https://unsplash.com/data

------

Hemos creado un grupo de intercambio técnico de alta calidad. Cuando estés con personas excelentes, tú mismo te convertirás en excelente. Date prisa y haz clic para unirte al grupo y disfrutar de la alegría de crecer juntos. Además, si quieres cambiar de trabajo recientemente, pasé 2 semanas al año recopilando una ola de experiencia cara a cara de grandes fábricas. Si planeas cambiar de trabajo después del festival, ¡puedes hacer clic aquí para reclamarlo !

Lectura recomendada

··································

Hola soy DD programador, llevo 10 años desarrollando driver veterano, MVP de Alibaba Cloud, TVP de Tencent Cloud. Desde desarrollo general hasta arquitecto y socio. En el camino, mi sentimiento más profundo es que debemos seguir aprendiendo y prestar atención a la frontera. Siempre que pueda perseverar, pensar más, quejarse menos y trabajar duro, ¡será fácil adelantar en las curvas! Así que no me preguntes si es demasiado tarde para hacer lo que hago ahora. Si eres optimista sobre algo, debes perseverar para ver esperanza, no perseverar solo cuando veas esperanza. Créeme, mientras te apegues a ello, ¡serás mejor que ahora! Si aún no tiene una dirección, puede seguirme primero y, a menudo, compartiré información de vanguardia aquí para ayudarlo a acumular capital para tomar curvas y adelantar.

Supongo que te gusta

Origin blog.csdn.net/j3T9Z7H/article/details/131388281
Recomendado
Clasificación