Zum Inhalt springen

Ultralytics Explorer-API

Gemeinschaftsnote ⚠️

Ab dem ultralytics>=8.3.10Die 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!🚀

Einführung

In Colab öffnen Die Explorer API ist eine Python API für die Erkundung Ihrer Datensätze. Sie unterstützt das Filtern und Durchsuchen Ihres Datensatzes mithilfe von SQL-Abfragen, Vektorähnlichkeitssuche und semantischer Suche.



Beobachten: Ultralytics Explorer-API-Übersicht

Einrichtung

Der Explorer ist für einige seiner Funktionen auf externe Bibliotheken angewiesen. Diese werden bei der Verwendung automatisch installiert. Um diese Abhängigkeiten manuell zu installieren, verwenden Sie den folgenden Befehl:

pip install ultralytics[explorer]

Verwendung

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

Die Tabelle mit den Einbettungen für einen bestimmten Datensatz und ein bestimmtes Modellpaar wird nur einmal erstellt und wiederverwendet. Diese verwenden unter der Haube LanceDB, die auf der Festplatte skaliert, sodass Sie Einbettungen für große Datensätze wie COCO erstellen und wiederverwenden können, ohne dass der Speicherplatz knapp wird.

Falls Sie die Aktualisierung der Einbettungstabelle erzwingen wollen, können Sie 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

Die Ähnlichkeitssuche ist eine Technik zum Auffinden ähnlicher Bilder zu einem bestimmten Bild. Sie basiert auf der Idee, dass ähnliche Bilder auch ähnliche Einbettungen haben. Sobald die Einbettungstabelle erstellt ist, können Sie die semantische Suche auf eine der folgenden Arten durchführen:

  • Für einen bestimmten Index oder eine Liste von Indizes im Datensatz: exp.get_similar(idx=[1,10], limit=10)
  • Bei jedem Bild oder 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-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

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

Plotten ähnlicher Bilder

Sie können die ähnlichen Bilder auch mit der Funktion plot_similar Methode. Diese Methode nimmt die gleichen Argumente wie get_similar und stellt die ähnlichen Bilder in einem Raster dar.

Plotten ähnlicher Bilder

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. Ask AI (Abfrage in natürlicher Sprache)

So können Sie in natürlicher Sprache schreiben, wie Sie Ihren Datensatz filtern möchten. Sie müssen sich nicht mit dem Schreiben von SQL-Abfragen auskennen. Unser KI-gestützter Abfragegenerator erledigt das automatisch unter der Haube. Sie können zum Beispiel sagen: "Zeige mir 100 Bilder mit genau einer Person und 2 Hunden. Es kann auch andere Objekte geben", und es wird intern die Abfrage generieren und Ihnen die Ergebnisse zeigen. Hinweis: Dies funktioniert mit LLMs unter der Haube, so dass die Ergebnisse probabilistisch sind und manchmal falsch sein können.

Fragen Sie AI

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 zu Ihrem Datensatz mit der Funktion sql_query Methode. Diese Methode nimmt eine SQL-Abfrage als Eingabe 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 grafisch darstellen

Sie können die Ergebnisse einer SQL-Abfrage auch mit der Funktion plot_sql_query Methode. Diese Methode nimmt die gleichen Argumente wie sql_query und stellt die Ergebnisse in einem Raster dar.

SQL-Abfrageergebnisse grafisch darstellen

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 Einbettungstabelle

Sie können auch direkt mit der Einbettungstabelle arbeiten. Sobald die Einbettungstabelle erstellt ist, können Sie darauf mit der Funktion Explorer.table

Tipp

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.

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 erhalten

Beispiel

from ultralytics import Explorer

exp = Explorer()
exp.create_embeddings_table()
table = exp.table

embeddings = table.to_pandas()["vector"]
print(embeddings)

Erweiterte Abfragen mit Vor- und Nachfiltern

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 großen Datensätzen können Sie zur schnelleren Abfrage auch einen eigenen Vektorindex erstellen. Dies geschieht mit Hilfe der create_index Methode für die Tabelle LanceDB.

table.create_index(num_partitions=..., num_sub_vectors=...)

Weitere Details zu den verfügbaren Vektorindizes und Parametern finden Sie hier. In Zukunft werden wir Unterstützung für die Erstellung von Vektorindizes direkt aus der Explorer API hinzufügen.

5. Einbettungen Anwendungen

Mit Hilfe der Einbettungstabelle können Sie eine Vielzahl von explorativen Analysen durchführen. Hier sind einige Beispiele:

Ähnlichkeitsindex

Explorer wird mit einem 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ücksichtigung top_k ähnliche Bilder zu einer Zeit.

Sie gibt einen Pandas-Datenrahmen mit den folgenden Spalten zurück:

  • idx: Index des Bildes im Datensatz
  • im_file: Pfad zur Bilddatei
  • count: Anzahl der Bilder im Datensatz, die näher sind als max_dist zum aktuellen Bild
  • sim_im_files: Liste der Pfade zu den count ähnliche Bilder

Tipp

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.

Ähnlichkeitsindex

from ultralytics import Explorer

exp = Explorer()
exp.create_embeddings_table()

sim_idx = exp.similarity_index()

Sie können den Ähnlichkeitsindex verwenden, um benutzerdefinierte Bedingungen zum Herausfiltern des Datensatzes zu erstellen. Mit dem folgenden Code können Sie zum Beispiel Bilder herausfiltern, die keinem anderen Bild im Datensatz ähnlich sind:

import numpy as np

sim_count = np.array(sim_idx["count"])
sim_idx["im_file"][sim_count > 30]

Einbettungsraum visualisieren

Sie können den Einbettungsraum auch mit einem Diagrammwerkzeug Ihrer Wahl visualisieren. Hier zum Beispiel 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 Ihrer eigenen Berichte zur Erkundung von Lebenslaufdatensätzen mithilfe der Explorer-API. Inspiration finden Sie in der

Mit Ultralytics Explorer erstellte Anwendungen

Testen Sie unsere GUI-Demo auf Basis der Explorer API

Demnächst verfügbar

  • [ ] Bestimmte Beschriftungen aus Datensätzen zusammenführen. Beispiel - Alle importieren person Etiketten von COCO und car Etiketten von Cityscapes
  • [ ] Bilder mit einem höheren Ähnlichkeitsindex als dem angegebenen Schwellenwert entfernen
  • [ ] Neue Datensätze nach dem Zusammenführen/Entfernen von Einträgen automatisch beibehalten
  • Erweiterte Datensatz-Visualisierungen [ ]

FAQ

Wofür wird die Ultralytics Explorer API verwendet?

Die Ultralytics Explorer API ist für die umfassende Erforschung von Datensätzen konzipiert. Sie ermöglicht Benutzern das Filtern und Durchsuchen von Datensätzen mithilfe von SQL-Abfragen, Vektorähnlichkeitssuche und semantischer Suche. Diese leistungsstarke Python API kann große Datensätze verarbeiten und ist daher 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, verwenden Sie den folgenden Befehl:

pip install ultralytics[explorer]

Dadurch werden automatisch alle erforderlichen externen Bibliotheken für die Explorer-API-Funktionalität installiert. Weitere Einzelheiten zur Einrichtung finden Sie im Abschnitt zur Installation in unserer Dokumentation.

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 einfaches 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())

Weitere Einzelheiten finden Sie im Abschnitt Ähnlichkeitssuche.

Was sind die Vorteile der Verwendung von LanceDB mit Ultralytics Explorer?

LanceDB, das unter der Haube von Ultralytics Explorer verwendet wird, bietet skalierbare, auf der Festplatte gespeicherte Einbettungstabellen. Dadurch wird sichergestellt, dass Sie Einbettungen für große Datensätze wie COCO erstellen und wiederverwenden können, ohne dass Ihnen der Speicherplatz ausgeht. Diese Tabellen werden nur einmal erstellt und können wiederverwendet werden, was die Effizienz bei der Datenverarbeitung erhöht.

Wie funktioniert die Ask AI-Funktion in der Ultralytics Explorer API?

Mit der Funktion "Ask AI" können Nutzer Datensätze mithilfe von Abfragen in natürlicher Sprache filtern. Diese Funktion nutzt LLMs, um diese Abfragen hinter den Kulissen in SQL-Abfragen umzuwandeln. 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 in der Rubrik Ask AI.

📅 Erstellt vor 11 Monaten ✏️ Aktualisiert vor 1 Monat

Kommentare