Zum Inhalt springen

VOC Exploration Beispiel

Willkommen beim Ultralytics Explorer API Notebook! Dieses Notebook dient als Ausgangspunkt für die Erkundung der verschiedenen Ressourcen, die Ihnen den Einstieg in die Verwendung von Ultralytics zur Erkundung Ihrer Datensätze mithilfe der Leistungsfähigkeit der semantischen Suche erleichtern. Sie können sofort einsatzbereite Hilfsprogramme verwenden, mit denen Sie bestimmte Arten von Beschriftungen mithilfe der Vektorsuche oder sogar SQL-Abfragen untersuchen können.

Versuchen yolo explorer powered by Explorer API

Einfach pip install ultralytics und ausführen yolo explorer in Ihrem Terminal, um benutzerdefinierte Abfragen und semantische Suchen in Ihren Datensätzen direkt in Ihrem Browser auszuführen!

Community-Hinweis ⚠️

Seit ultralytics>=8.3.10wird die Unterstützung für Ultralytics Explorer nicht mehr angeboten. Aber keine Sorge! Sie können jetzt auf ähnliche und sogar erweiterte Funktionen über Ultralytics HUBzugreifen, unsere intuitive No-Code-Plattform, die Ihren Workflow optimieren soll. Mit Ultralytics HUB können Sie Ihre Daten weiterhin mühelos erkunden, visualisieren und verwalten, ohne eine einzige Zeile Code zu schreiben. Schauen Sie es sich unbedingt an und nutzen Sie die leistungsstarken Funktionen!🚀

Einrichtung

Pip installieren ultralytics und Abhängigkeiten und überprüfen Sie Software und Hardware.

!uv pip install ultralytics[explorer] openai
yolo checks

Nutzen Sie die Leistungsfähigkeit der Vektorähnlichkeitssuche, um die ähnlichen Datenpunkte in Ihrem Datensatz zusammen mit ihrer Distanz im Embedding-Raum zu finden. Erstellen Sie einfach eine Embedding-Tabelle für das jeweilige Datensatz-Modell-Paar. Dies ist nur einmal erforderlich und wird automatisch wiederverwendet.

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

Sobald die Einbettungstabelle erstellt ist, können Sie die semantische Suche auf eine der folgenden Arten ausführen:

  • Bei einem gegebenen Index / einer Liste von Indizes im Datensatz, wie z. B. - exp.get_similar(idx=[1,10], limit=10)
  • Auf einem beliebigen Bild/ einer Liste von Bildern, die nicht im Datensatz enthalten sind - exp.get_similar(img=["path/to/img1", "path/to/img2"], limit=10) Im Falle von mehreren Eingaben wird die Summe ihrer Einbettungen verwendet.

Sie erhalten einen Pandas-Dataframe mit der begrenzten Anzahl der ähnlichsten Datenpunkte zur Eingabe, zusammen mit ihrer Entfernung im Einbettungsraum. Sie können diesen Datensatz verwenden, um weitere Filterungen durchzuführen.

Ähnlichkeitssuche Tabelle

# Search dataset by index
similar = exp.get_similar(idx=1, limit=10)
similar.head()

Sie können die ähnlichen Stichproben auch direkt mit dem folgenden Befehl plotten: plot_similar util

Ähnlichkeitssuche Bild 1

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

Ähnlichkeitssuche Bild 2

KI fragen: Suchen oder filtern mit natürlicher Sprache

Sie können das Explorer-Objekt nach der Art der Datenpunkte fragen, die Sie sehen möchten, und es wird versuchen, einen Dataframe mit diesen zurückzugeben. Da es von LLMs betrieben wird, ist es nicht immer richtig. In diesem Fall wird None zurückgegeben.

KI-Tabelle fragen

df = exp.ask_ai("show me images containing more than 10 objects with at least 2 persons")
df.head(5)

Für die Darstellung dieser Ergebnisse können Sie Folgendes verwenden: plot_query_result util Beispiel:

plt = plot_query_result(exp.ask_ai("show me 10 images containing exactly 2 persons"))
Image.fromarray(plt)

KI-Bild 1 fragen

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

SQL-Abfragen auf Ihrem Datensatz ausführen

Manchmal möchten Sie vielleicht eine bestimmte Art von Einträgen in Ihrem Datensatz untersuchen. Hierfür können Sie mit dem Explorer SQL-Abfragen ausführen. Er akzeptiert eines der folgenden Formate:

  • Abfragen, die mit "WHERE" beginnen, wählen automatisch alle Spalten aus. Dies kann als Kurzabfrage betrachtet werden
  • Sie können auch vollständige Abfragen schreiben, in denen Sie angeben können, welche Spalten ausgewählt werden sollen

Dies kann verwendet werden, um die Modellleistung und bestimmte Datenpunkte zu untersuchen. Zum Beispiel:

  • Nehmen wir an, Ihr Modell hat Probleme mit Bildern, auf denen Menschen und Hunde zu sehen sind. Sie können eine Abfrage wie diese schreiben, um die Punkte auszuwählen, die mindestens 2 Menschen UND mindestens einen Hund haben.

Sie können SQL-Abfragen und semantische Suche kombinieren, um die Ergebnisse auf einen bestimmten Typ zu filtern

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)

SQL-Abfragen Tabelle

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

Ähnlich wie bei der Ähnlichkeitssuche erhalten Sie auch ein Hilfsprogramm, um die SQL-Abfragen direkt zu plotten, indem Sie exp.plot_sql_query

SQL-Abfragen Bild 1

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

Arbeiten mit Embedding-Tabellen (Erweitert)

Explorer funktioniert mit LanceDB Tabellen intern. Sie können direkt auf diese Tabelle zugreifen, indem Sie Explorer.table Objekte abfragen und Rohabfragen ausführen, Pre- und Post-Filter nach unten verschieben usw.

table = exp.table
print(table.schema)

Rohe Abfragen ausführen¶

Die Vektorsuche findet die ähnlichsten Vektoren aus der Datenbank. In einem Empfehlungssystem oder einer Suchmaschine können Sie ähnliche Produkte zu dem finden, das Sie gesucht haben. In LLM- und anderen KI-Anwendungen können die einzelnen Datenpunkte durch die von einigen Modellen generierten Einbettungen dargestellt werden, wobei die relevantesten Merkmale zurückgegeben werden.

Eine Suche im hochdimensionalen Vektorraum dient dazu, die K-Nearest-Neighbors (KNN) des Abfragevektors zu finden.

Metrik In LanceDB beschreibt eine Metrik die Distanz zwischen zwei Vektoren. Aktuell werden folgende Metriken unterstützt:

  • L2
  • Kosinus
  • Die Ähnlichkeitssuche von Dot Explorer verwendet standardmäßig L2. Sie können Abfragen direkt auf Tabellen ausführen oder das Lance-Format verwenden, um benutzerdefinierte Hilfsprogramme zur Verwaltung von Datensätzen zu erstellen. Weitere Informationen zu den verfügbaren LanceDB-Tabellenoperationen finden Sie in den Dokumenten.

Raw-Queries-Tabelle

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

Arbeiten mit Einbettungen

Sie können auf das Roh-Embedding von der lancedb-Tabelle zugreifen und es analysieren. Die Bild-Embeddings werden in der Spalte gespeichert vector

import numpy as np

embeddings = table.to_pandas()["vector"].tolist()
embeddings = np.array(embeddings)

Streudiagramm

Einer der vorbereitenden Schritte bei der Analyse von Einbettungen ist das Plotten im 2D-Raum mittels Dimensionsreduktion. Probieren wir ein Beispiel

Beispiel für ein Streudiagramm

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

Ähnlichkeitsindex

Hier ist ein einfaches Beispiel für eine Operation, die von der Einbettungstabelle unterstützt wird. Explorer wird mitgeliefert mit einem similarity_index Operation-

  • Es versucht abzuschätzen, wie ähnlich jeder Datenpunkt dem Rest des Datensatzes ist.
  • Es tut dies, indem es zählt, wie viele Image-Embeddings näher als max_dist zum aktuellen Bild im generierten Embedding-Raum liegen, wobei jeweils top_k ähnliche Bilder berücksichtigt werden.

Für einen bestimmten Datensatz, ein Modell, max_dist & top_k Der einmal generierte Ähnlichkeitsindex wird wiederverwendet. Falls sich Ihr Datensatz geändert hat oder Sie den Ähnlichkeitsindex einfach neu generieren müssen, können Sie Folgendes übergeben force=True. Ähnlich wie bei der Vektor- und SQL-Suche gibt es auch hier ein Hilfsprogramm, um es direkt zu plotten. Lass uns schauen

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)

Ähnlichkeitsindex

zuerst im Diagramm

exp.plot_similarity_index(max_dist=0.2, top_k=0.01)

Betrachten wir nun die Ausgabe der Operation.

sim_idx = exp.similarity_index(max_dist=0.2, top_k=0.01, force=False)

sim_idx

Erstellen wir eine Abfrage, um zu sehen, welche Datenpunkte eine Ähnlichkeitsanzahl von mehr als 30 haben, und stellen wir ähnliche Bilder dar.

import numpy as np

sim_count = np.array(sim_idx["count"])
sim_idx["im_file"][sim_count > 30]

Sie sollten so etwas sehen

similarity-index-image

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


📅 Erstellt vor 8 Monaten ✏️ Aktualisiert vor 5 Tagen

Kommentare