Exemple d'exploration des COV
äžæ | íê”ìŽ | æ„æŹèȘ | Đ ŃŃŃĐșĐžĐč | Deutsch | Français | Español | PortuguĂȘs | à€čà€żà€šà„à€Šà„ | ۧÙŰč۱ۚÙŰ©
Bienvenue dans le carnet de l'API Ultralytics Explorer ! Ce carnet sert de point de dĂ©part Ă l'exploration des diffĂ©rentes ressources disponibles pour t'aider Ă commencer Ă utiliser Ultralytics pour explorer tes ensembles de donnĂ©es en utilisant la puissance de la recherche sĂ©mantique. Tu peux utiliser des utilitaires prĂȘts Ă l'emploi qui te permettent d'examiner des types spĂ©cifiques d'Ă©tiquettes en utilisant la recherche vectorielle ou mĂȘme des requĂȘtes SQL.
Nous espérons que les ressources de ce carnet t'aideront à tirer le meilleur parti de Ultralytics. N'hésite pas à parcourir les Explorer Docs pour plus de détails, à soulever un problÚme sur GitHub pour obtenir de l'aide, et à rejoindre notre communauté Discord pour poser des questions et discuter !
Essaie yolo explorer
alimenté par Exlorer API
Simplement pip install ultralytics
et exécute yolo explorer
dans ton terminal pour exĂ©cuter des requĂȘtes personnalisĂ©es et des recherches sĂ©mantiques sur tes ensembles de donnĂ©es directement dans ton navigateur !
Mise en place
Pip installer ultralytics
et dépendances et vérifie les logiciels et le matériel.
%pip installer ultralytics[explorateur] openai
importer ultralytics
ultralytics.vérifications()
de ultralytics l'importation Explorer
Recherche de similitude¶
Utilise la puissance de la recherche de similarité vectorielle pour trouver les points de données similaires dans ton ensemble de données ainsi que leur distance dans l'espace d'intégration. Il suffit de créer une table d'intégration pour la paire donnée ensemble de données-modÚle. Elle n'est nécessaire qu'une seule fois et est réutilisée automatiquement.
exp = Explorateur("VOC.yaml", modĂšle="yolov8n.pt")
exp.create_embeddings_table()
Une fois que la table d'intégration est construite, tu peux lancer une recherche sémantique de l'une des façons suivantes :
- Sur un index donné / une liste d'index dans le jeu de données comme -
exp.get_similar(idx=[1,10], limit=10)
- Sur toute image/liste d'images ne figurant pas dans l'ensemble de données -
exp.get_similar(img=["path/to/img1", "path/to/img2"], limit=10)
En cas d'entrées multiples, c'est l'agrégat de leur intégration qui est utilisé.
Tu obtiens un cadre de données pandas avec l'attribut limit
le nombre de points de données les plus similaires à l'entrée, ainsi que leur distance dans l'espace d'intégration. Tu peux utiliser cet ensemble de données pour effectuer d'autres filtrages
similaires = exp.get_similar(idx=1, limite=10)
similaire.tĂȘte()
Tu peux aussi tracer les Ă©chantillons similaires directement Ă l'aide de la fonction plot_similar
util
exp.plot_similar(idx=6500, limit=20)
#exp.plot_similar(idx=[100,101], limit=10) # Peut aussi passer une liste d'idxs ou d'imgs
exp.plot_similar(img="https://ultralytics.com/images/bus.jpg", limite=10, Ă©tiquettes=Faux) # Peut aussi passer des images externes
2. Ask AI : Rechercher ou filtrer avec le langage naturel¶
Tu peux demander à l'objet Explorateur le type de points de données que tu veux voir et il essaiera de renvoyer un cadre de données avec ces points. Comme il est alimenté par des LLM, il n'y parvient pas toujours. Dans ce cas, il renverra None.
df = exp.ask_ai("montre-moi des images contenant plus de 10 objets avec au moins 2 personnes")
df.head(5)
Pour tracer ces résultats, tu peux utiliser plot_query_result
util
Exemple :
plt = plot_query_result(exp.ask_ai("show me 10 images containing exactly 2 persons"))
Image.fromarray(plt)
# tracé
Ă partir de ultralytics.data.explorer import rĂ©sultat_de_la_requĂȘte_de_l'intrigue
de PIL import Image
plt = rĂ©sultat_de_la_requĂȘte_de_l'intrigue(exp.ask_ai("montre-moi 10 images contenant exactement 2 personnes"))
Image.fromarray(plt)
3. ExĂ©cute des requĂȘtes SQL sur ton jeu de donnĂ©es!¶
Il peut arriver que tu veuilles enquĂȘter sur un certain type d'entrĂ©es dans ton ensemble de donnĂ©es. Pour cela, Explorer te permet d'exĂ©cuter des requĂȘtes SQL. Il accepte l'un ou l'autre des formats :
- Les requĂȘtes commençant par "WHERE" sĂ©lectionneront automatiquement toutes les colonnes. On peut considĂ©rer qu'il s'agit d'une requĂȘte abrĂ©gĂ©e
- Tu peux aussi Ă©crire des requĂȘtes complĂštes dans lesquelles tu peux spĂ©cifier les colonnes Ă sĂ©lectionner
Cela peut ĂȘtre utilisĂ© pour Ă©tudier les performances du modĂšle et des points de donnĂ©es spĂ©cifiques. Par exemple :
- Disons que ton modĂšle se bat sur des images oĂč il y a des humains et des chiens. Tu peux Ă©crire une requĂȘte comme celle-ci pour sĂ©lectionner les points qui ont au moins 2 humains ET au moins un chien.
Tu peux combiner une requĂȘte SQL et une recherche sĂ©mantique pour filtrer les rĂ©sultats d'un type spĂ©cifique.
table = exp.sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10")
table
Tout comme la recherche par similaritĂ©, tu disposes Ă©galement d'un util pour tracer directement les requĂȘtes SQL Ă l'aide de exp.plot_sql_query
exp.plot_sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10", Ă©tiquettes=Vrai)
table = exp.table
table.schéma
ExĂ©cute les requĂȘtes brutes¶
La recherche de vecteurs trouve les vecteurs les plus proches dans la base de donnĂ©es. Dans un systĂšme de recommandation ou un moteur de recherche, tu peux trouver des produits similaires Ă celui que tu as recherchĂ©. Dans le LLM et d'autres applications d'IA, chaque point de donnĂ©es peut ĂȘtre prĂ©sentĂ© par les embeddings gĂ©nĂ©rĂ©s Ă partir de certains modĂšles, il renvoie les caractĂ©ristiques les plus pertinentes.
Une recherche dans un espace vectoriel Ă haute dimension consiste Ă trouver les K-voisins les plus proches (KNN) du vecteur de la requĂȘte.
Métrique Dans LanceDB, une métrique est la façon de décrire la distance entre une paire de vecteurs. Actuellement, les métriques suivantes sont prises en charge :
- L2
- Cosinus
- Point La recherche de similaritĂ©s de l'explorateur utilise L2 par dĂ©faut. Tu peux exĂ©cuter des requĂȘtes sur les tables directement, ou utiliser le format lance pour crĂ©er des utilitaires personnalisĂ©s pour gĂ©rer les ensembles de donnĂ©es. Plus de dĂ©tails sur les opĂ©rations de table LanceDB disponibles dans la documentation.
image fictive_embedding = [i pour i dans plage(256)]
table.recherche(dummy_img_embedding).limite(5).to_pandas()
Interconversion vers les formats de données les plus courants¶
df = table.to_pandas()
pa_table = table.to_arrow()
Travailler avec Embeddings¶
Tu peux accéder à l'intégration brute à partir de la table lancedb et l'analyser. Les incrustations d'images sont stockées dans la colonne vector
importer numpy comme np
enchĂąssements = table.to_pandas()["vecteur"].tolist()
encastrements = np.array(enchĂąssements)
Diagramme de dispersion¶
L'une des étapes préliminaires de l'analyse des embeddings consiste à les représenter dans l'espace 2D par le biais de la réduction de la dimensionnalité. Prenons un exemple
!pip installe scikit-apprendre --q
%matplotlib en ligne
importer numpy comme np
Ă partir de sklearn.decomposition importer PCA
import matplotlib.pyplot en tant que plt
Ă partir de mpl_toolkits.mplot3d importer Axes3D
# RĂ©duit les dimensions Ă l'aide de l'ACP Ă 3 composantes pour la visualisation en 3D
pca = PCA(n_composantes=3)
données_réduites = pca.fit_transform(enchùssements)
# Crée un nuage de points en 3D à l'aide de Axes3D de Matplotlib
fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111, projection='3d')
# Diagramme de dispersion
ax.scatter(données_réduites[ :, 0], données_réduites[ :, 1], données_réduites[ :, 2], alpha=0.5)
ax.set_title('Diagramme de dispersion 3D des données réduites à 256 dimensions (ACP)')
ax.set_xlabel('Composant 1')
ax.set_ylabel('Composant 2')
ax.set_zlabel('Composant 3')
plt.montrer()
4. Indice de similitude
Voici un exemple simple d'une opération alimentée par le tableau des incorporations. Explorer est livré avec un similarity_index
fonctionnement-
- Il tente d'estimer le degré de similitude de chaque point de données avec le reste de l'ensemble de données.
- Pour ce faire, il compte le nombre d'images intégrées qui sont plus proches que
max_dist
à l'image actuelle dans l'espace d'intégration généré, en considérant quetop_k
des images similaires Ă la fois.
Pour un ensemble de données donné, le modÚle, max_dist
& top_k
l'index de similarité une fois généré sera réutilisé. Si ton jeu de données a changé, ou si tu as simplement besoin de régénérer l'indice de similarité, tu peux passer le paramÚtre force=True
.
Tout comme la recherche vectorielle et la recherche SQL, cette recherche est également accompagnée d'un util permettant de la tracer directement. Examinons d'abord le tracé
exp.plot_similarity_index(max_dist=0.2, top_k=0.01)
Regardons maintenant le résultat de l'opération.
importer numpy comme np
sim_idx = exp.indice_de_similitude(max_dist=0.2, top_k=0.01, force=Faux)
sim_idx
CrĂ©ons une requĂȘte pour voir quels sont les points de donnĂ©es dont le nombre de similitudes est supĂ©rieur Ă 30 et traçons les images qui leur sont similaires.
importer numpy comme np
sim_count = np.array(sim_idx["count"])
sim_idx['im_file'][sim_count > 30]
Tu devrais voir quelque chose comme ceci
exp.plot_similar(idx=[7146, 14035]) # Utilisation de l'intégration moyenne de 2 images
Créé le 2024-01-07, Mis à jour le 2024-01-25
Auteurs : RizwanMunawar (1), AyushExel (2), glenn-jocher (1)