VOC Exploration Example¶
中文 | 한국어 | 日本語 | Русский | Deutsch | Français | Español | Português | Türkçe | Tiếng Việt | العربية
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.
Wir hoffen, dass die Ressourcen in diesem Notizbuch Ihnen dabei helfen werden, das Beste aus Ultralytics herauszuholen. Bitte schauen Sie in den Explorer Docs nach Details, stellen Sie ein Problem auf GitHub für Support und treten Sie unserer Discord-Community für Fragen und Diskussionen bei!
Versuchen Sie yolo explorer
unterstützt durch Exlorer 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!
Ultralytics Explorer-Unterstützung veraltet ⚠️¶
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.
%pip installieren ultralytics[explorer] openai
importieren ultralytics
ultralytics.prüft()
von ultralytics importieren Forscher
Ä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.
exp = Forscher("VOC.yaml", Modell="yolo11n.pt")
exp.create_embeddings_table()
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 bestimmte 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 Aggregation ihrer Einbettungen verwendet.
Sie erhalten einen Pandas-Datenrahmen mit dem limit
Anzahl der Datenpunkte, die der Eingabe am ähnlichsten sind, zusammen mit ihrem Abstand im Einbettungsraum. Sie können diesen Datensatz verwenden, um weitere Filterungen vorzunehmen
ähnlich = exp.get_similar(idx=1, Grenze=10)
ähnlich.Kopf()
Sie können die ähnlichen Proben auch direkt mit der Funktion plot_similar
verwenden
exp.plot_similar(idx=6500, Grenze=20)
# exp.plot_similar(idx=[100,101], limit=10) # Kann auch eine Liste von idxs oder imgs übergeben
exp.plot_similar(
img="https://ultralytics.com/images/bus.jpg", Grenze=10, Beschriftungen=Falsch
) # Es können auch beliebige externe Bilder übergeben werden
2. 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 unterstützt wird, gelingt dies nicht immer. In diesem Fall gibt es keinen zurück.
df = exp.ask_ai("zeige mir Bilder, die mehr als 10 Objekte mit mindestens 2 Personen enthalten")
df.Kopf(5)
Für die Darstellung dieser Ergebnisse können Sie Folgendes verwenden plot_query_result
util
Beispiel:
plt = plot_query_result(exp.ask_ai("show me 10 images containing exactly 2 persons"))
Image.fromarray(plt)
# Plot
von PIL importieren Bild
von ultralytics.data.explorer importieren plot_query_result
plt = plot_query_result(exp.fragen_ai("zeige mir 10 Bilder, die genau 2 Personen enthalten"))
Bild.fromarray(plt)
3. Führen Sie SQL-Abfragen auf Ihrem Dataset aus!¶
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 man sich als eine Kurzabfrage vorstellen
- 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
Tabelle = exp.sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10")
Tabelle
Genau wie bei der Ähnlichkeitssuche können Sie auch die Sql-Abfragen direkt darstellen, indem Sie exp.plot_sql_query
exp.plot_sql_abfrage("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10", labels=True)
Tabelle = exp.Tabelle
Tabelle.schema
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
- Punkt Die Ähnlichkeitssuche von 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 für i in Bereich(256)]
Tabelle.Suche(dummy_img_embedding).Grenze(5).bis_pandas()
Interkonvertierung in gängige Datenformate¶
df = Tabelle.to_pandas()
pa_table = Tabelle.to_arrow()
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
importieren numpy as np
Einbettungen = Tabelle.to_pandas()["vector"].to_list()
Einbettungen = np.array(Einbettungen)
Scatterplot¶
Einer der ersten Schritte bei der Analyse von Einbettungen ist die Darstellung im 2D-Raum mittels Dimensionalitätsreduktion. Versuchen wir ein Beispiel
!pip installieren scikit-lernen --q
%matplotlib inline
importieren matplotlib.pyplot as plt
importieren numpy as np
von sklearn.dekomposition importieren PCA
# Reduzieren Sie die Dimensionen mit PCA auf 3 Komponenten für die Visualisierung in 3D.
pca = PCA(n_Komponenten=3)
reduzierte_Daten = pca.fit_transform(Einbettungen)
# Erstellen Sie ein 3D-Streudiagramm mit Axes3D von Matplotlib.
fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111, Projektion="3d")
# Streudiagramm
ax.Streuung(reduzierte_Daten[:, 0], reduced_data[:, 1], reduzierte_Daten[:, 2], alpha=0.5)
ax.set_title("3D-Streudiagramm von reduzierten 256-dimensionalen Daten (PCA)")
ax.set_xlabel("Komponente 1")
ax.set_ylabel("Komponente 2")
ax.set_zlabel("Komponente 3")
plt.anzeigen()
4. Ä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 näher liegen als
max_dist
zum aktuellen Bild im generierten Einbettungsraum unter Berücksichtigungtop_k
ähnliche Bilder zu einer Zeit.
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 eine Funktion zur direkten Darstellung. Schauen wir uns zunächst die Darstellung an
exp.plot_similarity_index(max_dist=0.2, top_k=0.01)
Schauen wir uns nun die Ausgabe der Operation an
importieren numpy as np
sim_idx = exp.ähnlichkeit_index(max_dist=0.2, top_k=0.01, Kraft=Falsch)
sim_idx
Erstellen wir eine Abfrage, um zu sehen, welche Datenpunkte eine Ähnlichkeitszahl von mehr als 30 haben, und zeichnen wir Bilder, die ihnen ähnlich sind.
importieren numpy as np
sim_count = np.Array(sim_idx["count"])
sim_idx["im_file"][sim_count > 30]
Sie sollten etwa Folgendes sehen
exp.plot_similar(idx=[7146, 14035]) # Durchschnittliche Einbettungen von 2 Bildern verwenden