Inicio / Artículos

Búsqueda híbrida de imágenes a gran escala: SigLIP, SPLADE, YOLOv8 y Gemini Captions

Diseño de un sistema de búsqueda de un millón de imágenes que combina embeddings densos y dispersos con detección de objetos, reconocimiento de entidades, búsqueda segura y descripciones escritas por modelos LLM.

Editor: REACTAPP.TOP6 min de lectura1358 palabras

Fuentes: Building Image Search System Leveraging Modern AI Services

La coincidencia de palabras clave en las etiquetas solo sirve hasta cierto punto con las imágenes. Los equipos que crean catálogos de comercio electrónico, herramientas de gestión de contenido o bibliotecas de activos digitales desean una búsqueda que comprenda lo que muestra una imagen, su estilo y su tono emocional, y no solo las palabras que alguien escribió en un campo de etiqueta. El diseño a continuación describe un sistema híbrido de búsqueda de imágenes que recupera información de un repositorio de aproximadamente un millón de imágenes utilizando tanto contenido visual como consultas de texto, construido en su mayor parte a partir de servicios de IA existentes para mantener bajo el esfuerzo de desarrollo.

La arquitectura combina varios componentes especializados. Estos se explican a continuación en el orden en que fluyen los datos a través de ellos: incrustaciones, análisis de imágenes, generación de descripciones, manejo de consultas y operaciones.

Dos modelos de incrustación

El sistema se basa en dos pipelines de incrustación separados, cada uno de los cuales captura un aspecto diferente del contenido.

Las imágenes utilizan SigLIP. Tras evaluar también CLIP e ImageBind, SigLIP resultó ser el mejor. Se trata de un modelo contrastivo de imagen-texto entrenado con una función de pérdida sigmoide, y los resultados publicados indican que su precisión en ImageNet sin entrenamiento previo es de alrededor del 76%, unos puntos por encima de los modelos CLIP comparables. Además, requiere menos recursos computacionales, aproximadamente un 40% menos según la comparación aquí citada, y puede generalizarse a nuevos dominios sin necesidad de ajustes finos. Cada imagen se convierte en un vector denso en un espacio donde los puntos cercanos se parecen entre sí.

El texto utiliza SPLADE v2. SPLADE genera vectores dispersos vinculados directamente a un vocabulario, lo que ofrece tres ventajas:

  • La salida dispersa sigue siendo interpretable, ya que cada dimensión se corresponde con un término real.
  • Amplía las consultas léxicamente por sí mismo, lo que reduce los problemas de desajuste de vocabulario que afectan a la recuperación de información (“sofa” frente a “couch”).
  • Dado que las dimensiones son términos, se puede rastrear la coincidencia hasta las palabras exactas que la causaron, lo cual facilita la explicación de los resultados.
  • Comprensión de cada imagen

    Los píxeles en bruto se convierten en capas de información consultable a través de un proceso en varias etapas.

    Detección de objetos con YOLOv8. YOLO analiza toda la imagen en una sola pasada de la red, por lo que es mucho más rápido que los detectores de dos etapas como Faster R-CNN. En esta configuración, la variante de mayor tamaño tarda aproximadamente 50 ms por imagen, lo suficiente para un procesamiento eficiente en lotes. Logra un mAP del 53,9% en COCO con 80 clases comunes, y el modelo se distribuye fácilmente entre un clúster de GPUs.

    De clases genéricas a entidades nombradas. La detección genera etiquetas como persona, coche y edificio. Las búsquedas avanzadas requieren identidades específicas, por lo que un servicio de entidades web las convierte:

    Example Transformation:
    
    YOLO: "person" (coordinates: [120, 45, 220, 320])
    Web Extraction: "Elon Musk" (confidence: 0.96)
    
    YOLO: "building" (coordinates: [50, 100, 400, 600])
    Web Extraction: "Eiffel Tower" (confidence: 0.92)
    

    Ese servicio reconoce más de cinco millones de entidades en grupos como figuras públicas, monumentos, productos y marcas, así como eventos. Este paso conecta la detección visual con el significado. Por lo tanto, funciona una consulta para un cantante en particular, en lugar de una genérica para cualquier persona.

    Etiquetas de una API de visión. Los conceptos generales, actividades y temas provienen de la detección de etiquetas, la cual, en las pruebas, identificó más de 10,000 conceptos distintos en todo el repositorio. Esto ayuda con tres cosas: actividades como hacer senderismo o cocinar, escenarios como la playa o el bosque, y objetos demasiado específicos para las categorías de YOLO, como un cappuccino, del cual YOLO solo menciona la taza.

    Búsqueda segura. El contenido se marca según cinco dimensiones: adulto, violencia, médico, broma (memes e imágenes editadas) y contenido sensual. Cada dimensión cuenta con una puntuación de confianza, lo que permite ajustar el filtrado según la política organizacional. La automatización de esta etapa reemplazó una gran cantidad de revisiones manuales.

    Gemini para metadatos y descripciones

    Gemini genera metadatos estructurados. Gracias a una ingeniería cuidadosa de las instrucciones, se creó un modelo que extrae de forma fiable 25 atributos, cada uno con una puntuación de confianza entre 0 y 1, como por ejemplo el nivel de sensibilidad y la emoción:

    System: You are an expert image analyzer. Extract the following attributes from the image, with a confidence score (0-1):
    
    1. sensitivity (none, low, medium, high)
    2. emotion (neutral, joy, sadness, surprise, etc.)
    3. emotion_triggered (yes/no)
    4. text_overlay (yes/no)
    5. has_frames (yes/no)
    6. has_religious_symbols (yes/no)
    7. has_scattered_objects (yes/no)
    8. style (photographic, illustrated, cartoon, abstract, etc.)
    9. has_crowd (yes/no)
    ...
    [full list of 25 attributes]
    
    Response format: JSON object with attributes as keys and values as described above.
    

    Las salidas combinadas de detección, entidades, atributos y metadatos se utilizan luego para alimentar un segundo prompt de Gemini que genera una descripción completa. El diseño del prompt es muy importante aquí, ya que las descripciones deben ser:

    1. Ricas en palabras clave, lo cual facilita la búsqueda de texto.
    2. Coherentes en estructura, para que puedan analizarse de manera fiable.
    3. Significativas en contexto, mostrando por qué son importantes las entidades detectadas.
    4. Conscientes de atributos como la emoción y el estilo.
    5. Escribidas teniendo en cuenta los términos de búsqueda probables.

    El modelo sigue este formato:

    Generate a comprehensive, search-optimized description for this image based on the following data:
    
    [Entity data from object detection and recognition]
    [Label data from Vision API]
    [Structured metadata from previous Gemini analysis]
    
    Your description should:
    1. Begin with the most significant entities and their actions/relationships
    2. Include key visual attributes (colors, style, composition)
    3. Mention emotional tone and aesthetic qualities
    4. Incorporate likely search terms
    5. Be 3-5 sentences in length
    

    Tome primero los datos brutos de detección:

    Objects: person (0.98), guitar (0.95), microphone (0.92)
    Entities: Taylor Swift (0.97)
    Labels: concert, performance, stage, entertainment
    Metadata: emotion=joy, has_crowd=yes, style=photographic, dominant_color=purple
    

    Después del enriquecimiento, se convierte en una oración buscable:

    Taylor Swift performs energetically on stage with an acoustic guitar during a concert, singing into a microphone with passionate expression. The image captures the excitement of a live performance with purple stage lighting creating a vibrant atmosphere. This high-quality photograph conveys feelings of joy and excitement, with Swift's iconic performance style clearly visible. The composition includes partial views of an enthusiastic crowd in the foreground, making this suitable for music, entertainment, and celebrity content.
    

    Ese tipo de descripciones contienen abundante contenido buscable, mantienen su significado en el contexto, incluyen atributos visuales y emocionales y reflejan lo que es probable que escriban los usuarios.

    Responder a una consulta

    Las consultas pasan por seis etapas:

    1. Análisis. La clasificación de la intención determina si el usuario desea entidades específicas, estilos, emociones u otros atributos.
    2. Extracción de entidades. Las entidades nombradas en la consulta se comparan con la base de datos de entidades para que reciban el peso adecuado.
    3. Incorporación. La consulta se incorpora mediante SPLADE v2 y SigLIP, de forma similar a cómo se representaron las imágenes.
    4. Búsqueda vectorial. La incorporación de la consulta obtiene las representaciones vectoriales de imagen más cercanas del índice.
  • Filtrado de políticas. Se aplican reglas específicas por región y a nivel organizacional: umbrales de seguridad adaptados a la región del usuario, seguridad de marca, filtrado adecuado para la edad y derechos de licencia.
  • Reclasificación. Varios factores ajustan el orden en la primera pasada:
    • Diversidad, mediante un algoritmo codicioso que mantiene una distancia de coseno mínima entre las imágenes seleccionadas.
    • Reciente, dando mayor importancia a los elementos más recientes mediante una disminución exponencial en el tiempo: score_boost = base_score * (1 + alpha * exp(-beta * days_old)).
    • Popularidad, utilizando un atenuamiento logarítmico para que los elementos muy utilizados no dominen.
    • Reglas empresariales para ajustes específicos del dominio.

    Dos problemas difíciles

    Latencia. La concatenación de varias capas de servicios genera retrasos, y las primeras mediciones mostraron que el tiempo total por imagen superaba los cuatro segundos. Las soluciones incluyeron llamadas paralelas asíncronas, procesamiento por lotes para pipelines no interactivos, colocación de servicios cercanos entre sí para reducir el tiempo de red y una clasificación según la complejidad de las imágenes. El tiempo promedio disminuyó a 850 ms por imagen, con el 95% completándose en menos de 1,2 segundos.

    Complejidad de integración. Cada servicio cuenta con su propia API, comportamiento ante errores y perfil de rendimiento. Lo que ayudó fue una capa de abstracción unificada con un manejo consistente de errores, interruptores de circuito y soluciones alternativas por servicio, métricas de estado para cada dependencia y una degradación gradual que permite al sistema seguir funcionando incluso ante fallos parciales.

    Resultados y próximos pasos

    Valió la pena invertir en servicios de IA gestionados. El desarrollo tomó cuatro meses, frente a una estimación inicial de más de doce para una solución personalizada; la satisfacción con los resultados de búsqueda aumentó un 40%, mientras que el etiquetado y la categorización manuales disminuyeron en un 80%.

    Aún quedan varias direcciones por explorar: personalización basada en el comportamiento del usuario, perfeccionamiento interactivo de los resultados, consultas que combinan texto e imágenes, circuitos de retroalimentación que aprenden de los clics y ajuste fino de modelos de embedding para industrias específicas.