VOC-Erkundungsbeispiel#
中文 | 한국어 | 日本語 | Русский | Deutsch | Français | Español | Português | Türkçe | Tiếng Việt | العربية
Willkommen im Ultralytics Explorer API-Notebook. Dieses Notebook stellt die verfügbaren Ressourcen zur Erkundung von Datensätzen mittels semantischer Suche, Vektorsuche und SQL-Abfragen vor.
Probiere yolo explorer aus (unterstützt von der Explorer API)
Installiere ultralytics und führe yolo explorer in deinem Terminal aus, um benutzerdefinierte Abfragen und die semantische Suche in deinem Browser durchzuführen.
Ab ultralytics>=8.3.12 wurde der Ultralytics Explorer entfernt. Um den Explorer zu nutzen, installiere pip install ultralytics==8.3.11. Ähnliche (und erweiterte) Funktionen zur Datensatzexploration sind in der Ultralytics Platform verfügbar.
Einrichtung#
Installiere ultralytics und die erforderlichen Abhängigkeiten und überprüfe anschließend Software und Hardware.
!uv pip install ultralytics[explorer] openai
yolo checksÄhnlichkeitssuche#
Nutze die Leistungsfähigkeit der Vektor-Ähnlichkeitssuche, um ähnliche Datenpunkte in deinem Datensatz zusammen mit ihrer Distanz im Einbettungsraum zu finden. Erstelle dazu einfach eine Einbettungstabelle für das gegebene 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, kannst du die semantische Suche auf eine der folgenden Weisen ausführen:
- Für einen bestimmten Index / eine Liste von Indizes im Datensatz, z. B.
exp.get_similar(idx=[1, 10], limit=10) - Für ein beliebiges Bild / eine Liste von Bildern, die sich nicht im Datensatz befinden - exp.get_similar(img=["path/to/img1", "path/to/img2"], limit=10). Bei mehreren Eingaben wird der Durchschnitt ihrer Einbettungen verwendet.
Du erhältst einen pandas DataFrame mit der festgelegten Anzahl an ähnlichsten Datenpunkten zur Eingabe sowie deren Distanz im Einbettungsraum. Du kannst diesen Datensatz für weitere Filterungen verwenden.

# Search dataset by index
similar = exp.get_similar(idx=1, limit=10)
similar.head()Du kannst die ähnlichen Stichproben auch direkt mit dem Hilfsprogramm plot_similar darstellen

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#
Du kannst das Explorer-Objekt auffordern, die Art von Datenpunkten anzuzeigen, die du sehen möchtest, und es wird versuchen, einen DataFrame mit diesen Ergebnissen zurückzugeben. Da es auf LLMs basiert, liefert es nicht immer das richtige Ergebnis. In diesem Fall gibt es None zurück.

df = exp.ask_ai("show me images containing more than 10 objects with at least 2 persons")
df.head(5)Um diese Ergebnisse zu plotten, kannst du das Hilfsprogramm plot_query_result verwenden. 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)Führe SQL-Abfragen für deinen Datensatz aus#
Manchmal möchtest du bestimmte Einträge in deinem Datensatz untersuchen. Zu diesem Zweck ermöglicht dir Explorer die Ausführung von SQL-Abfragen. Es akzeptiert eines der folgenden Formate:
- Abfragen, die mit „WHERE“ beginnen, wählen automatisch alle Spalten aus. Dies kann als Kurzabfrage betrachtet werden.
- Du kannst auch vollständige Abfragen schreiben, bei denen du angeben kannst, welche Spalten ausgewählt werden sollen.
Dies kann verwendet werden, um die Modellleistung und bestimmte Datenpunkte zu untersuchen. Zum Beispiel:
- Nehmen wir an, dein Modell hat Schwierigkeiten mit Bildern, die Menschen und Hunde zeigen. Du kannst eine Abfrage wie diese schreiben, um die Punkte auszuwählen, die mindestens 2 Menschen UND mindestens einen Hund enthalten.
Du kannst SQL-Abfragen und semantische Suche kombinieren, um die Ergebnisse auf einen bestimmten Typ einzuschränken
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)Genau wie bei der Ähnlichkeitssuche erhältst du auch hier ein Hilfsprogramm, um die SQL-Abfragen direkt mit exp.plot_sql_query zu plotten

exp.plot_sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10", labels=True)Arbeiten mit der Einbettungstabelle (Fortgeschritten)#
Explorer arbeitet intern mit LanceDB-Tabellen. Du kannst direkt über das Explorer.table-Objekt auf diese Tabelle zugreifen und Rohabfragen ausführen, Vor- und Nachfilter anwenden usw.
table = exp.table
print(table.schema)Rohabfragen ausführen¶#
Die Vektorsuche findet die nächstgelegenen Vektoren in der Datenbank. In einem Empfehlungssystem oder einer Suchmaschine kannst du ähnliche Produkte zu dem von dir gesuchten finden. In LLM- und anderen KI-Anwendungen kann jeder Datenpunkt durch die von einigen Modellen generierten Einbettungen dargestellt werden, wodurch die relevantesten Merkmale zurückgegeben werden.
Eine Suche im hochdimensionalen Vektorraum dient dazu, die K-nächsten Nachbarn (K-Nearest-Neighbors, KNN) des Abfragevektors zu finden.
Metrik In LanceDB ist eine Metrik die Art und Weise, wie der Abstand zwischen einem Vektorenpaar beschrieben wird. Derzeit werden die folgenden Metriken unterstützt:
- L2
- Cosinus
- Dot Explorer verwendet standardmäßig L2 für die Ähnlichkeitssuche. Du kannst Abfragen direkt auf Tabellen ausführen oder das Lance-Format verwenden, um benutzerdefinierte Hilfsprogramme zur Verwaltung von Datensätzen zu erstellen. Weitere Details zu verfügbaren LanceDB-Tabellenoperationen findest du in der Dokumentation

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()Mit Einbettungen arbeiten#
Du kannst auf die Rohembettung aus der lancedb-Tabelle zugreifen und sie analysieren. Die Bildeinbettungen werden in der Spalte vector gespeichert.
import numpy as np
embeddings = table.to_pandas()["vector"].tolist()
embeddings = np.array(embeddings)Streudiagramm#
Einer der ersten Schritte bei der Analyse von Einbettungen besteht darin, sie durch Dimensionsreduktion in einem 2D-Raum darzustellen. Probieren wir ein Beispiel aus

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 auf der Einbettungstabelle basiert. Explorer wird mit einer similarity_index-Operation geliefert-
- Sie versucht abzuschätzen, wie ähnlich jeder Datenpunkt dem Rest des Datensatzes ist.
- Dies geschieht durch Zählen, wie viele Bildeinbettungen im generierten Einbettungsraum näher als max_dist beim aktuellen Bild liegen, wobei jeweils die top_k ähnlichen Bilder berücksichtigt werden.
Für einen bestimmten Datensatz, ein bestimmtes Modell, max_dist und top_k wird der einmal generierte Ähnlichkeitsindex wiederverwendet. Falls sich dein Datensatz geändert hat oder du den Ähnlichkeitsindex einfach neu generieren musst, kannst du force=True übergeben. Ähnlich wie bei der Vektor- und SQL-Suche gibt es hierfür auch ein Hilfsprogramm zur direkten Darstellung.
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)
Schauen wir uns zuerst das Diagramm an
exp.plot_similarity_index(max_dist=0.2, top_k=0.01)Schauen wir uns nun die Ausgabe der Operation an
sim_idx = exp.similarity_index(max_dist=0.2, top_k=0.01, force=False)
sim_idxErstellen wir eine Abfrage, um zu sehen, welche Datenpunkte eine Ähnlichkeitsanzahl von mehr als 30 aufweisen, und plotten wir ähnliche Bilder dazu.
import numpy as np
sim_count = np.array(sim_idx["count"])
sim_idx["im_file"][sim_count > 30]Du solltest etwa Folgendes sehen

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