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.10
wird 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
Ähnlichkeitssuche
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.
# 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
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
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.
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)
# 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)
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
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.
dummy_img_embedding = [i for i in range(256)]
table.search(dummy_img_embedding).limit(5).to_pandas()
Konvertierung in gängige Datenformate
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
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)
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
exp.plot_similar(idx=[7146, 14035]) # Using avg embeddings of 2 images