Link to this sectionVOC-Explorationsbeispiel#
中文 | 한국어 | 日本語 | Русский | Deutsch | Français | Español | Português | Türkçe | Tiếng Việt | العربية
Willkommen beim Ultralytics Explorer API-Notebook. Dieses Notebook stellt die Ressourcen vor, die zur Erkundung von Datensätzen mit semantischer Suche, Vektorsuche und SQL-Abfragen verfügbar sind.
Probiere yolo explorer aus (unterstützt durch die 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 der Ultralytics Explorer entfernt. Um Explorer zu nutzen, installiere pip install ultralytics==8.3.11. Ähnliche (und erweiterte) Funktionen zur Datensatzerkundung sind in der Ultralytics Platform verfügbar.
Link to this sectionEinrichtung#
Installiere ultralytics und die erforderlichen Abhängigkeiten und überprüfe dann Software und Hardware.
!uv pip install ultralytics[explorer] openai
yolo checksLink to this sectionÄhnlichkeitssuche#
Nutze die Leistung der Vektor-Ähnlichkeitssuche, um ähnliche Datenpunkte in deinem Datensatz zusammen mit ihrem Abstand im Einbettungsraum zu finden. Erstelle einfach eine Einbettungstabelle für das jeweilige Paar aus Datensatz und Modell. 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 Arten 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 jedes Bild/jede Liste von Bildern, die nicht im Datensatz enthalten sind - exp.get_similar(img=["path/to/img1", "path/to/img2"], limit=10) Bei mehreren Eingaben wird das Aggregat ihrer Einbettungen verwendet.
Du erhältst einen pandas DataFrame mit der begrenzten Anzahl der ähnlichsten Datenpunkte zur Eingabe, zusammen mit ihrem Abstand im Einbettungsraum. Du kannst diesen Datensatz verwenden, um weitere Filterungen vorzunehmen.

# Search dataset by index
similar = exp.get_similar(idx=1, limit=10)
similar.head()Du kannst die ähnlichen Beispiele auch direkt mit dem Dienstprogramm plot_similar grafisch 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
Link to this sectionKI fragen: Suchen oder Filtern mit natürlicher Sprache#
Du kannst das Explorer-Objekt mit der Art von Datenpunkten abfragen, die du sehen möchtest, und es wird versuchen, einen DataFrame mit diesen Ergebnissen zurückzugeben. Da es von LLMs betrieben wird, 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 grafisch darzustellen, 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)Link to this sectionFühre SQL-Abfragen für deinen Datensatz aus#
Manchmal möchtest du bestimmte Einträge in deinem Datensatz untersuchen. Dafür ermöglicht dir der Explorer die Ausführung von SQL-Abfragen. Er akzeptiert eines der folgenden Formate:
- Abfragen, die mit "WHERE" beginnen, wählen automatisch alle Spalten aus. Dies kann als Kurzform für eine Abfrage 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 spezifische Datenpunkte zu untersuchen. Zum Beispiel:
- Nehmen wir an, dein Modell hat Schwierigkeiten bei Bildern, auf denen Menschen und Hunde zu sehen sind. 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 eine bestimmte Art einzugrenzen
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 grafisch darzustellen

exp.plot_sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10", labels=True)Link to this sectionArbeiten mit der Einbettungstabelle (Fortgeschritten)#
Der Explorer arbeitet intern mit LanceDB-Tabellen. Du kannst direkt auf diese Tabelle zugreifen, das Explorer.table-Objekt verwenden und Rohabfragen ausführen, Vor- und Nachfilter übertragen usw.
table = exp.table
print(table.schema)Link to this sectionRohabfragen ausführen#
Die Vektorsuche findet die nächsten Vektoren in der Datenbank. In einem Empfehlungssystem oder einer Suchmaschine kannst du ähnliche Produkte zu dem von dir gesuchten finden. Bei LLM- und anderen KI-Anwendungen kann jeder Datenpunkt durch die von Modellen generierten Einbettungen dargestellt werden; es werden die relevantesten Merkmale zurückgegeben.
Eine Suche im hochdimensionalen Vektorraum besteht darin, die K-nächsten Nachbarn (KNN) des Abfragevektors zu finden.
Metrik In LanceDB ist eine Metrik die Art und Weise, den Abstand zwischen einem Paar von Vektoren zu beschreiben. Derzeit werden die folgenden Metriken unterstützt:
- L2
- Kosinus
- Punkt Die Ähnlichkeitssuche des Explorers 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()Link to this sectionKonvertierung in gängige Datenformate#
df = table.to_pandas()
pa_table = table.to_arrow()Link to this sectionArbeiten mit Einbettungen#
Du kannst auf die Roheinbettung 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)Link to this sectionStreudiagramm#
Einer der ersten Schritte bei der Analyse von Einbettungen ist das Zeichnen in einem 2D-Raum mittels Dimensionsreduktion. Lass uns ein Beispiel ausprobieren

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()Link to this sectionÄhnlichkeitsindex#
Hier ist ein einfaches Beispiel für einen Vorgang, der von der Einbettungstabelle unterstützt wird. Der Explorer verfügt über einen similarity_index-Vorgang-
- Er versucht abzuschätzen, wie ähnlich jeder Datenpunkt dem Rest des Datensatzes ist.
- Dies geschieht durch Zählen, wie viele Bildeinbettungen näher als max_dist am aktuellen Bild im generierten Einbettungsraum liegen, wobei jeweils top_k ähnliche Bilder berücksichtigt werden.
Für einen bestimmten Datensatz, ein Modell, max_dist & 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 auch hier ein Dienstprogramm, um ihn direkt grafisch darzustellen.
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)Jetzt schauen wir uns das Ergebnis des Vorgangs an
sim_idx = exp.similarity_index(max_dist=0.2, top_k=0.01, force=False)
sim_idxLass uns eine Abfrage erstellen, um zu sehen, welche Datenpunkte eine Ähnlichkeitsanzahl von mehr als 30 haben, und Bilder plotten, die ihnen ähnlich sind.
import numpy as np
sim_count = np.array(sim_idx["count"])
sim_idx["im_file"][sim_count > 30]Du solltest etwas wie das hier sehen

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