Ir para o conteúdo

Pesquisa Semântica de Imagens com OpenAI CLIP e Meta FAISS

Introdução

Este guia orienta você na construção de um mecanismo de pesquisa de imagens semântica usando OpenAI CLIP, Meta FAISS e Flask. Ao combinar os poderosos embeddings de linguagem visual do CLIP com a pesquisa eficiente de vizinhos mais próximos do FAISS, você pode criar uma interface web totalmente funcional onde pode recuperar imagens relevantes usando consultas em linguagem natural.



Assista: Como funciona a pesquisa de similaridade | Pesquisa visual usando OpenAI CLIP, META FAISS e pacote Ultralytics 🎉

Visualização da Pesquisa Semântica de Imagens

Página da web Flask com visão geral dos resultados da pesquisa semântica

Como Funciona

  • CLIP usa um codificador de visão (por exemplo, ResNet ou ViT) para imagens e um codificador de texto (baseado em Transformer) para linguagem para projetar ambos no mesmo espaço de embedding multimodal. Isso permite a comparação direta entre texto e imagens usando similaridade de cosseno.
  • FAISS (Facebook AI Similarity Search) constrói um índice das incorporações de imagem e permite a recuperação rápida e escalável dos vetores mais próximos a uma determinada consulta.
  • Flask fornece uma interface web simples para enviar consultas em linguagem natural e exibir imagens semanticamente correspondentes do índice.

Esta arquitetura suporta pesquisa zero-shot, o que significa que você não precisa de rótulos ou categorias, apenas dados de imagem e um bom prompt.

Pesquisa Semântica de Imagens usando o pacote Ultralytics Python

Aviso de Caminho da Imagem

Se você estiver usando suas próprias imagens, certifique-se de fornecer um caminho absoluto para o diretório de imagens. Caso contrário, as imagens podem não aparecer na página da web devido às limitações de serviço de arquivos do Flask.

from ultralytics import solutions

app = solutions.SearchApp(
    # data = "path/to/img/directory" # Optional, build search engine with your own images
    device="cpu"  # configure the device for processing i.e "cpu" or "cuda"
)

app.run(debug=False)  # You can also use `debug=True` argument for testing

VisualAISearch classe

Esta classe executa todas as operações de backend:

  • Carrega ou constrói um índice FAISS a partir de imagens locais.
  • Extrai embeddings de imagem e texto usando CLIP.
  • Realiza a busca de similaridade usando a similaridade do cosseno.

Pesquisa de Imagens Semelhantes

Aviso de Caminho da Imagem

Se você estiver usando suas próprias imagens, certifique-se de fornecer um caminho absoluto para o diretório de imagens. Caso contrário, as imagens podem não aparecer na página da web devido às limitações de serviço de arquivos do Flask.

from ultralytics import solutions

searcher = solutions.VisualAISearch(
    # data = "path/to/img/directory" # Optional, build search engine with your own images
    device="cuda"  # configure the device for processing i.e "cpu" or "cuda"
)

results = searcher("a dog sitting on a bench")

# Ranked Results:
#     - 000000546829.jpg | Similarity: 0.3269
#     - 000000549220.jpg | Similarity: 0.2899
#     - 000000517069.jpg | Similarity: 0.2761
#     - 000000029393.jpg | Similarity: 0.2742
#     - 000000534270.jpg | Similarity: 0.2680

VisualAISearch Parâmetros

A tabela abaixo descreve os parâmetros disponíveis para VisualAISearch:

Argumento Tipo Padrão Descrição
data str 'images' Caminho para o diretório de imagens utilizado para a pesquisa de similaridade.
Argumento Tipo Padrão Descrição
device str None Especifica o dispositivo para inferência (por exemplo, cpu, cuda:0 ou 0). Permite que os usuários selecionem entre CPU, uma GPU específica ou outros dispositivos de computação para a execução do modelo.

Vantagens da Pesquisa Semântica de Imagens com CLIP e FAISS

Construir seu próprio sistema de pesquisa semântica de imagens com CLIP e FAISS oferece diversas vantagens atraentes:

  1. Capacidades Zero-Shot: Você não precisa treinar o modelo em seu conjunto de dados específico. O aprendizado zero-shot do CLIP permite que você execute consultas de pesquisa em qualquer conjunto de dados de imagem usando linguagem natural de forma livre, economizando tempo e recursos.

  2. Compreensão Semelhante à Humana: Ao contrário dos mecanismos de pesquisa baseados em palavras-chave, o CLIP entende o contexto semântico. Ele pode recuperar imagens com base em consultas abstratas, emocionais ou relacionais, como "uma criança feliz na natureza" ou "um horizonte de cidade futurista à noite".

    Fluxo de trabalho de recuperação de imagem OpenAI Clip

  3. Sem Necessidade de Rótulos ou Metadados: Os sistemas tradicionais de busca de imagens exigem dados cuidadosamente rotulados. Essa abordagem precisa apenas de imagens brutas. O CLIP gera embeddings sem necessidade de qualquer anotação manual.

  4. Pesquisa Flexível e Escalável: O FAISS permite uma pesquisa rápida de vizinhos mais próximos, mesmo com conjuntos de dados de grande escala. É otimizado para velocidade e memória, permitindo resposta em tempo real, mesmo com milhares (ou milhões) de incorporações.

    Fluxo de trabalho de construção de vetores de embedding Meta FAISS

  5. Aplicações Interdomínio: Quer esteja a construir um arquivo pessoal de fotos, uma ferramenta de inspiração criativa, um motor de busca de produtos ou até mesmo um sistema de recomendação de arte, esta stack adapta-se a diversos domínios com ajustes mínimos.

FAQ

Como o CLIP entende imagens e texto?

CLIP (Contrastive Language Image Pretraining) é um modelo desenvolvido pela OpenAI que aprende a conectar informações visuais e linguísticas. Ele é treinado num conjunto de dados massivo de imagens emparelhadas com legendas em linguagem natural. Este treino permite mapear tanto imagens quanto texto num espaço de embedding compartilhado, para que possa compará-los diretamente usando a similaridade vetorial.

Por que o CLIP é considerado tão poderoso para tarefas de IA?

O que destaca o CLIP é a sua capacidade de generalização. Em vez de ser treinado apenas para rótulos ou tarefas específicas, ele aprende com a própria linguagem natural. Isso permite que ele lide com consultas flexíveis como “um homem andando de jet ski” ou “uma paisagem onírica surreal”, tornando-o útil para tudo, desde classificação até pesquisa semântica criativa, sem necessidade de retreino.

FAISS (Facebook AI Similarity Search) é um conjunto de ferramentas que ajuda você a pesquisar vetores de alta dimensão de forma muito eficiente. Depois que o CLIP transforma suas imagens em embeddings, o FAISS torna rápido e fácil encontrar as correspondências mais próximas de uma consulta de texto, perfeito para recuperação de imagens em tempo real.

Por que usar o pacote Python Ultralytics se CLIP e FAISS são da OpenAI e Meta?

Embora CLIP e FAISS sejam desenvolvidos pela OpenAI e Meta, respectivamente, o pacote Ultralytics Python package simplifica a sua integração num pipeline completo de pesquisa semântica de imagens num fluxo de trabalho de 2 linhas que simplesmente funciona:

Pesquisa de Imagens Semelhantes

from ultralytics import solutions

searcher = solutions.VisualAISearch(
    # data = "path/to/img/directory" # Optional, build search engine with your own images
    device="cuda"  # configure the device for processing i.e "cpu" or "cuda"
)

results = searcher("a dog sitting on a bench")

# Ranked Results:
#     - 000000546829.jpg | Similarity: 0.3269
#     - 000000549220.jpg | Similarity: 0.2899
#     - 000000517069.jpg | Similarity: 0.2761
#     - 000000029393.jpg | Similarity: 0.2742
#     - 000000534270.jpg | Similarity: 0.2680

Esta implementação de alto nível lida com:

  • Geração de embeddings de imagem e texto baseada em CLIP.
  • Criação e gerenciamento de índice FAISS.
  • Pesquisa semântica eficiente com similaridade de cossenos.
  • Carregamento de imagem baseado em diretório e visualização.

Posso personalizar o frontend deste aplicativo?

Sim, você pode absolutamente. A configuração atual usa Flask com um frontend HTML básico, mas você é livre para trocar pelo seu próprio HTML ou até mesmo construir algo mais dinâmico com React, Vue ou outro framework de frontend. O Flask pode facilmente servir como a API de backend para sua interface personalizada.

É possível pesquisar em vídeos em vez de imagens estáticas?

Não diretamente, mas existe uma solução simples. Você pode extrair quadros individuais de seus vídeos (por exemplo, um a cada segundo), tratá-los como imagens independentes e alimentá-los no sistema. Desta forma, o mecanismo de busca pode indexar semanticamente momentos visuais de seus vídeos.



📅 Criado há 2 meses ✏️ Atualizado há 23 dias

Comentários