Exemplo de exploração de COVs
NÃO TE ESQUEÇAS DE QUE O TEU NOME ESTÁ NO TOPO DA LISTA. 한국어 | 日本語 | Русский | Deutsch | Français | Español | Português | Türkçe | Tiếng Việt | العربية
Bem-vindo ao bloco de notas da API do Ultralytics Explorer! Este bloco de notas serve como ponto de partida para explorar os vários recursos disponíveis para te ajudar a começar a utilizar Ultralytics para explorar os teus conjuntos de dados utilizando o poder da pesquisa semântica. Podes utilizar utilitários prontos a usar que te permitem examinar tipos específicos de etiquetas utilizando a pesquisa vetorial ou mesmo consultas SQL.
Esperamos que os recursos deste bloco de notas te ajudem a tirar o máximo partido de Ultralytics. Consulta os Explorer Docs para obteres mais informações, levanta uma questão no GitHub para obteres apoio e junta-te à nossa comunidade Discord para colocares questões e debateres!
Tenta yolo explorer
alimentado pela API do Exlorer
Simplesmente pip install ultralytics
e executa yolo explorer
no teu terminal para executares consultas personalizadas e pesquisas semânticas nos teus conjuntos de dados, mesmo dentro do teu browser!
Configurações
Instala o Pip ultralytics
e dependências e verifica o software e o hardware.
%pip install ultralytics[explorer] openai
import ultralytics
ultralytics.checks()
de ultralytics importação Explorador
Pesquisa por semelhança¶
Utiliza 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. Cria simplesmente uma tabela de incorporação para um dado par de modelo e conjunto de dados. Só precisa dela uma vez e é reutilizada automaticamente.
exp = Explorer("VOC.yaml", model="yolo11n.pt")
exp.create_embeddings_table()
Uma vez criada a tabela de ligações, podes 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, é utilizada a agregação 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
semelhante = exp.get_similar(idx=1, limita=10)
semelhante.cabeça()
Podes utilizar o também traçar as amostras semelhantes diretamente utilizando o plot_similar
Utiliza
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 any external images
2. Ask AI: pesquisa ou filtra com linguagem natural¶
Podes pedir ao objeto Explorer o tipo de pontos de dados que queres ver e ele tentará devolver um quadro de dados com esses pontos. Como é alimentado por LLMs, nem sempre acerta. Nesse caso, devolve None.
df = exp.pergunta_ai("mostra-me imagens que contenham mais de 10 objectos com pelo menos 2 pessoas")
df.cabeça(5)
para desenhar estes resultados, podes utilizar plot_query_result
Utiliza
Exemplifica:
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)
3. Executa consultas SQL no teu Dataset!¶
Por vezes, podes querer investigar um determinado tipo de entradas no teu conjunto de dados. Para isso, o Explorer permite-te executar consultas SQL. Aceita qualquer um dos formatos:
- As consultas que começam com "WHERE" seleccionam automaticamente todas as colunas. Isto pode ser considerado como uma consulta abreviada
- Também podes escrever consultas completas onde podes 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 teu modelo se esforça em imagens que têm humanos e cães. Podes escrever uma consulta como esta para selecionar os pontos que têm pelo menos 2 humanos E pelo menos um cão.
Podes combinar a consulta SQL e a pesquisa semântica para filtrar um tipo específico de resultados
tabela = exp.sql_query("WHERE labels LIKE '%pessoa, pessoa%' AND labels LIKE '%dog%' LIMIT 10")
tabela
Tal como a pesquisa por semelhança, também tens um utilitário para traçar diretamente as consultas sql utilizando exp.plot_sql_query
expira.traça_sql_query("WHERE rótulos LIKE '%pessoa, pessoa%' AND rótulos LIKE '%dog%' LIMIT 10", etiquetas=Verdadeiro)
tabela = exp.tabela
tabela.esquema
Executa consultas em bruto¶
A Pesquisa Vetorial encontra os vectores mais próximos a partir da base de dados. Num sistema de recomendação ou num motor de busca, podes encontrar produtos semelhantes ao que procuraste. 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 caracterí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 forma de descrever a distância entre um par de vetores. Atualmente, ele suporta as seguintes métricas:
- L2
- Cosseno
- Ponto A pesquisa de semelhanças do Explorer utiliza o L2 por defeito. Podes executar consultas em tabelas diretamente, ou usar o formato lance para construir utilitários personalizados para gerir conjuntos de dados. Mais detalhes sobre as operações de tabela disponíveis no LanceDB na documentação
incorporação de imagens fictícias = [i para i em intervalo(256)]
tabela.pesquisa(dummy_img_embedding).limita(5).para_pandas()
Interconversão para formatos de dados populares¶
df = tabela.to_pandas()
pa_table = tabela.to_arrow()
Trabalha com Embeddings¶
Podes aceder ao embedding em bruto a partir da tabela lancedb e analisá-lo. Os embeddings da imagem são armazenados na coluna vector
importa numpy as np
embeddings = tabela.to_pandas()["vetor"].tolist()
incorporações = np.array(embeddings)
Dispersão¶
Um dos passos preliminares na análise de embeddings é traçá-los no espaço 2D através da redução da dimensionalidade. Experimenta um exemplo
!pip instala scikit-aprende --q
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
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'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()
4. Índice de similaridade¶
Apresentamos-te um exemplo simples de uma operação alimentada pela tabela de incorporação. 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.
- 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, considerandotop_k
imagens semelhantes de cada vez.
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
.
À semelhança da pesquisa vetorial e da pesquisa SQL, esta também inclui um utilitário para a representar diretamente. Começa por ver o gráfico
expira.traça o índice de similaridade(max_dist=0.2, top_k=0.01)
Agora vamos ver o resultado da operação
importa numpy as np
sim_idx = exp.índice_de_similaridade(dist_max=0.2, top_k=0.01, força=Falso)
sim_idx
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.
import numpy as np
sim_count = np.array(sim_idx["count"])
sim_idx["im_file"][sim_count > 30]
Deves ver algo como isto
exp.plot_similar(idx=[7146, 14035]) # Using avg embeddings of 2 images