Saltar para o conteúdo

Pesquisa semântica de imagens com OpenAI CLIP e Meta FAISS

Introdução

Este guia orienta-o na construção de um motor de pesquisa de imagens semânticas utilizando o OpenAI CLIP, o Meta FAISS e o Flask. Combinando os poderosos embeddings de linguagem visual do CLIP com a pesquisa eficiente do vizinho mais próximo do FAISS, pode criar uma interface Web totalmente funcional onde pode obter imagens relevantes utilizando consultas em linguagem natural.

Pesquisa semântica de imagens Pré-visualização visual

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

Como funciona

  • O CLIP utiliza um codificador de visão (por exemplo, ResNet ou ViT) para imagens e um codificador de texto (baseado no Transformer) para a linguagem, para projetar ambos no mesmo espaço de incorporação multimodal. Isto permite a comparação direta entre texto e imagens utilizando a semelhança de cosseno.
  • O FAISS (Facebook AI Similarity Search) constrói um índice das imagens incorporadas e permite a recuperação rápida e escalável dos vectores mais próximos de uma determinada consulta.
  • O Flask fornece uma interface Web simples para submeter consultas em linguagem natural e apresentar imagens semanticamente correspondentes a partir do índice.

Esta arquitetura suporta a pesquisa zero-shot, o que significa que não precisa de etiquetas ou categorias, apenas de dados de imagem e de um bom prompt.

Pesquisa semântica de imagens utilizando o pacote Ultralytics Python

Aviso de caminho de imagem

Se estiver a usar as suas próprias imagens, certifique-se de que fornece um caminho absoluto para o diretório da imagem. Caso contrário, as imagens podem não aparecer na página web devido às limitações do Flask para servir ficheiros.

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 efectua todas as operações de backend:

  • Carrega ou constrói um índice FAISS a partir de imagens locais.
  • Extrai imagens e texto incorporados utilizando CLIP.
  • Efectua uma pesquisa de semelhança utilizando a semelhança de cosseno.

Pesquisa de imagens semelhantes

Aviso de caminho de imagem

Se estiver a usar as suas próprias imagens, certifique-se de que fornece um caminho absoluto para o diretório da imagem. Caso contrário, as imagens podem não aparecer na página web devido às limitações do Flask para servir ficheiros.

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

O quadro seguinte apresenta os parâmetros disponíveis para VisualAISearch:

Argumento Tipo Predefinição Descrição
data str images Caminho para o diretório de imagens utilizado para a pesquisa de semelhanças.
Argumento Tipo Predefinição Descrição
device str None Especifica o dispositivo para inferência (por exemplo, cpu, cuda:0 ou 0). Permite aos utilizadores selecionar entre CPU, um GPU específico, ou outros dispositivos de computação para a execução do modelo.

Vantagens da pesquisa semântica de imagens com CLIP e FAISS

Construir o seu próprio sistema de pesquisa de imagens semânticas com o CLIP e o FAISS oferece várias vantagens atraentes:

  1. Capacidades Zero-Shot: Não precisa de treinar o modelo no seu conjunto de dados específico. A aprendizagem zero-shot do CLIP permite-lhe efetuar consultas de pesquisa em qualquer conjunto de dados de imagens utilizando linguagem natural de forma livre, poupando tempo e recursos.

  2. Compreensão semelhante à humana: Ao contrário dos motores de busca baseados em palavras-chave, o CLIP compreende o contexto semântico. Pode recuperar imagens com base em consultas abstractas, emocionais ou relacionais, como "uma criança feliz na natureza" ou "um horizonte urbano futurista à noite".

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

  3. Sem necessidade de etiquetas ou metadados: Os sistemas tradicionais de pesquisa de imagens requerem dados cuidadosamente etiquetados. Esta abordagem apenas necessita de imagens em bruto. O CLIP gera incrustações sem necessitar de qualquer anotação manual.

  4. Pesquisa flexível e escalável: O FAISS permite uma pesquisa rápida do vizinho mais próximo, mesmo com conjuntos de dados de grande escala. É optimizado para velocidade e memória, permitindo uma resposta em tempo real mesmo com milhares (ou milhões) de embeddings.

    Fluxo de trabalho de construção de vectores de incorporação Meta FAISS

  5. Aplicações em vários domínios: Quer esteja a criar um arquivo de fotografias pessoais, uma ferramenta de inspiração criativa, um motor de pesquisa de produtos ou mesmo um sistema de recomendação de arte, esta pilha adapta-se a diversos domínios com o mínimo de ajustes.

FAQ

Como é que o CLIP compreende as imagens e o texto?

O CLIP (Contrastive Language Image Pretraining) é um modelo desenvolvido pela OpenAI que aprende a ligar informações visuais e linguísticas. É treinado num enorme conjunto de dados de imagens emparelhadas com legendas em linguagem natural. Esta formação permite-lhe mapear imagens e texto num espaço de incorporação partilhado, para que possa compará-los diretamente utilizando a semelhança de vectores.

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

O que faz com que o CLIP se destaque é a sua capacidade de generalização. Em vez de ser treinado apenas para etiquetas ou tarefas específicas, aprende com a própria linguagem natural. Isto permite-lhe lidar com consultas flexíveis como "um homem a andar de jet ski" ou "uma paisagem surrealista", tornando-o útil para tudo, desde a classificação à pesquisa semântica criativa, sem necessidade de reciclagem.

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

Porquê utilizar o Ultralytics Python se o CLIP e o FAISS são do OpenAI e do Meta?

Embora o CLIP e o FAISS sejam desenvolvidos pela OpenAI e pela Meta, respetivamente, o pacoteUltralytics Python simplifica a sua integração num pipeline completo de pesquisa semântica de imagens num fluxo de trabalho de duas 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 trata:

  • Geração de incorporação de imagem e texto com base em CLIP.
  • Criação e gestão do índice FAISS.
  • Pesquisa semântica eficiente com similaridade de cosseno.
  • Carregamento e visualização de imagens com base em diretórios.

Posso personalizar o frontend desta aplicação?

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

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

Não diretamente - mas há uma solução simples. Pode extrair fotogramas individuais dos seus vídeos (por exemplo, um a cada segundo), tratá-los como imagens autónomas e introduzi-los no sistema. Desta forma, o motor de busca pode indexar semanticamente os momentos visuais dos seus vídeos.



📅 Criado há 25 dias ✏️ Atualizado há 23 dias

Comentários