Meet YOLO26: next-gen vision AI.

Link to this sectionVOC-Explorationsbeispiel#

Ultralytics YOLO banner

中文 | 한국어 | 日本語 | Русский | Deutsch | Français | Español | Português | Türkçe | Tiếng Việt | العربية


Ultralytics CI Ultralytics Downloads Ultralytics Discord Ultralytics Forums Ultralytics Reddit
Run Ultralytics on Gradient Open Ultralytics In Colab Open Ultralytics In Kaggle Open Ultralytics In Binder

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.

Hinweis der Community ⚠️

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 checks

Link 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.

Ultralytics Explorer Ergebnisse der Ähnlichkeitssuche

# 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

Durch Vektorsuche gefundene ähnliche Bilder

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

Visualisierung der Ähnlichkeitssuche mit Einbettungen

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.

Ultralytics Explorer Ask AI Ergebnisse der Abfrage in natürlicher Sprache

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)

Ask AI Abfrageergebnis mit passenden Bildern

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

Explorer SQL-Abfrageergebnisse Tabelle

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

Visualisierung der durch SQL-Abfrage gefundenen Bilder

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

Explorer Roh-SQL-Abfrageergebnisse Tabelle

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

Explorer Einbettungen Streudiagramm-Visualisierung

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)

Analyse des Datensatz-Ähnlichkeitsindex

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_idx

Lass 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

Ähnlichkeitsindex-Visualisierung für die Datensatzanalyse

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

Kommentare