Zum Inhalt springen

Ultralytics Explorer API

Community-Hinweis ⚠️

Seit ultralytics>=8.3.10wird 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

In Colab öffnen 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.

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 von top_k ähnliche Bilder gleichzeitig.

Es gibt einen Pandas-Dataframe 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 als max_dist zum aktuellen Bild
  • sim_im_files: Liste der Pfade zu den count ä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 und car 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.

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.



📅 Erstellt vor 1 Jahr ✏️ Aktualisiert vor 4 Monaten

Kommentare