Ultralytics API do explorador
Nota da Comunidade ⚠️
A partir de ultralytics>=8.3.10
, o suporte do Ultralytics explorer foi descontinuado. Mas não se preocupe! Pode agora aceder a funcionalidades semelhantes e até melhoradas através do Ultralytics HUBA nossa plataforma intuitiva sem código foi concebida para otimizar o seu fluxo de trabalho. Com o Ultralytics HUB, pode continuar a explorar, visualizar e gerir os seus dados sem esforço, tudo sem escrever uma única linha de código. Não deixe de conferir e tirar proveito de seus poderosos recursos!
Introdução
A API Explorer é uma API Python para explorar os seus conjuntos de dados. Suporta a filtragem e a pesquisa do seu conjunto de dados utilizando consultas SQL, pesquisa de semelhanças vectoriais e pesquisa semântica.
Ver: Ultralytics Visão geral da API do Explorer
Instalação
O Explorer depende de bibliotecas externas para algumas das suas funcionalidades. Estas são instaladas automaticamente aquando da sua utilização. Para instalar manualmente estas dependências, utilize o seguinte comando:
pip install ultralytics[explorer]
Utilização
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
dataframe = explorer.get_similar(img="path/to/image.jpg")
# Or search for similar images to a given index/indices
dataframe = explorer.get_similar(idx=0)
Nota
A tabela de embeddings para um determinado conjunto de dados e par de modelos é criada apenas uma vez e reutilizada. Estes utilizam o LanceDB, que é dimensionado no disco, para que possa criar e reutilizar embeddings para grandes conjuntos de dados como o COCO sem ficar sem memória.
No caso de querer forçar a atualização da tabela de inserções, pode passar force=True
para create_embeddings_table
método.
É possível aceder diretamente ao objeto de tabela LanceDB para efetuar análises avançadas. Saiba mais sobre isso na secção Trabalhar com tabelas Embeddings
1. Pesquisa de semelhanças
A pesquisa por semelhança é uma técnica para encontrar imagens semelhantes a uma determinada imagem. Baseia-se na ideia de que as imagens semelhantes terão ligações semelhantes. Uma vez construída a tabela de embeddings, pode executar a pesquisa semântica de qualquer uma das seguintes formas:
- Num determinado índice ou lista de índices do conjunto de dados:
exp.get_similar(idx=[1,10], limit=10)
- Em qualquer imagem ou lista de imagens que não estejam 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.
Obtém-se um dataframe pandas com o limit
número de pontos de dados mais semelhantes à entrada, juntamente com a sua distância no espaço de incorporação. Pode utilizar este conjunto de dados para efetuar mais filtragem
Pesquisa semântica
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())
from ultralytics import Explorer
# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolo11n.pt")
exp.create_embeddings_table()
similar = exp.get_similar(idx=1, limit=10)
print(similar.head())
# Search using multiple indices
similar = exp.get_similar(idx=[1, 10], limit=10)
print(similar.head())
Traçar imagens semelhantes
Também pode desenhar as imagens semelhantes utilizando a função plot_similar
método. Este método recebe os mesmos argumentos que get_similar
e plota as imagens semelhantes numa grelha.
Traçar imagens semelhantes
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()
from ultralytics import Explorer
# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolo11n.pt")
exp.create_embeddings_table()
plt = exp.plot_similar(idx=1, limit=10)
plt.show()
2. Ask AI (consulta de linguagem natural)
Isto permite-lhe escrever como pretende filtrar o seu conjunto de dados utilizando linguagem natural. Não precisa de saber escrever consultas SQL. O nosso gerador de consultas com IA fá-lo-á automaticamente. Por exemplo, pode dizer - "mostre-me 100 imagens com exatamente uma pessoa e 2 cães. Pode haver outros objectos também" e ele irá gerar internamente a consulta e mostrar-lhe esses resultados. Nota: Isto funciona utilizando LLMs, pelo que os resultados são probabilísticos e podem, por vezes, errar
Perguntar à IA
from ultralytics import Explorer
from ultralytics.data.explorer import plot_query_result
# 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. Consulta SQL
Pode executar consultas SQL no seu conjunto de dados utilizando a função sql_query
método. Este método recebe uma consulta SQL como entrada e devolve um quadro de dados pandas com os resultados.
Consulta SQL
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())
Representação gráfica de resultados de consultas SQL
Também é possível desenhar os resultados de uma consulta SQL utilizando a função plot_sql_query
método. Este método recebe os mesmos argumentos que sql_query
e apresenta os resultados numa grelha.
Representação gráfica de resultados de consultas SQL
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 é possível trabalhar diretamente com a tabela de objectos incorporados. Uma vez criada a tabela de embeddings, pode aceder-lhe utilizando a função Explorer.table
Dica
O Explorer funciona em LanceDB internamente. É possível aceder a esta tabela diretamente, utilizando Explorer.table
e executar consultas não processadas, enviar pré e pós-filtros, etc.
from ultralytics import Explorer
exp = Explorer()
exp.create_embeddings_table()
table = exp.table
Eis alguns exemplos do que pode fazer com a tabela:
Obter Embeddings em bruto
Exemplo
from ultralytics import Explorer
exp = Explorer()
exp.create_embeddings_table()
table = exp.table
embeddings = table.to_pandas()["vector"]
print(embeddings)
Consulta avançada com pré e pós-filtros
Exemplo
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 grandes conjuntos de dados, pode também criar um índice vetorial dedicado para uma consulta mais rápida. Isso é feito usando o create_index
na tabela LanceDB.
table.create_index(num_partitions=..., num_sub_vectors=...)
Para obter mais detalhes sobre os tipos de índices vetoriais disponíveis e os parâmetros de configuração, consulte a documentação de indexação do LanceDB. No futuro, planejamos oferecer suporte à criação de índices vetoriais diretamente por meio da API Explorer.
5. Aplicações de embeddings
Pode utilizar a tabela de embeddings para efetuar uma variedade de análises exploratórias. Aqui estão alguns exemplos:
Índice de similaridade
O Explorer é fornecido com um similarity_index
operação:
- Tenta estimar a semelhança entre cada ponto de dados e o resto do conjunto de dados.
- Fá-lo contando quantas incorporações de imagens estão mais próximas do que
max_dist
para a imagem atual no espaço de incorporação gerado, considerandotop_k
imagens semelhantes de cada vez.
Devolve um quadro de dados 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_dist
para a imagem atualsim_im_files
: Lista de caminhos para ocount
imagens semelhantes
Dica
Para um determinado conjunto de dados, modelo, max_dist
& top_k
o índice de similaridade, uma vez gerado, será reutilizado. No caso de o conjunto de dados ter mudado, ou se simplesmente precisar de gerar novamente o índice de similaridade, pode passar force=True
.
Índice de similaridade
from ultralytics import Explorer
exp = Explorer()
exp.create_embeddings_table()
sim_idx = exp.similarity_index()
Pode utilizar o índice de semelhança para criar condições personalizadas para filtrar o conjunto de dados. Por exemplo, pode filtrar imagens que não são semelhantes a qualquer 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 incorporação
Também pode visualizar o espaço de incorporação utilizando a ferramenta de plotagem da sua escolha. Por exemplo, aqui está 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()
Comece a criar os seus próprios relatórios de exploração de conjuntos de dados CV utilizando a API Explorer. Para se inspirar, consulte o Exemplo de exploração de COV.
Aplicações criadas com o Ultralytics Explorer
Experimente a nossa demonstração GUI baseada na API Explorer
Em breve
- [ ] Fundir etiquetas específicas de conjuntos de dados. Exemplo - Importar tudo
person
rótulos da COCO ecar
etiquetas de Cityscapes - [Remover as imagens que têm um índice de semelhança superior ao limiar indicado
- [Persistir automaticamente novos conjuntos de dados depois de fundir/eliminar entradas
- [Visualizações avançadas de conjuntos de dados
FAQ
Para que é utilizada a API do Ultralytics Explorer?
A API Ultralytics Explorer foi concebida para uma exploração exaustiva de conjuntos de dados. Permite aos utilizadores filtrar e pesquisar conjuntos de dados utilizando consultas SQL, pesquisa de semelhanças vectoriais e pesquisa semântica. Esta poderosa API Python pode lidar com grandes conjuntos de dados, tornando-a ideal para várias tarefas de visão computacional usando modelos Ultralytics .
Como é que instalo a API do Ultralytics Explorer?
Para instalar a API do Ultralytics Explorer juntamente com as suas dependências, utilize o seguinte comando:
pip install ultralytics[explorer]
Isto irá instalar automaticamente todas as bibliotecas externas necessárias para a funcionalidade da API do Explorer. Para obter mais detalhes sobre a configuração, consulte a secção de instalação da nossa documentação.
Como posso utilizar a API do Ultralytics Explorer para pesquisa de semelhanças?
Pode utilizar a API do Explorador Ultralytics para efetuar pesquisas de semelhança, criando uma tabela de embeddings e consultando-a para imagens semelhantes. Aqui está 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 obter mais informações, visite a secção Pesquisa de semelhanças.
Quais são as vantagens de utilizar o LanceDB com o Ultralytics Explorer?
O LanceDB, utilizado pelo Ultralytics Explorer, fornece tabelas de embeddings escaláveis e em disco. Isto garante que pode criar e reutilizar embeddings para grandes conjuntos de dados como o COCO sem ficar sem memória. Estas tabelas são criadas apenas uma vez e podem ser reutilizadas, aumentando a eficiência no tratamento de dados.
Como é que a funcionalidade Perguntar à IA funciona na API do Ultralytics Explorer?
A funcionalidade Ask AI permite aos utilizadores filtrar conjuntos de dados utilizando consultas em linguagem natural. Esta funcionalidade utiliza 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, consulte a secção Perguntar à IA.