Exemplo de Exploração de VOC
中文 | 한국어 | 日本語 | Русский | Deutsch | Français | Español | Português | Türkçe | Tiếng Việt | العربية
Bem-vindo ao notebook da API do Ultralytics Explorer. Este notebook apresenta os recursos disponíveis para explorar datasets com pesquisa semântica, pesquisa vetorial e consultas SQL.
Experimente yolo explorer (potencializado pela API do Explorer)
Instale o ultralytics e execute yolo explorer no seu terminal para realizar consultas personalizadas e pesquisa semântica no seu navegador.
A partir da versão ultralytics>=8.3.12, o Ultralytics Explorer foi removido. Para utilizar o Explorer, instale pip install ultralytics==8.3.11. Funcionalidades de exploração de datasets semelhantes (e expandidas) estão disponíveis na Ultralytics Platform.
Configuração
Instale o ultralytics e as dependências necessárias, então verifique o software e o hardware.
!uv pip install ultralytics[explorer] openai
yolo checksPesquisa de Similaridade
Utilize o poder da pesquisa de similaridade vetorial para encontrar pontos de dados semelhantes no seu dataset, juntamente com a distância deles no espaço de embedding. Basta criar uma tabela de embeddings para o par dataset-modelo fornecido. Isso só é necessário uma vez e é reutilizado automaticamente.
exp = Explorer("VOC.yaml", model="yolo26n.pt")
exp.create_embeddings_table()Assim que a tabela de embeddings for criada, você pode executar a pesquisa semântica de qualquer uma das seguintes maneiras:
- Em um determinado índice/lista de índices no dataset, por exemplo,
exp.get_similar(idx=[1, 10], limit=10) - Em qualquer imagem/lista de imagens que não esteja no dataset - exp.get_similar(img=["path/to/img1", "path/to/img2"], limit=10). No caso de entradas múltiplas, o agregado de seus embeddings é utilizado.
Você obtém um DataFrame do pandas com o número limite de pontos de dados mais semelhantes à entrada, juntamente com a distância deles no espaço de embedding. Você pode usar esse dataset para realizar filtragens adicionais.

# Search dataset by index
similar = exp.get_similar(idx=1, limit=10)
similar.head()Você também pode plotar as amostras semelhantes diretamente usando o utilitário plot_similar

exp.plot_similar(idx=6500, limit=20)
exp.plot_similar(idx=[100, 101], limit=10) # Can also pass list of idxs or imgs
exp.plot_similar(img="https://ultralytics.com/images/bus.jpg", limit=10, labels=False) # Can also pass external images
Pergunte à IA: Pesquise ou Filtre com Linguagem Natural
Você pode fornecer prompts ao objeto Explorer com o tipo de pontos de dados que deseja ver, e ele tentará retornar um DataFrame com esses resultados. Como ele é potencializado por LLMs, nem sempre ele acerta. Nesse caso, ele retornará None.

df = exp.ask_ai("show me images containing more than 10 objects with at least 2 persons")
df.head(5)Para plotar esses resultados, você pode usar o utilitário plot_query_result. Exemplo:
plt = plot_query_result(exp.ask_ai("show me 10 images containing exactly 2 persons"))
Image.fromarray(plt)
# plot
from PIL import Image
from ultralytics.data.explorer import plot_query_result
plt = plot_query_result(exp.ask_ai("show me 10 images containing exactly 2 persons"))
Image.fromarray(plt)Execute Consultas SQL no Seu Dataset
Às vezes, você pode querer investigar certas entradas no seu dataset. Para isso, o Explorer permite que você execute consultas SQL. Ele aceita qualquer um dos seguintes formatos:
- Consultas que começam com "WHERE" selecionarão automaticamente todas as colunas. Isso pode ser pensado como uma consulta abreviada.
- Você também pode escrever consultas completas onde pode especificar quais colunas selecionar.
Isso pode ser usado para investigar o desempenho do modelo e pontos de dados específicos. Por exemplo:
- digamos que seu modelo tenha dificuldade em imagens que contêm humanos e cachorros. Você pode escrever uma consulta como esta para selecionar os pontos que possuem pelo menos 2 humanos E pelo menos um cachorro.
Você pode combinar consultas SQL e pesquisa semântica para filtrar até um tipo específico de resultado
table = exp.sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10")
exp.plot_sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10", labels=True)
table = exp.sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10")
print(table)Assim como na pesquisa de similaridade, você também obtém um utilitário para plotar diretamente as consultas SQL usando exp.plot_sql_query

exp.plot_sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10", labels=True)Trabalhando com a tabela de Embeddings (Avançado)
O Explorer funciona internamente com tabelas LanceDB. Podes aceder a esta tabela diretamente, usando o objeto Explorer.table e executar consultas em bruto, aplicar pré e pós-filtros, etc.
table = exp.table
print(table.schema)Executar consultas brutas
A Pesquisa Vetorial encontra os vetores mais próximos do banco de dados. Em um sistema de recomendação ou mecanismo de busca, você pode encontrar produtos semelhantes ao que pesquisou. Em LLMs e outras aplicações de IA, cada ponto de dados pode ser apresentado pelos embeddings gerados por alguns modelos, retornando as características mais relevantes.
Uma pesquisa em espaço vetorial de alta dimensão consiste em encontrar K-vizinhos mais próximos (KNN) do vetor de consulta.
Métrica: No LanceDB, uma Métrica é a maneira de descrever a distância entre um par de vetores. Atualmente, ele suporta as seguintes métricas:
- L2
- Cosseno
- A pesquisa de similaridade do Dot Explorer usa L2 por padrão. Você pode executar consultas diretamente em tabelas ou usar o formato lance para criar utilitários personalizados para gerenciar datasets. Mais detalhes sobre operações de tabela LanceDB disponíveis na documentação

dummy_img_embedding = [i for i in range(256)]
table.search(dummy_img_embedding).limit(5).to_pandas()Interconversão para formatos de dados populares
df = table.to_pandas()
pa_table = table.to_arrow()Trabalhar com Embeddings
Você pode acessar o embedding bruto da Tabela lancedb e analisá-lo. Os embeddings de imagem são armazenados na coluna vector
import numpy as np
embeddings = table.to_pandas()["vector"].tolist()
embeddings = np.array(embeddings)Gráfico de dispersão
Um dos passos preliminares na análise de embeddings é plotá-los em espaço 2D através de redução de dimensionalidade. Vamos tentar um exemplo

import matplotlib.pyplot as plt
from sklearn.decomposition import PCA # pip install scikit-learn
# Reduce dimensions using PCA to 3 components for visualization in 3D
pca = PCA(n_components=3)
reduced_data = pca.fit_transform(embeddings)
# Create a 3D scatter plot using Matplotlib's Axes3D
fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111, projection="3d")
# Scatter plot
ax.scatter(reduced_data[:, 0], reduced_data[:, 1], reduced_data[:, 2], alpha=0.5)
ax.set_title("3D Scatter Plot of Reduced 256-Dimensional Data (PCA)")
ax.set_xlabel("Component 1")
ax.set_ylabel("Component 2")
ax.set_zlabel("Component 3")
plt.show()Índice de Similaridade
Aqui está um exemplo simples de uma operação potencializada pela tabela de embeddings. O Explorer vem com uma operação similarity_index-
- Ele tenta estimar quão semelhante cada ponto de dados é em relação ao resto do dataset.
- Ele faz isso contando quantos embeddings de imagem estão mais próximos do que max_dist da imagem atual no espaço de embedding gerado, considerando top_k imagens semelhantes de cada vez.
Para um determinado dataset, modelo, max_dist e top_k, o índice de similaridade, uma vez gerado, será reutilizado. Caso seu dataset tenha mudado, ou você simplesmente precise regenerar o índice de similaridade, você pode passar force=True. Semelhante à pesquisa vetorial e SQL, isso também vem com um utilitário para plotá-lo diretamente.
sim_idx = exp.similarity_index(max_dist=0.2, top_k=0.01)
exp.plot_similarity_index(max_dist=0.2, top_k=0.01)
Vamos olhar o gráfico primeiro
exp.plot_similarity_index(max_dist=0.2, top_k=0.01)Agora vamos ver a saída da operação
sim_idx = exp.similarity_index(max_dist=0.2, top_k=0.01, force=False)
sim_idxVamos criar uma consulta para ver quais pontos de dados possuem contagem de similaridade maior que 30 e plotar imagens semelhantes a eles.
import numpy as np
sim_count = np.array(sim_idx["count"])
sim_idx["im_file"][sim_count > 30]Você deve ver algo assim

exp.plot_similar(idx=[7146, 14035]) # Using avg embeddings of 2 images