Salta para o conteúdo

Ultralytics Explorador API

Introdução

Abre em Colab 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.



Observa: 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, utiliza o seguinte comando:

pip install ultralytics[explorer]

Utilização

from ultralytics import Explorer

# Create an Explorer object
explorer = Explorer(data="coco128.yaml", model="yolov8n.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 possas criar e reutilizar embeddings para grandes conjuntos de dados como o COCO sem ficar sem memória.

No caso de quereres forçar a atualização da tabela de ligações, podes passar force=True para create_embeddings_table método.

Podes aceder diretamente ao objeto de tabela LanceDB para efetuar análises avançadas. Saiba mais sobre isso na seção Trabalhando com tabelas Embeddings

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 embeddings semelhantes. Assim que a tabela de embeddings estiver construída, 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 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 das suas incorporações.

Obtém um quadro de dados pandas com o limit O número de pontos de dados mais semelhantes à entrada, juntamente com a sua distância no espaço de incorporação. Podes 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="yolov8n.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="yolov8n.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 podes desenhar as imagens semelhantes utilizando o plot_similar método. Este método recebe os mesmos argumentos que o método get_similar e traça as imagens semelhantes numa grelha.

Traçar imagens semelhantes

from ultralytics import Explorer

# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolov8n.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="yolov8n.pt")
exp.create_embeddings_table()

plt = exp.plot_similar(idx=1, limit=10)
plt.show()

2. Pergunta à IA (consulta de linguagem natural)

Isto permite-te escrever como queres filtrar o teu conjunto de dados utilizando linguagem natural. Não precisas de saber escrever consultas SQL. O nosso gerador de consultas com IA faz isso automaticamente. Por exemplo, podes dizer - "mostra-me 100 imagens com exatamente uma pessoa e 2 cães. Pode haver outros objectos também" e ele vai gerar internamente a consulta e mostrar-te esses resultados. Nota: Isto funciona usando LLMs, por isso os resultados são probabilísticos e podem errar algumas vezes

Pergunta à IA

from ultralytics import Explorer
from ultralytics.data.explorer import plot_query_result

# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolov8n.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

Podes executar consultas SQL no teu 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="yolov8n.pt")
exp.create_embeddings_table()

df = exp.sql_query("WHERE labels LIKE '%person%' AND labels LIKE '%dog%'")
print(df.head())

Representação gráfica dos resultados de consultas SQL

Também podes desenhar os resultados de uma consulta SQL utilizando a função plot_sql_query método. Este método recebe os mesmos argumentos que o método sql_query e traça os resultados numa grelha.

Representação gráfica dos resultados de consultas SQL

from ultralytics import Explorer

# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolov8n.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 objectos incorporados. Uma vez criada a tabela de embeddings, podes aceder-lhe utilizando o comando Explorer.table

O Explorer funciona em LanceDB internamente. Podes aceder a esta tabela diretamente, utilizando Explorer.table e executa consultas não processadas, envia pré e pós-filtros, etc.

from ultralytics import Explorer

exp = Explorer()
exp.create_embeddings_table()
table = exp.table

Aqui estão alguns exemplos do que podes fazer com a tabela:

Obtém 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="yolov8n.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

Quando utilizas grandes conjuntos de dados, também podes 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=...)

Encontra mais detalhes sobre os tipos de índices vectoriais disponíveis e os parâmetros aqui No futuro, adicionaremos suporte para a criação de índices vectoriais diretamente a partir da API Explorer.

5. Aplicações de embeddings

Podes utilizar a tabela de embeddings para efetuar uma variedade de análises exploratórias. Aqui estão alguns exemplos:

Índice de semelhança

O Explorer vem com um similarity_index operação:

  • Tenta estimar a semelhança entre cada ponto de dados e o resto do conjunto de dados.
  • Faz isso contando quantos embeddings de imagem estão mais próximos do que max_dist para a imagem atual no espaço de incorporação gerado, considerando top_k imagens semelhantes de cada vez.

Devolve um quadro de dados pandas com as seguintes colunas:

  • idx: Índice da imagem no conjunto de dados
  • im_file: Caminho para o ficheiro de imagem
  • count: Número de imagens no conjunto de dados que estão mais próximas do que max_dist para a imagem atual
  • sim_im_files: Lista de caminhos para o count imagens semelhantes

Dica

Para um determinado conjunto de dados, modela, max_dist & top_k o índice de similaridade, uma vez gerado, será reutilizado. Caso o teu conjunto de dados tenha mudado, ou simplesmente precises de gerar novamente o índice de similaridade, podes passar force=True.

Índice de semelhança

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 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]

Visualiza o espaço de incorporação

Também podes visualizar o espaço de incorporação utilizando a ferramenta de plotagem da tua escolha. Por exemplo, aqui tens um exemplo simples utilizando o 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 CV utilizando a API Explorer. Para te inspirares, consulta o

Aplicações criadas com o Ultralytics Explorer

Experimenta a nossa demonstração GUI baseada na API Explorer

Em breve

  • [Une etiquetas específicas de conjuntos de dados. Exemplo - Importar tudo person etiquetas da COCO e car Etiquetas de Cityscapes
  • [Remove as imagens que têm um índice de semelhança superior ao limiar dado
  • [Mantém automaticamente os novos conjuntos de dados após a fusão/remoção de 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 abrangente 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, utiliza o seguinte comando:

pip install ultralytics[explorer]
Instala automaticamente todas as bibliotecas externas necessárias para a funcionalidade da API do Explorer. Para obter detalhes adicionais de configuração, consulta a secção de instalação da nossa documentação.

Podes 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="yolov8n.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 informações, visita a página 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 podes 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. Vê um exemplo:

from ultralytics import Explorer

# Create an Explorer object
explorer = Explorer(data="coco128.yaml", model="yolov8n.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.



Criado em 2024-01-07, Atualizado em 2024-07-04
Autores: glenn-jocher (12), 0xSynapse (1), RizwanMunawar (2), AyushExel (2)

Comentários