Ultralytics Explorer API
Community-Hinweis ⚠️
Seit ultralytics>=8.3.10
wird die Unterstützung für Ultralytics Explorer nicht mehr angeboten. Aber keine Sorge! Sie können jetzt auf ähnliche und sogar erweiterte Funktionen über Ultralytics HUBzugreifen, unsere intuitive No-Code-Plattform, die Ihren Workflow optimieren soll. Mit Ultralytics HUB können Sie Ihre Daten weiterhin mühelos erkunden, visualisieren und verwalten, ohne eine einzige Zeile Code zu schreiben. Schauen Sie es sich unbedingt an und nutzen Sie die leistungsstarken Funktionen!🚀
Einführung
Die Explorer API ist eine Python API zum Erkunden Ihrer Datensätze. Sie unterstützt das Filtern und Durchsuchen Ihres Datensatzes mithilfe von SQL-Abfragen, Vektorähnlichkeitssuche und semantischer Suche.
Ansehen: Ultralytics Explorer API – Übersicht
Installation
Explorer ist für einige seiner Funktionen auf externe Bibliotheken angewiesen. Diese werden bei der Nutzung automatisch installiert. Um diese Abhängigkeiten manuell zu installieren, verwenden Sie den folgenden Befehl:
pip install ultralytics[explorer]
Nutzung
from ultralytics import Explorer
# Create an Explorer object
explorer = Explorer(data="coco128.yaml", model="yolo11n.pt")
# Create embeddings for your dataset
explorer.create_embeddings_table()
# Search for similar images to a given image/images
dataframe = explorer.get_similar(img="path/to/image.jpg")
# Or search for similar images to a given index/indices
dataframe = explorer.get_similar(idx=0)
Hinweis
Eine Embeddings-Tabelle für ein bestimmtes Datensatz- und Modellpaar wird nur einmal erstellt und wiederverwendet. Diese verwenden LanceDB im Hintergrund, das auf der Festplatte skaliert. So können Sie Embeddings für große Datensätze wie COCO erstellen und wiederverwenden, ohne dass der Speicherplatz knapp wird.
Falls Sie die Einbettungstabelle zwangsweise aktualisieren möchten, können Sie Folgendes übergeben: force=True
zu create_embeddings_table
Methode.
Sie können direkt auf das LanceDB-Tabellenobjekt zugreifen, um erweiterte Analysen durchzuführen. Erfahren Sie mehr darüber im Abschnitt Arbeiten mit Einbettungstabellen.
1. Ähnlichkeitssuche
Die Ähnlichkeitssuche ist eine Technik, um ähnliche Bilder zu einem gegebenen Bild zu finden. Sie basiert auf der Idee, dass ähnliche Bilder ähnliche Einbettungen haben. Sobald die Einbettungstabelle erstellt ist, können Sie die semantische Suche auf eine der folgenden Arten durchführen:
- Bei einem gegebenen Index oder einer Liste von Indizes im Datensatz:
exp.get_similar(idx=[1,10], limit=10)
- Auf einem beliebigen Bild oder einer 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-Dataframe mit den: limit
Anzahl der ähnlichsten Datenpunkte zur Eingabe, zusammen mit ihrer Distanz im Embedding-Raum. Sie können diesen Datensatz verwenden, um weitere Filterungen durchzuführen.
Semantische Suche
from ultralytics import Explorer
# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolo11n.pt")
exp.create_embeddings_table()
similar = exp.get_similar(img="https://ultralytics.com/images/bus.jpg", limit=10)
print(similar.head())
# Search using multiple indices
similar = exp.get_similar(
img=["https://ultralytics.com/images/bus.jpg", "https://ultralytics.com/images/bus.jpg"],
limit=10,
)
print(similar.head())
from ultralytics import Explorer
# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolo11n.pt")
exp.create_embeddings_table()
similar = exp.get_similar(idx=1, limit=10)
print(similar.head())
# Search using multiple indices
similar = exp.get_similar(idx=[1, 10], limit=10)
print(similar.head())
Ähnliche Bilder plotten
Sie können auch die ähnlichen Bilder mit dem folgenden Diagramm darstellen: plot_similar
Methode. Diese Methode akzeptiert die gleichen Argumente wie get_similar
und stellt die ähnlichen Bilder in einem Raster dar.
Ähnliche Bilder plotten
from ultralytics import Explorer
# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolo11n.pt")
exp.create_embeddings_table()
plt = exp.plot_similar(img="https://ultralytics.com/images/bus.jpg", limit=10)
plt.show()
from ultralytics import Explorer
# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolo11n.pt")
exp.create_embeddings_table()
plt = exp.plot_similar(idx=1, limit=10)
plt.show()
2. KI befragen (Abfrage in natürlicher Sprache)
Dies ermöglicht es Ihnen, mit natürlicher Sprache zu schreiben, wie Sie Ihren Datensatz filtern möchten. Sie müssen keine SQL-Abfragen schreiben können. Unser KI-gestützter Abfragegenerator erledigt das automatisch im Hintergrund. Zum Beispiel können Sie sagen: "Zeige mir 100 Bilder mit genau einer Person und 2 Hunden. Es können auch andere Objekte vorhanden sein", und es wird intern die Abfrage generiert und Ihnen diese Ergebnisse angezeigt. Hinweis: Dies funktioniert mit LLMs im Hintergrund, daher sind die Ergebnisse probabilistisch und können manchmal falsch sein.
KI fragen
from ultralytics import Explorer
from ultralytics.data.explorer import plot_query_result
# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolo11n.pt")
exp.create_embeddings_table()
df = exp.ask_ai("show me 100 images with exactly one person and 2 dogs. There can be other objects too")
print(df.head())
# plot the results
plt = plot_query_result(df)
plt.show()
3. SQL-Abfragen
Sie können SQL-Abfragen für Ihren Datensatz mit dem folgenden Tool ausführen: sql_query
Methode. Diese Methode nimmt eine SQL-Abfrage als Eingabe entgegen und gibt einen Pandas-Datenrahmen mit den Ergebnissen zurück.
SQL-Abfrage
from ultralytics import Explorer
# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolo11n.pt")
exp.create_embeddings_table()
df = exp.sql_query("WHERE labels LIKE '%person%' AND labels LIKE '%dog%'")
print(df.head())
SQL-Abfrageergebnisse plotten
Sie können die Ergebnisse einer SQL-Abfrage auch mit dem folgenden Diagramm darstellen: plot_sql_query
Methode. Diese Methode akzeptiert die gleichen Argumente wie sql_query
und stellt die Ergebnisse in einem Raster dar.
SQL-Abfrageergebnisse plotten
from ultralytics import Explorer
# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolo11n.pt")
exp.create_embeddings_table()
# plot the SQL Query
exp.plot_sql_query("WHERE labels LIKE '%person%' AND labels LIKE '%dog%' LIMIT 10")
4. Arbeiten mit der Einbettungstabelle
Sie können auch direkt mit der Embedding-Tabelle arbeiten. Sobald die Embedding-Tabelle erstellt wurde, können Sie über die folgenden Möglichkeiten darauf zugreifen: Explorer.table
Tipp
Explorer funktioniert mit LanceDB Tabellen intern. Sie können direkt auf diese Tabelle zugreifen, indem Sie Explorer.table
Objekte abfragen und Rohabfragen ausführen, Pre- und Post-Filter nach unten verschieben usw.
from ultralytics import Explorer
exp = Explorer()
exp.create_embeddings_table()
table = exp.table
Hier sind einige Beispiele dafür, was Sie mit der Tabelle machen können:
Rohe Einbettungen abrufen
Beispiel
from ultralytics import Explorer
exp = Explorer()
exp.create_embeddings_table()
table = exp.table
embeddings = table.to_pandas()["vector"]
print(embeddings)
Erweiterte Abfrage mit Pre- und Post-Filtern
Beispiel
from ultralytics import Explorer
exp = Explorer(model="yolo11n.pt")
exp.create_embeddings_table()
table = exp.table
# Dummy embedding
embedding = [i for i in range(256)]
rs = table.search(embedding).metric("cosine").where("").limit(10)
Vektorindex erstellen
Bei Verwendung großer Datensätze können Sie auch einen dedizierten Vektorindex für schnellere Abfragen erstellen. Dies geschieht mit dem create_index
Methode auf der LanceDB-Tabelle.
table.create_index(num_partitions=..., num_sub_vectors=...)
Weitere Informationen zu den verfügbaren Vektorindextypen und Konfigurationsparametern finden Sie in der LanceDB-Indexierungsdokumentation. In Zukunft planen wir, die Erstellung von Vektorindizes direkt über die Explorer-API zu unterstützen.
5. Anwendungen für Einbettungen
Sie können die Einbettungstabelle verwenden, um eine Vielzahl explorativer Analysen durchzuführen. Hier sind einige Beispiele:
Ähnlichkeitsindex
Explorer kommt mit einem similarity_index
Operation:
- Es versucht abzuschätzen, wie ähnlich jeder Datenpunkt dem Rest des Datensatzes ist.
- Es tut dies, indem es zählt, wie viele Image-Embeddings näher als
max_dist
zum aktuellen Bild im generierten Embedding-Raum, unter Berücksichtigung vontop_k
ähnliche Bilder gleichzeitig.
Es gibt einen Pandas-Dataframe mit den folgenden Spalten zurück:
idx
: Index des Bildes im Datensatzim_file
: Pfad zur Bilddateicount
: Anzahl der Bilder im Datensatz, die näher alsmax_dist
zum aktuellen Bildsim_im_files
: Liste der Pfade zu dencount
ähnliche Bilder
Tipp
Für einen bestimmten Datensatz, ein Modell, max_dist
& top_k
Der einmal generierte Ähnlichkeitsindex wird wiederverwendet. Falls sich Ihr Datensatz geändert hat oder Sie den Ähnlichkeitsindex einfach neu generieren müssen, können Sie Folgendes übergeben force=True
.
Ähnlichkeitsindex
from ultralytics import Explorer
exp = Explorer()
exp.create_embeddings_table()
sim_idx = exp.similarity_index()
Sie können einen Ähnlichkeitsindex verwenden, um benutzerdefinierte Bedingungen zum Filtern des Datensatzes zu erstellen. Sie können beispielsweise Bilder herausfiltern, die keinem anderen Bild im Datensatz ähneln, indem Sie den folgenden Code verwenden:
import numpy as np
sim_count = np.array(sim_idx["count"])
sim_idx["im_file"][sim_count > 30]
Embedding-Raum visualisieren
Sie können den Embedding-Raum auch mit dem Plotting-Tool Ihrer Wahl visualisieren. Hier ist beispielsweise ein einfaches Beispiel mit Matplotlib:
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
# 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 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()
Beginnen Sie mit der Erstellung eigener Berichte zur CV-Datensatzexploration mithilfe der Explorer-API. Zur Inspiration können Sie sich das VOC Exploration Example ansehen.
Apps, die mit Ultralytics Explorer erstellt wurden
Probieren Sie unsere GUI-Demo basierend auf der Explorer-API aus
Kommt bald
- [ ] Spezifische Beschriftungen aus Datensätzen zusammenführen. Beispiel: Alle importieren
person
Beschriftungen von COCO undcar
Beschriftungen von Cityscapes - [ ] Bilder entfernen, die einen höheren Ähnlichkeitsindex als den angegebenen Schwellenwert aufweisen
- [ ] Neue Datensätze nach dem Zusammenführen/Entfernen von Einträgen automatisch speichern
- [ ] Erweiterte Datensatzvisualisierungen
FAQ
Wofür wird die Ultralytics Explorer API verwendet?
Die Ultralytics Explorer API ist für die umfassende Erkundung von Datensätzen konzipiert. Sie ermöglicht es Benutzern, Datensätze mithilfe von SQL-Abfragen, Vektorähnlichkeitssuche und semantischer Suche zu filtern und zu durchsuchen. Diese leistungsstarke python API kann große Datensätze verarbeiten und ist somit ideal für verschiedene Computer-Vision-Aufgaben mit Ultralytics-Modellen.
Wie installiere ich die Ultralytics Explorer API?
Um die Ultralytics Explorer API zusammen mit ihren Abhängigkeiten zu installieren, verwende den folgenden Befehl:
pip install ultralytics[explorer]
Dadurch werden automatisch alle erforderlichen externen Bibliotheken für die Explorer API-Funktionalität installiert. Weitere Details zur Einrichtung finden Sie im Installationsabschnitt unserer Dokumentation.
Wie kann ich die Ultralytics Explorer API für die Ähnlichkeitssuche verwenden?
Sie können die Ultralytics Explorer API verwenden, um Ähnlichkeitssuchen durchzuführen, indem Sie eine Einbettungstabelle erstellen und diese nach ähnlichen Bildern abfragen. Hier ist ein grundlegendes Beispiel:
from ultralytics import Explorer
# Create an Explorer object
explorer = Explorer(data="coco128.yaml", model="yolo11n.pt")
explorer.create_embeddings_table()
# Search for similar images to a given image
similar_images_df = explorer.get_similar(img="path/to/image.jpg")
print(similar_images_df.head())
Für weitere Details besuchen Sie bitte den Abschnitt Ähnlichkeitssuche.
Welche Vorteile bietet die Verwendung von LanceDB mit Ultralytics Explorer?
LanceDB, das von Ultralytics Explorer im Hintergrund verwendet wird, bietet skalierbare, On-Disk-Embedding-Tabellen. Dies stellt sicher, dass Sie Embeddings für große Datensätze wie COCO erstellen und wiederverwenden können, ohne dass der Speicherplatz knapp wird. Diese Tabellen werden nur einmal erstellt und können wiederverwendet werden, was die Effizienz bei der Datenverarbeitung erhöht.
Wie funktioniert die Funktion "Ask AI" in der Ultralytics Explorer API?
Die Funktion "Ask AI" ermöglicht es Benutzern, Datensätze mithilfe von natürlichsprachlichen Abfragen zu filtern. Diese Funktion nutzt LLMs, um diese Abfragen im Hintergrund in SQL-Abfragen zu konvertieren. Hier ist ein Beispiel:
from ultralytics import Explorer
# Create an Explorer object
explorer = Explorer(data="coco128.yaml", model="yolo11n.pt")
explorer.create_embeddings_table()
# Query with natural language
query_result = explorer.ask_ai("show me 100 images with exactly one person and 2 dogs. There can be other objects too")
print(query_result.head())
Weitere Beispiele finden Sie im Abschnitt Ask AI section.