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 semantische Suchen in deinem Browser durchzuführen.
Ab ultralytics>=8.3.12 wurde Ultralytics Explorer entfernt. Um Explorer zu nutzen, installiere pip install ultralytics==8.3.11. Ähnliche (und erweiterte) Funktionen zur Datenerkundung sind in der Ultralytics Platform verfügbar.
Einrichtung#
Installiere ultralytics und die erforderlichen Abhängigkeiten und überprüfe dann 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 Dienstprogramm plot_similar plotten

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, liegt 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)Um diese Ergebnisse zu plotten, kannst du das Dienstprogramm 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 ein Dienstprogramm, 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 auf LanceDB-Tabellen. Du kannst direkt auf diese Tabelle zugreifen, indem du das Objekt Explorer.table verwendest, Rohabfragen ausführst, Vor- und Nachfilter anwendest 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
- Die Ähnlichkeitssuche von Dot Explorer verwendet standardmäßig L2. Du kannst Abfragen direkt auf Tabellen ausführen oder das Lance-Format verwenden, um benutzerdefinierte Dienstprogramme 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 rohe Einbettung 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 von der Einbettungstabelle unterstützt wird. 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 die Vektor- und SQL-Suche verfügt auch diese über ein Dienstprogramm zum direkten Plotten.
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