VOC Verkenning Voorbeeld¶
中文 | 한국어 | 日本語 | Русский | Deutsch | Français | Español | Português | हिन्दी | العربية
Welkom bij het Ultralytics Explorer API-notitieblok! Dit notitieblok dient als startpunt voor het verkennen van de verschillende bronnen die beschikbaar zijn om je te helpen aan de slag te gaan met Ultralytics om je datasets te verkennen met de kracht van semantisch zoeken. Je kunt out of the box hulpprogramma's gebruiken waarmee je specifieke typen labels kunt onderzoeken met behulp van vectorzoeken of zelfs SQL-query's.
We hopen dat de bronnen in dit notitieblok je zullen helpen om het meeste uit Ultralytics te halen. Blader alsjeblieft door de Explorer Docs voor meer informatie, maak een probleem aan op GitHub voor ondersteuning en sluit je aan bij onze Discord community voor vragen en discussies!
Probeer yolo explorer
aangedreven door Exlorer API
Gewoon pip install ultralytics
en ren yolo explorer
in je terminal om aangepaste query's en semantisch zoeken uit te voeren op je datasets in je browser!
Setup¶
Pip installeren ultralytics
en afhankelijkheden en controleer software en hardware.
%pip installeren ultralytics[verkenner] openai
importeer ultralytics
ultralytics.controles()
van ultralytics import Verkenner
Gelijkenis zoeken¶
Gebruik de kracht van het zoeken naar vectorovereenkomsten om de vergelijkbare gegevenspunten in je dataset te vinden, samen met hun afstand in de inbeddingsruimte. Maak eenvoudig een inbeddingstabel voor het gegeven dataset-modelpaar. Deze is maar één keer nodig en wordt automatisch hergebruikt.
exp = Verkenner("VOC.yaml", model="yolov8n.pt")
exp.maak_embeddings_tabel()
Als de embeddingstabel is opgebouwd, kun je op een van de volgende manieren semantisch zoeken:
- Op een gegeven index / lijst van indices in de dataset zoals -
exp.get_similar(idx=[1,10], limit=10)
- Op elke afbeelding/lijst van afbeeldingen die niet in de dataset staan - Op elke afbeelding/lijst van afbeeldingen die niet in de dataset staan.
exp.get_similar(img=["path/to/img1", "path/to/img2"], limit=10)
In het geval van meerdere ingangen wordt de aggregade 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
vergelijkbaar = exp.get_similar(idx=1, limiet=10)
vergelijkbaar.hoofd()
Je kunt de gelijksoortige monsters ook direct plotten met de plot_similar
util
exp.plot_gelijksoortig(idx=6500, limiet=20)
#exp.plot_similar(idx=[100,101], limit=10) # Kan ook lijst van idxen of imgs doorgeven
exp.plot_gelijksoortig(img="https://ultralytics.com/images/bus.jpg", beperken=10, labels=Onwaar) # Kan ook externe afbeeldingen doorgeven
2. Vraag AI: Zoeken of filteren met natuurlijke taal¶
Je kunt het Explorer object vragen om het soort gegevenspunten dat je wilt zien en het zal proberen een dataframe met die gegevenspunten terug te geven. Omdat het wordt aangedreven door LLM's, lukt dat niet altijd. In dat geval retourneert het geen.
df = exp.vraag_aai("toon me afbeeldingen met meer dan 10 objecten met ten minste 2 personen".)
df.kop(5)
Voor het plotten van deze resultaten kun je plot_query_result
util
Voorbeeld:
plt = plot_query_result(exp.ask_ai("show me 10 images containing exactly 2 persons"))
Image.fromarray(plt)
# plot
van ultralytics.data.explorer importeer plot_query_resultaat
uit PIL importeer Afbeelding
plt = plot_query_resultaat(exp.vraag_aai("toon me 10 afbeeldingen die precies 2 personen bevatten".))
Afbeelding.vanarray(plt)
3. Voer SQL-query's uit op je dataset!¶
Soms wil je een bepaald type invoer in je dataset onderzoeken. Hiervoor kun je in de Verkenner SQL-query's uitvoeren. Het accepteert beide formaten:
- Query's die beginnen met "WHERE" selecteren automatisch alle kolommen. Dit kun je zien als een korte query
- Je kunt ook volledige queries schrijven waarbij je kunt aangeven welke kolommen je wilt selecteren
Dit kan worden gebruikt om de prestaties van het model en specifieke gegevenspunten te onderzoeken. Bijvoorbeeld:
- Stel dat je model worstelt met afbeeldingen met mensen en honden. Je kunt een query als deze schrijven om de punten te selecteren met minstens 2 mensen EN minstens één hond.
Je kunt SQL query en semantisch zoeken combineren om te filteren op specifieke soorten resultaten
tabel = exp.sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10")
tabel
Net als bij het zoeken naar overeenkomsten, krijg je ook een hulpprogramma om de sql-query's direct uit te zetten met behulp van exp.plot_sql_query
exp.plot_sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10", labels=Waar)
tabel = exp.tabel
tabel.schema
Ruwe query's uitvoeren¶
Vector zoeken vindt de dichtstbijzijnde vectoren uit de database. In een aanbevelingssysteem of zoekmachine kun je soortgelijke producten vinden als degene die je hebt gezocht. In LLM en andere AI-toepassingen kan elk gegevenspunt worden voorgesteld door de inbeddingen die door sommige modellen worden gegenereerd.
Een zoekopdracht in een hoogdimensionale vectorruimte is het vinden van K-Nearest-Neighbors (KNN) van de zoekvector.
Metrisch In LanceDB is een Metric de manier om de afstand tussen een paar vectoren te beschrijven. Momenteel ondersteunt het de volgende metrieken:
- L2
- Cosinus
- Punt De similariteitszoekfunctie van Verkenner maakt standaard gebruik van L2. Je kunt direct queries uitvoeren op tabellen of het lance formaat gebruiken om aangepaste hulpprogramma's te bouwen om datasets te beheren. Meer details over beschikbare LanceDB tabel ops in de docs
dummy_afbeelding_opmaak = [i voor i in bereik(256)]
tabel.zoeken(dummy_afbeelding_afbeelding).beperken(5).naar_pandas()
Inter-conversie naar populaire gegevensindelingen¶
df = tabel.naar_pandas()
pa_tabel = tabel.naar_pijl()
Werken met Embeddings¶
Je hebt toegang tot de ruwe inbeddingen vanuit de Lancedb tabel en kunt deze analyseren. De beeldinbeddingen worden opgeslagen in kolom vector
importeer numpy als np
inbeddingen = tabel.naar_pandas()["vector"].toplijst()
inbeddingen = np.matrix(inbeddingen)
Scatterplot¶
Een van de voorbereidende stappen bij het analyseren van inbeddingen is het plotten in 2D ruimte via dimensionaliteitsreductie. Laten we een voorbeeld proberen
!pip installeren scikit-leren --q
%matplotlib inline
importeer numpy als np
van sklearn.decompositie importeer PCA
importeer matplotlib.pyplot als plt
uit mpl_toolkits.mplot3d importeer Assen3D
# Verminder dimensies met PCA tot 3 componenten voor visualisatie in 3D
pca = PCA(n_componenten=3)
gereduceerde_gegevens = pca.fit_transform(inbeddingen)
# Maak een 3D scatter plot met Matplotlib's Axes3D
fig = plt.figuur(figsize=(8, 6))
ax = fig.toevoegen_subplot(111, projectie='3d')
# spreidingsplot
ax.scatter(gereduceerde_gegevens[:, 0], gereduceerde_gegevens[:, 1], gereduceerde_gegevens[:, 2], alfa=0.5)
as.set_titel("3D-strooiplot van gereduceerde 256-dimensionale gegevens (PCA)".)
ax.set_xlabel('Component 1')
ax.set_ylabel("Component 2)
ax.set_zlabel("Component 3)
plt.tonen()
4. Gelijksoortigheidsindex¶
Hier is een eenvoudig voorbeeld van een bewerking die wordt aangedreven door de inbeddingstabel. 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.
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
.
Vergelijkbaar met vector en SQL zoeken, komt dit ook met een util om het direct te plotten. Laten we eerst de plot bekijken
exp.plot_gelijkenis_index(max_dist=0.2, top_k=0.01)
Laten we nu eens kijken naar de uitvoer van de bewerking
importeer numpy als np
sim_idx = exp.gelijkenis_index(max_dist=0.2, top_k=0.01, kracht=Fout)
sim_idx
Laten we een query maken om te zien welke gegevenspunten een similariteit van meer dan 30 hebben en afbeeldingen uitzetten die daarop lijken.
importeer numpy als np
sim_telling = np.matrix(sim_idx["count"])
sim_idx['im_bestand][sim_aantal > 30]
Je zou zoiets als dit moeten zien
exp.plot_gelijksoortig(idx=[7146, 14035]) # avg embeddings van 2 afbeeldingen gebruiken
Gemaakt op 2024-01-07, Bijgewerkt op 2024-01-25
Auteurs: RizwanMunawar (1), AyushExel (2), glenn-jocher (1)