Ultralytics Explorer API#
A partir da versão ultralytics>=8.3.12, o Ultralytics Explorer foi removido. Para usar o Explorer, instale com pip install ultralytics==8.3.11. Funcionalidades semelhantes (e expandidas) de exploração de datasets estão disponíveis na Ultralytics Platform.
Introdução#
A Explorer API é uma API Python para explorar os teus conjuntos de dados. Ela suporta filtragem e pesquisa no teu conjunto de dados usando consultas SQL, pesquisa de semelhança vetorial e pesquisa semântica.
Watch: Ultralytics Explorer API Overview
Instalação#
O Explorer depende de bibliotecas externas para algumas de suas funcionalidades. Elas são instaladas automaticamente quando usas o Explorer. Para instalar estas dependências manualmente, usa o seguinte comando:
pip install ultralytics[explorer]Uso#
from ultralytics import Explorer
# Create an Explorer object
explorer = Explorer(data="coco128.yaml", model="yolo11n.pt")
# Create embeddings for your dataset
explorer.create_embeddings_table()
# Search for similar images to a given image/images
df = explorer.get_similar(img="path/to/image.jpg")
# Or search for similar images to a given index/indices
df = explorer.get_similar(idx=0)A tabela Embeddings para um determinado par de conjunto de dados e modelo é criada apenas uma vez e reutilizada. Estas utilizam LanceDB internamente, que é escalável em disco, para que possas criar e reutilizar embeddings para conjuntos de dados grandes como COCO sem esgotar a memória.
Caso queiras forçar a atualização da tabela de embeddings, podes passar force=True para o método create_embeddings_table.
Podes aceder diretamente ao objeto da tabela LanceDB para realizar análises avançadas. Sabe mais sobre isso na secção Trabalhar com a Tabela de Embeddings
1. Pesquisa de Semelhança#
A pesquisa de semelhança é uma técnica para encontrar imagens semelhantes a uma dada imagem. Baseia-se na ideia de que imagens semelhantes terão embeddings semelhantes. Assim que a tabela de embeddings for criada, podes executar a pesquisa semântica de qualquer uma das seguintes formas:
- Num determinado índice ou lista de índices no conjunto de dados:
exp.get_similar(idx=[1,10], limit=10) - Em qualquer imagem ou lista de imagens que não esteja no conjunto de dados:
exp.get_similar(img=["path/to/img1", "path/to/img2"], limit=10)
No caso de múltiplas entradas, é utilizado o agregado dos seus embeddings.
Recebes um DataFrame pandas com o número limit de pontos de dados mais semelhantes à entrada, juntamente com a respetiva distância no espaço de embeddings. Podes utilizar este conjunto de dados para efetuar filtragens adicionais.
from ultralytics import Explorer
# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolo11n.pt")
exp.create_embeddings_table()
similar = exp.get_similar(img="https://ultralytics.com/images/bus.jpg", limit=10)
print(similar.head())
# Search using multiple indices
similar = exp.get_similar(
img=["https://ultralytics.com/images/bus.jpg", "https://ultralytics.com/images/bus.jpg"],
limit=10,
)
print(similar.head())A Esboçar Imagens Semelhantes#
Também podes esboçar as imagens semelhantes utilizando o método plot_similar. Este método aceita os mesmos argumentos que get_similar e esboça as imagens semelhantes numa grelha.
from ultralytics import Explorer
# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolo11n.pt")
exp.create_embeddings_table()
plt = exp.plot_similar(img="https://ultralytics.com/images/bus.jpg", limit=10)
plt.show()2. Perguntar à IA (Consultas em Linguagem Natural)#
Esta funcionalidade permite-te filtrar o teu conjunto de dados utilizando linguagem natural, sem escrever SQL. O gerador de consultas alimentado por IA converte a tua instrução numa consulta e devolve resultados correspondentes. Por exemplo, podes perguntar: "mostra-me 100 imagens com exatamente uma pessoa e 2 cães. Também pode haver outros objetos" e ele irá gerar a consulta e mostrar-te esses resultados. Nota: Esta funcionalidade utiliza LLMs, pelo que os resultados são probabilísticos e podem ser imprecisos.
from ultralytics.data.explorer import plot_query_result
from ultralytics import Explorer
# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolo11n.pt")
exp.create_embeddings_table()
df = exp.ask_ai("show me 100 images with exactly one person and 2 dogs. There can be other objects too")
print(df.head())
# plot the results
plt = plot_query_result(df)
plt.show()3. Consultas SQL#
Podes executar consultas SQL no teu conjunto de dados utilizando o método sql_query. Este método aceita uma consulta SQL como entrada e devolve um DataFrame pandas com os resultados.
from ultralytics import Explorer
# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolo11n.pt")
exp.create_embeddings_table()
df = exp.sql_query("WHERE labels LIKE '%person%' AND labels LIKE '%dog%'")
print(df.head())A Esboçar Resultados de Consultas SQL#
Também podes esboçar os resultados de uma consulta SQL utilizando o método plot_sql_query. Este método aceita os mesmos argumentos que sql_query e esboça os resultados numa grelha.
from ultralytics import Explorer
# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolo11n.pt")
exp.create_embeddings_table()
# plot the SQL Query
exp.plot_sql_query("WHERE labels LIKE '%person%' AND labels LIKE '%dog%' LIMIT 10")4. Trabalhar com a Tabela de Embeddings#
Também podes trabalhar diretamente com a tabela de embeddings. Assim que a tabela de embeddings for criada, podes aceder-lhe utilizando Explorer.table
O Explorer funciona internamente em tabelas LanceDB. Podes aceder a esta tabela diretamente, utilizando o objeto Explorer.table, e executar consultas em bruto, aplicar filtros pré e pós-processamento, etc.
from ultralytics import Explorer
exp = Explorer()
exp.create_embeddings_table()
table = exp.tableAqui tens alguns exemplos do que podes fazer com a tabela:
Obter Embeddings em Bruto#
from ultralytics import Explorer
exp = Explorer()
exp.create_embeddings_table()
table = exp.table
embeddings = table.to_pandas()["vector"]
print(embeddings)Consultas Avançadas com filtros pré e pós-processamento#
from ultralytics import Explorer
exp = Explorer(model="yolo11n.pt")
exp.create_embeddings_table()
table = exp.table
# Dummy embedding
embedding = [i for i in range(256)]
rs = table.search(embedding).metric("cosine").where("").limit(10)Criar Índice Vetorial#
Ao utilizar conjuntos de dados grandes, também podes criar um índice vetorial dedicado para consultas mais rápidas. Isto é feito utilizando o método create_index na tabela LanceDB.
table.create_index(num_partitions=..., num_sub_vectors=...)5. Aplicações de Embeddings#
Podes utilizar a tabela de embeddings para realizar uma variedade de análises exploratórias. Aqui tens alguns exemplos:
Índice de Semelhança#
O Explorer inclui uma operação similarity_index:
- Tenta estimar quão semelhante cada ponto de dados é em relação ao resto do conjunto de dados.
- Faz isto contando quantos embeddings de imagem estão mais próximos do que
max_distda imagem atual no espaço de embeddings gerado, considerando imagens semelhantestop_kde cada vez.
Devolve um DataFrame pandas com as seguintes colunas:
idx: Índice da imagem no conjunto de dadosim_file: Caminho para o ficheiro de imagemcount: Número de imagens no conjunto de dados que estão mais próximas do quemax_distda imagem atualsim_im_files: Lista de caminhos para as imagens semelhantescount
Para um determinado conjunto de dados, modelo, max_dist e top_k, o índice de semelhança, uma vez gerado, será reutilizado. Caso o teu conjunto de dados tenha mudado, ou simplesmente precises de regenerar o índice de semelhança, podes passar force=True.
from ultralytics import Explorer
exp = Explorer()
exp.create_embeddings_table()
sim_idx = exp.similarity_index()Podes utilizar o índice de semelhança para criar condições personalizadas para filtrar o conjunto de dados. Por exemplo, podes filtrar imagens que não são semelhantes a nenhuma outra imagem no conjunto de dados utilizando o seguinte código:
import numpy as np
sim_count = np.array(sim_idx["count"])
sim_idx["im_file"][sim_count > 30]Visualizar o Espaço de Embeddings#
Também podes visualizar o espaço de embeddings utilizando a ferramenta de plotagem da tua escolha. Por exemplo, aqui tens um exemplo simples utilizando Matplotlib:
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
# 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 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()Começa a criar os teus próprios relatórios de exploração de conjuntos de dados de CV utilizando a Explorer API. Para obteres inspiração, consulta o Exemplo de Exploração VOC.
Aplicações Criadas com o Ultralytics Explorer#
Experimenta a nossa Demonstração de GUI baseada na Explorer API
FAQ#
Para que serve a Ultralytics Explorer API?#
A Ultralytics Explorer API foi concebida para uma exploração abrangente de conjuntos de dados. Permite aos utilizadores filtrar e pesquisar conjuntos de dados utilizando consultas SQL, pesquisa de semelhança vetorial e pesquisa semântica. Esta poderosa API Python consegue lidar com grandes conjuntos de dados, tornando-a ideal para várias tarefas de visão computacional utilizando modelos Ultralytics.
Como instalo a Ultralytics Explorer API?#
Para instalar a Ultralytics Explorer API juntamente com as suas dependências, utiliza o seguinte comando:
pip install ultralytics[explorer]Isto instalará automaticamente todas as bibliotecas externas necessárias para a funcionalidade da Explorer API. Para obter detalhes de configuração adicionais, consulta a secção de instalação da nossa documentação.
Como posso utilizar a Ultralytics Explorer API para pesquisa de semelhança?#
Podes utilizar a Ultralytics Explorer API para realizar pesquisas de semelhança criando uma tabela de embeddings e consultando-a para encontrar imagens semelhantes. Eis um exemplo básico:
from ultralytics import Explorer
# Create an Explorer object
explorer = Explorer(data="coco128.yaml", model="yolo11n.pt")
explorer.create_embeddings_table()
# Search for similar images to a given image
similar_images_df = explorer.get_similar(img="path/to/image.jpg")
print(similar_images_df.head())Para mais detalhes, visita a secção Pesquisa de Semelhança.
Quais são os benefícios de utilizar o LanceDB com o Ultralytics Explorer?#
O LanceDB, utilizado internamente pelo Ultralytics Explorer, fornece tabelas de embeddings escaláveis em disco. Isto garante que podes criar e reutilizar embeddings para conjuntos de dados grandes como COCO sem esgotar a memória. Estas tabelas são criadas apenas uma vez e podem ser reutilizadas, aumentando a eficiência no manuseamento de dados.
Como funciona a funcionalidade Perguntar à IA na Ultralytics Explorer API?#
A funcionalidade Perguntar à IA permite aos utilizadores filtrar conjuntos de dados utilizando consultas em linguagem natural. Esta funcionalidade aproveita LLMs para converter estas consultas em consultas SQL nos bastidores. Eis um exemplo:
from ultralytics import Explorer
# Create an Explorer object
explorer = Explorer(data="coco128.yaml", model="yolo11n.pt")
explorer.create_embeddings_table()
# Query with natural language
query_result = explorer.ask_ai("show me 100 images with exactly one person and 2 dogs. There can be other objects too")
print(query_result.head())Para mais exemplos, consulta a secção Perguntar à IA.