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
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:
-
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.
-
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".
-
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.
-
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.
-
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 que faz exatamente a FAISS neste projeto (Pesquisa Semântica)?
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.