Exemplo de exploração de COV
Bem-vindo ao caderno da API do Ultralytics Explorer! Este bloco de notas serve como ponto de partida para explorar os vários recursos disponíveis para o ajudar a começar a utilizar Ultralytics para explorar os seus conjuntos de dados utilizando o poder da pesquisa semântica. Pode utilizar utilitários prontos a usar que lhe permitem examinar tipos específicos de etiquetas utilizando a pesquisa vetorial ou mesmo consultas SQL.
Tentar yolo explorer
alimentado pela API Explorer
Simplesmente pip install ultralytics
e executar yolo explorer
no seu terminal para executar consultas personalizadas e pesquisa semântica nos seus conjuntos de dados diretamente no seu browser!
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!
Configuração
Instalação do pip ultralytics
e dependências e verificar o software e o hardware.
Pesquisa de semelhanças
Utilize o poder da pesquisa de semelhança de vectores para encontrar os pontos de dados semelhantes no seu conjunto de dados juntamente com a sua distância no espaço de incorporação. Basta criar uma tabela de incorporação para um determinado par de modelo e conjunto de dados. Ela só é necessária uma vez e é reutilizada automaticamente.
Uma vez criada a tabela de ligações, pode executar a pesquisa semântica de uma das seguintes formas:
- Num determinado índice / lista de índices no conjunto de dados como - exp.get_similar(idx=[1,10], limit=10)
- Em qualquer imagem/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 das suas incorporações.
Obtém um dataframe pandas com o número limite 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
Pode utilizar o também traçar as amostras semelhantes diretamente utilizando o plot_similar
util
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
Ask AI: pesquisar ou filtrar com linguagem natural
Pode solicitar ao objeto Explorer o tipo de pontos de dados que pretende ver, e este tentará devolver um quadro de dados com esses pontos. Como ele é alimentado por LLMs, nem sempre 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 desenhar estes resultados, pode utilizar plot_query_result
Exemplo de utilização:
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)
Executar consultas SQL no seu conjunto de dados
Por vezes, pode querer investigar um determinado tipo de entradas no seu conjunto de dados. Para isso, o Explorer permite-lhe executar consultas SQL. Aceita qualquer um dos formatos:
- As consultas que começam com "WHERE" selecionam automaticamente todas as colunas. Isto pode ser considerado como uma consulta abreviada
- Também é possível escrever consultas completas onde se pode especificar quais as colunas a selecionar
Isto pode ser utilizado para investigar o desempenho do modelo e pontos de dados específicos. Por exemplo:
- Digamos que o seu modelo se esforça em imagens que têm humanos e cães. Pode escrever uma consulta como esta para selecionar os pontos que têm pelo menos 2 humanos E pelo menos um cão.
Pode combinar a consulta SQL e a pesquisa semântica para filtrar um tipo específico de resultados
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)
Tal como a pesquisa por semelhança, também tem um utilitário para traçar diretamente as consultas sql utilizando exp.plot_sql_query
exp.plot_sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10", labels=True)
Trabalhar com embeddings Tabela (Avançado)
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.
Executar queries¶ em bruto
A Pesquisa Vetorial encontra os vectores mais próximos da base de dados. Num sistema de recomendação ou num motor de busca, é possível encontrar produtos semelhantes aos que foram pesquisados. No LLM e noutras aplicações de IA, cada ponto de dados pode ser apresentado pelos embeddings gerados a partir de alguns modelos, devolvendo as caraterísticas mais relevantes.
Uma pesquisa num espaço vetorial de elevada 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 pesquisa de similaridade do Dot Explorer utiliza o L2 por defeito. Você pode executar consultas em tabelas diretamente, ou usar o formato lance para construir utilitários personalizados para gerenciar conjuntos de dados. Mais detalhes sobre as operações de tabela disponíveis no LanceDB 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
Trabalhar com Embeddings
Pode aceder ao embedding em bruto a partir 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 é traçá-los no espaço 2D através da redução da 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 alimentada pela tabela de incorporações. O Explorer vem com um similarity_index
funcionamento-
- Tenta estimar a semelhança entre cada ponto de dados e o resto do conjunto de dados.
- Para isso, conta quantas imagens incorporadas estão mais próximas do que max_dist da imagem atual no espaço de incorporação gerado, considerando top_k imagens semelhantes de cada vez.
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
. À semelhança da pesquisa vetorial e da pesquisa SQL, esta também inclui um utilitário que permite desenhá-la diretamente. Vejamos
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)
na trama primeiro
Agora vamos ver o resultado da operação
Vamos criar uma consulta para ver que pontos de dados têm uma contagem de semelhança superior a 30 e traçar imagens semelhantes a eles.
Deverá ver algo como isto