Meet YOLO26: next-gen vision AI.

Link to this sectionExemplo de Exploração do VOC#

Banner do Ultralytics YOLO

中文 | 한국어 | 日本語 | Русский | Deutsch | Français | Español | Português | Türkçe | Tiếng Việt | العربية


Ultralytics CI Ultralytics Downloads Ultralytics Discord Ultralytics Forums Ultralytics Reddit
Run Ultralytics on Gradient Open Ultralytics In Colab Open Ultralytics In Kaggle Open Ultralytics In Binder

Bem-vindo ao notebook da API do Ultralytics Explorer. Este notebook apresenta os recursos disponíveis para explorar conjuntos de dados com busca semântica, busca vetorial e consultas SQL.

Experimente o yolo explorer (com a tecnologia da API Explorer)

Instale o ultralytics e execute yolo explorer no seu terminal para realizar consultas personalizadas e buscas semânticas no seu navegador.

Nota da Comunidade ⚠️

A partir do ultralytics>=8.3.12, o Ultralytics Explorer foi removido. Para usar o Explorer, instale pip install ultralytics==8.3.11. Recursos de exploração de conjuntos de dados semelhantes (e expandidos) estão disponíveis na Ultralytics Platform.

Link to this sectionConfiguração#

Instale o ultralytics e as dependências necessárias, depois verifique o software e o hardware.

!uv pip install ultralytics[explorer] openai
yolo checks

Link to this sectionBusca por Similaridade#

Utilize o poder da busca por similaridade vetorial para encontrar pontos de dados semelhantes no seu conjunto de dados, juntamente com a distância deles no espaço de embutimento (embedding). Basta criar uma tabela de embeddings para o par conjunto de dados-modelo fornecido. Isso só é necessário uma vez e é reutilizado automaticamente.

exp = Explorer("VOC.yaml", model="yolo11n.pt")
exp.create_embeddings_table()

Assim que a tabela de embeddings for criada, você pode executar a busca semântica de qualquer uma das seguintes maneiras:

  • Em um índice/lista de índices fornecido no conjunto de dados, por exemplo, exp.get_similar(idx=[1, 10], limit=10)
  • Em qualquer imagem/lista de imagens não presentes no conjunto de dados - exp.get_similar(img=["path/to/img1", "path/to/img2"], limit=10) No caso de múltiplas entradas, o agregado dos seus embeddings é utilizado.

Você obtém um DataFrame do pandas com o número limite de pontos de dados mais semelhantes à entrada, junto com a distância deles no espaço de embutimento. Você pode usar este conjunto de dados para realizar filtragens adicionais.

Resultados da busca por similaridade do Ultralytics Explorer

# 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

Imagens semelhantes encontradas pela busca vetorial

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

Visualização da busca por similaridade com embeddings

Link to this sectionPergunte à IA: Buscar ou Filtrar com Linguagem Natural#

Você pode enviar instruções ao objeto Explorer com o tipo de pontos de dados que deseja ver, e ele tentará retornar um DataFrame com esses resultados. Como ele é alimentado por LLMs, nem sempre ele acerta. Nesse caso, ele retornará None.

Resultados da consulta em linguagem natural do Pergunte à IA do Ultralytics Explorer

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)

Resultado da consulta do Pergunte à IA mostrando imagens correspondentes

# 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)

Link to this sectionExecute Consultas SQL no seu Conjunto de Dados#

Às vezes, você pode querer investigar certas entradas no seu conjunto de dados. Para isso, o Explorer permite que você execute consultas SQL. Ele aceita qualquer um dos seguintes formatos:

  • Consultas começando 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 cães. Você pode escrever uma consulta como esta para selecionar os pontos que possuem pelo menos 2 humanos E pelo menos um cão.

Você pode combinar consultas SQL e busca 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)

Tabela de resultados de consultas SQL do Explorer

table = exp.sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10")
print(table)

Assim como na busca por similaridade, você também obtém um utilitário para plotar diretamente as consultas sql usando exp.plot_sql_query

Visualização das imagens correspondentes à consulta SQL

exp.plot_sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10", labels=True)

Link to this sectionTrabalhando com a tabela de embeddings (Avançado)#

O Explorer funciona internamente em tabelas do LanceDB. Você pode acessar esta tabela diretamente, usando o objeto Explorer.table e executar consultas brutas, aplicar filtros de pré e pós-processamento, etc.

table = exp.table
print(table.schema)

Link to this sectionExecutar consultas brutas¶#

A Busca Vetorial encontra os vetores mais próximos no banco de dados. Em um sistema de recomendação ou mecanismo de busca, você pode encontrar produtos semelhantes ao que você buscou. Em LLMs e outras aplicações de IA, cada ponto de dados pode ser representado pelos embeddings gerados por alguns modelos, retornando as características mais relevantes.

Uma busca em espaço vetorial de alta dimensão consiste em encontrar os 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 busca por similaridade do Ponto Explorer usa L2 por padrão. Você pode executar consultas em tabelas diretamente ou usar o formato lance para criar utilitários personalizados para gerenciar conjuntos de dados. Mais detalhes sobre as operações disponíveis na tabela LanceDB estão nos documentos

Tabela de resultados de consultas SQL brutas do Explorer

dummy_img_embedding = [i for i in range(256)]
table.search(dummy_img_embedding).limit(5).to_pandas()

Link to this sectionInterconversão para formatos de dados populares#

df = table.to_pandas()
pa_table = table.to_arrow()

Link to this sectionTrabalhando 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)

Link to this sectionGráfico de dispersão#

Um dos passos preliminares na análise de embeddings é plotá-los em um espaço 2D através de redução de dimensionalidade. Vamos tentar um exemplo

Visualização de gráfico de dispersão de embeddings do Explorer

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()

Link to this sectionÍndice de Similaridade#

Aqui está um exemplo simples de uma operação alimentada 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 restante do conjunto de dados.
  • 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 os top_k imagens semelhantes por vez.

Para um determinado conjunto de dados, modelo, max_dist e top_k, o índice de similaridade, uma vez gerado, será reutilizado. Caso seu conjunto de dados tenha mudado, ou você simplesmente precise regenerar o índice de similaridade, você pode passar force=True. Semelhante à busca 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)

Análise do índice de similaridade do conjunto de dados

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_idx

Vamos criar uma consulta para ver quais pontos de dados têm uma contagem de similaridade superior a 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

Visualização do índice de similaridade para análise do conjunto de dados

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

Comentários