Beispiel einer VOC-Exploration
Willkommen beim Ultralytics Explorer API-Notizbuch! Dieses Notizbuch dient als Ausgangspunkt für die Erkundung der verschiedenen verfügbaren Ressourcen, die Ihnen den Einstieg in die Nutzung von Ultralytics zur Erkundung Ihrer Datensätze mit Hilfe der semantischen Suche erleichtern. Sie können Hilfsmittel verwenden, die es Ihnen ermöglichen, bestimmte Arten von Beschriftungen mithilfe der Vektorsuche oder sogar SQL-Abfragen zu untersuchen.
Versuchen Sie yolo explorer
unterstützt durch Explorer API
Einfach pip install ultralytics
und laufen yolo explorer
in Ihrem Terminal, um benutzerdefinierte Abfragen und semantische Suchen auf Ihren Datensätzen direkt in Ihrem Browser auszuführen!
Gemeinschaftsnote ⚠️
Ab dem ultralytics>=8.3.10
Die Unterstützung von Ultralytics explorer wurde abgeschafft. Aber keine Sorge! Sie können jetzt auf ähnliche und sogar erweiterte Funktionen über Ultralytics HUBunserer intuitiven No-Code-Plattform, die Ihren Arbeitsablauf optimiert. Mit Ultralytics HUB können Sie Ihre Daten mühelos erforschen, visualisieren und verwalten, ohne eine einzige Zeile Code zu schreiben. Probieren Sie es aus und nutzen Sie die Vorteile der leistungsstarken Funktionen!🚀
Einrichtung
Pip installieren ultralytics
und Abhängigkeiten und überprüfen Software und Hardware.
Ähnlichkeitssuche
Nutzen Sie die Leistungsfähigkeit der Vektorähnlichkeitssuche, um die ähnlichen Datenpunkte in Ihrem Datensatz zusammen mit ihrem Abstand im Einbettungsraum zu finden. Erstellen Sie einfach eine Einbettungstabelle für das gegebene Datensatz-Modell-Paar. Sie wird nur einmal benötigt und automatisch wiederverwendet.
Sobald die Tabelle mit den Einbettungen erstellt ist, können Sie die semantische Suche auf eine der folgenden Arten durchführen:
- Für einen bestimmten Index / eine Liste von Indizes im Datensatz wie - exp.get_similar(idx=[1,10], limit=10)
- Bei jedem Bild/jeder 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 die Summe ihrer Einbettungen verwendet.
Sie erhalten einen Pandas-Datensatz mit der Grenzzahl der ähnlichsten Datenpunkte zur Eingabe, zusammen mit ihrem Abstand im Einbettungsraum. Sie können diesen Datensatz verwenden, um weitere Filterungen vorzunehmen
Sie können die ähnlichen Proben auch direkt mit der Funktion plot_similar
verwenden
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
Ask AI: Suchen oder Filtern mit natürlicher Sprache
Sie können dem Explorer-Objekt die Art von Datenpunkten vorgeben, die Sie sehen möchten, und es wird versuchen, einen Datenrahmen mit diesen Punkten zurückzugeben. Da es von LLMs gesteuert wird, gelingt dies nicht immer. In diesem Fall gibt es keinen zurück.
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
Beispiel verwenden:
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 Dataset ausführen
Manchmal möchten Sie vielleicht eine bestimmte Art von Einträgen in Ihrem Datenbestand untersuchen. Zu diesem Zweck können Sie mit dem Explorer SQL-Abfragen durchführen. Er akzeptiert eines der beiden Formate:
- Abfragen, die mit "WHERE" beginnen, wählen automatisch alle Spalten aus. Dies kann als eine Kurzabfrage betrachtet werden
- Sie können auch vollständige Abfragen schreiben, bei denen Sie angeben können, welche Spalten ausgewählt werden sollen
Dies kann zur Untersuchung der Modellleistung und bestimmter Datenpunkte verwendet werden. Zum Beispiel:
- Nehmen wir an, Ihr Modell kämpft 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 enthalten.
Sie können SQL-Abfrage und semantische Suche kombinieren, um bestimmte Arten von Ergebnissen herauszufiltern
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 können Sie auch die Sql-Abfragen direkt darstellen, 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 Einbettungen Tabelle (Fortgeschrittene)
Explorer arbeitet mit LanceDB Tabellen intern. Sie können direkt auf diese Tabelle zugreifen, indem Sie Explorer.table
Objekt und führen Sie Rohabfragen aus, schieben Sie Vor- und Nachfilter ein usw.
Rohabfragen durchführen¶
Die Vektorsuche findet die nächstgelegenen Vektoren in der Datenbank. In einem Empfehlungssystem oder einer Suchmaschine können Sie ähnliche Produkte finden, wie die, die Sie gesucht haben. In LLM und anderen KI-Anwendungen kann jeder Datenpunkt durch die aus einigen Modellen generierten Einbettungen dargestellt werden und liefert die relevantesten Merkmale.
Eine Suche im hochdimensionalen Vektorraum besteht darin, K-Nächste-Nachbarn (KNN) des Abfragevektors zu finden.
Metrik In LanceDB ist eine Metrik die Art und Weise, wie der Abstand zwischen einem Paar von Vektoren beschrieben wird. Derzeit werden die folgenden 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 Dienstprogramme zur Verwaltung von Datensätzen zu erstellen. Weitere Details zu den verfügbaren LanceDB-Tabellenoperationen in den Docs
dummy_img_embedding = [i for i in range(256)]
table.search(dummy_img_embedding).limit(5).to_pandas()
Konvertierung in gängige Datenformate
Arbeiten mit Einbettungen
Sie können auf die Rohdaten der Einbettung in der Lancedb-Tabelle zugreifen und sie analysieren. Die Bildeinbettungen werden in der Spalte vector
import numpy as np
embeddings = table.to_pandas()["vector"].tolist()
embeddings = np.array(embeddings)
Streudiagramm
Einer der ersten Schritte bei der Analyse von Einbettungen ist die Darstellung im 2D-Raum mittels Dimensionalitätsreduktion. Versuchen 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 durch die Einbettungstabelle unterstützt wird. Der Explorer kommt mit einer similarity_index
Betrieb -
- Es wird versucht abzuschätzen, wie ähnlich jeder Datenpunkt dem Rest des Datensatzes ist.
- Dazu wird gezählt, wie viele Bildeinbettungen im generierten Einbettungsraum näher als max_dist zum aktuellen Bild liegen, wobei jeweils top_k ähnliche Bilder berücksichtigt werden.
Für einen bestimmten Datensatz, Modell, max_dist
& top_k
wird der einmal erstellte Ähnlichkeitsindex wiederverwendet. Falls sich Ihr Datensatz geändert hat oder Sie den Ähnlichkeitsindex einfach neu erstellen müssen, können Sie force=True
. Ähnlich wie bei der Vektor- und SQL-Suche gibt es auch hier ein Tool, mit dem die Daten direkt dargestellt werden können. Schauen wir mal
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 auf dem Grundstück
Schauen wir uns nun die Ausgabe der Operation an
Erstellen wir eine Abfrage, um zu sehen, welche Datenpunkte eine Ähnlichkeitszahl von mehr als 30 haben, und zeichnen wir Bilder, die ihnen ähnlich sind.
Sie sollten etwa Folgendes sehen