Ultralytics Verkenner API
Inleiding
De Explorer API is een Python API voor het verkennen van je datasets. Het ondersteunt het filteren en doorzoeken van je dataset met SQL queries, vector similarity search en semantisch zoeken.
Kijken: Ultralytics Overzicht Explorer API
Installatie
Explorer is voor sommige functies afhankelijk van externe bibliotheken. Deze worden automatisch geïnstalleerd bij gebruik. Gebruik de volgende opdracht om deze afhankelijkheden handmatig te installeren:
Gebruik
from ultralytics import Explorer
# Create an Explorer object
explorer = Explorer(data='coco128.yaml', model='yolov8n.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)
Opmerking
De embeddingstabel voor een gegeven dataset en modelpaar wordt slechts eenmaal aangemaakt en hergebruikt. Deze gebruiken LanceDB onder de motorkap, die on-disk schaalt, zodat je embeddings kunt maken en hergebruiken voor grote datasets zoals COCO zonder dat het geheugen vol raakt.
Als je het bijwerken van de embeddingstabel wilt forceren, kun je het volgende doorgeven force=True
naar create_embeddings_table
methode.
Je hebt direct toegang tot het LanceDB tabelobject om geavanceerde analyses uit te voeren. Leer er meer over in de sectie Werken met Embeddings Tabel
1. Gelijkenis zoeken
Similarity search is een techniek om afbeeldingen te vinden die lijken op een gegeven afbeelding. Het is gebaseerd op het idee dat soortgelijke afbeeldingen soortgelijke inbeddingen hebben. Zodra de inbeddingstabel is opgebouwd, kun je op een van de volgende manieren semantisch zoeken:
- Op een gegeven index of lijst van indices in de dataset:
exp.get_similar(idx=[1,10], limit=10)
- Op elke afbeelding of lijst van afbeeldingen die niet in de dataset staat:
exp.get_similar(img=["path/to/img1", "path/to/img2"], limit=10)
Bij meerdere ingangen wordt het totaal van hun inbeddingen gebruikt.
Je krijgt een pandas dataframe met de limit
aantal gegevenspunten dat het meest lijkt op de invoer, samen met hun afstand in de inbeddingsruimte. Je kunt deze dataset gebruiken om verder te filteren
Semantisch zoeken
from ultralytics import Explorer
# create an Explorer object
exp = Explorer(data='coco128.yaml', model='yolov8n.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='yolov8n.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())
Gelijksoortige afbeeldingen plotten
Je kunt de vergelijkbare afbeeldingen ook plotten met de plot_similar
methode. Deze methode neemt dezelfde argumenten als get_similar
en plot de gelijksoortige afbeeldingen in een raster.
Gelijksoortige afbeeldingen plotten
2. Vraag AI (query's in natuurlijke taal)
Hiermee kun je in natuurlijke taal schrijven hoe je je dataset wilt filteren. Je hoeft niet bedreven te zijn in het schrijven van SQL queries. Onze AI-gestuurde query generator doet dat automatisch onder de motorkap. Je kunt bijvoorbeeld zeggen: "toon me 100 afbeeldingen met precies één persoon en 2 honden. Er kunnen ook andere objecten zijn" en het zal intern de query genereren en je die resultaten laten zien. Opmerking: Dit werkt met LLM's onder de motorkap, dus de resultaten zijn probabilistisch en kunnen soms verkeerd zijn.
Vraag AI
from ultralytics import Explorer
from ultralytics.data.explorer import plot_query_result
# create an Explorer object
exp = Explorer(data='coco128.yaml', model='yolov8n.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 opvragen
Je kunt SQL-query's uitvoeren op je dataset met de optie sql_query
methode. Deze methode neemt een SQL query als invoer en retourneert een pandas dataframe met de resultaten.
SQL-query
Resultaten van SQL-query's plotten
Je kunt de resultaten van een SQL-query ook plotten met de optie plot_sql_query
methode. Deze methode neemt dezelfde argumenten als sql_query
en zet de resultaten uit in een raster.
Resultaten van SQL-query's plotten
4. Werken met inbeddingstabel
Je kunt ook direct met de embeddingstabel werken. Zodra de embeddingstabel is aangemaakt, kun je deze openen met de Explorer.table
Verkenner werkt op LanceDB tabellen intern. Je kunt deze tabel direct openen met Explorer.table
object en voer ruwe queries uit, push pre- en postfilters, enzovoort.
Hier zijn enkele voorbeelden van wat je met de tabel kunt doen:
Ruwe inbeddingen krijgen
Voorbeeld
Geavanceerde query's met voor- en nafilters
Voorbeeld
Vectorindex maken
Als je grote datasets gebruikt, kun je ook een speciale vectorindex maken om sneller te kunnen zoeken. Dit wordt gedaan met de create_index
methode op LanceDB tabel.
Meer details over het type vectorindices dat beschikbaar is en de parameters vind je hier. In de toekomst zullen we ondersteuning toevoegen voor het direct maken van vectorindices vanuit Explorer API.
5. Inbeddingstoepassingen
Je kunt de inbeddingstabel gebruiken om verschillende verkennende analyses uit te voeren. Hier zijn enkele voorbeelden:
Gelijksoortigheidsindex
Explorer wordt geleverd met een similarity_index
werking:
- Het probeert in te schatten hoe vergelijkbaar elk gegevenspunt is met de rest van de dataset.
- Dat doet het door te tellen hoeveel beeldinbeddingen dichter bij elkaar liggen dan
max_dist
naar de huidige afbeelding in de gegenereerde inbeddingsruimte, rekening houdend mettop_k
gelijksoortige afbeeldingen per keer.
Het geeft een pandas dataframe met de volgende kolommen:
idx
: Index van de afbeelding in de datasetim_file
: Pad naar het afbeeldingsbestandcount
: Aantal afbeeldingen in de dataset die dichterbij zijn danmax_dist
naar de huidige afbeeldingsim_im_files
: Lijst met paden naar decount
soortgelijke beelden
Tip
Voor een gegeven dataset, model, max_dist
& top_k
de similariteitsindex die eenmaal is gegenereerd zal worden hergebruikt. In het geval dat je dataset is veranderd, of je gewoon de similariteitsindex opnieuw moet genereren, kun je het volgende doorgeven force=True
.
Gelijksoortigheidsindex
Je kunt de similariteitsindex gebruiken om aangepaste voorwaarden op te stellen om de dataset te filteren. Je kunt bijvoorbeeld afbeeldingen filteren die niet lijken op een andere afbeelding in de dataset met de volgende code:
Inbeddingsruimte visualiseren
Je kunt de inbeddingsruimte ook visualiseren met het plotprogramma van je keuze. Hier is bijvoorbeeld een eenvoudig voorbeeld met matplotlib:
import numpy as np
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# 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()
Begin met het maken van je eigen CV dataset verkenningsrapporten met behulp van de Explorer API. Bekijk voor inspiratie de
Apps gebouwd met Ultralytics Verkenner
Probeer onze GUI Demo gebaseerd op Explorer API
Binnenkort
- [Specifieke labels van datasets samenvoegen. Voorbeeld - Alles importeren
person
labels van COCO encar
labels van Stadsgezichten - [Beelden verwijderen die een hogere gelijkenisindex hebben dan de opgegeven drempel
- [Nieuwe datasets automatisch behouden na samenvoegen/verwijderen van items
- [Geavanceerde dataset visualisaties
Aangemaakt 2024-01-07, Bijgewerkt 2024-04-27
Auteurs: glenn-jocher (8), 0xSynapse (1), RizwanMunawar (2), AyushExel (2)