सामग्री पर जाएं

Ultralytics एक्सप्लोरर एपीआई

परिचय

Colab में खोलें एक्सप्लोरर एपीआई एक है Python अपने डेटासेट की खोज के लिए एपीआई। यह SQL क्वेरीज़, वेक्टर समानता खोज और सिमेंटिक खोज का उपयोग करके आपके डेटासेट को फ़िल्टर करने और खोजने का समर्थन करता है।



सतर्कता: Ultralytics एक्सप्लोरर एपीआई अवलोकन

संस्थापन

एक्सप्लोरर अपनी कुछ कार्यक्षमता के लिए बाहरी पुस्तकालयों पर निर्भर करता है। ये स्वचालित रूप से उपयोग पर स्थापित होते हैं। इन निर्भरताओं को मैन्युअल रूप से स्थापित करने के लिए, निम्न आदेश का उपयोग करें:

pip install ultralytics[explorer]

उपयोग

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)

नोट

किसी दिए गए डेटासेट और मॉडल जोड़ी के लिए एम्बेडिंग तालिका केवल एक बार बनाई जाती है और पुन: उपयोग की जाती है। ये हुड के नीचे लांसडीबी का उपयोग करते हैं, जो ऑन-डिस्क को स्केल करता है, इसलिए आप मेमोरी से बाहर चलने के बिना सीओसीओ जैसे बड़े डेटासेट के लिए एम्बेडिंग बना और पुन: उपयोग कर सकते हैं।

यदि आप एम्बेडिंग तालिका को अपडेट करने के लिए बाध्य करना चाहते हैं, तो आप पास कर सकते हैं force=True तक create_embeddings_table विधि।

उन्नत विश्लेषण करने के लिए आप सीधे लांसडीबी तालिका ऑब्जेक्ट तक पहुंच सकते हैं। एम्बेडिंग तालिका अनुभाग के साथ कार्य करना में इसके बारे में अधिक जानें

समानता खोज किसी दिए गए छवि के समान छवियों को खोजने की एक तकनीक है। यह इस विचार पर आधारित है कि समान छवियों में समान एम्बेडिंग होगी। एक बार एम्बेडिंग टेबल बन जाने के बाद, आप निम्न में से किसी भी तरीके से सिमेंटिक खोज चला सकते हैं:

  • डेटासेट में दिए गए सूचकांक या सूचकांकों की सूची पर: exp.get_similar(idx=[1,10], limit=10)
  • किसी भी छवि या छवियों की सूची पर जो डेटासेट में नहीं हैं: exp.get_similar(img=["path/to/img1", "path/to/img2"], limit=10)

कई इनपुट के मामले में, उनके एम्बेडिंग के कुल योग का उपयोग किया जाता है।

आपको एक पांडा डेटाफ्रेम मिलता है limit अधिकांश समान डेटा की संख्या इनपुट को इंगित करती है, साथ ही एम्बेडिंग स्पेस में उनकी दूरी के साथ। आप आगे फ़िल्टरिंग करने के लिए इस डेटासेट का उपयोग कर सकते हैं

सिमेंटिक खोज

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

समान छवियों को प्लॉट करना

आप का उपयोग करके समान छवियों को भी प्लॉट कर सकते हैं plot_similar विधि। यह विधि समान तर्क लेती है get_similar और एक ग्रिड में समान छवियों को प्लॉट करता है।

समान छवियों को प्लॉट करना

from ultralytics import Explorer

# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolov8n.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="yolov8n.pt")
exp.create_embeddings_table()

plt = exp.plot_similar(idx=1, limit=10)
plt.show()

2. एआई से पूछें (प्राकृतिक भाषा पूछताछ)

यह आपको यह लिखने की अनुमति देता है कि आप प्राकृतिक भाषा का उपयोग करके अपने डेटासेट को कैसे फ़िल्टर करना चाहते हैं। आपको SQL प्रश्नों को लिखने में कुशल होने की आवश्यकता नहीं है। हमारा एआई संचालित क्वेरी जनरेटर स्वचालित रूप से हुड के नीचे ऐसा करेगा। उदाहरण के लिए - आप कह सकते हैं - "मुझे बिल्कुल एक व्यक्ति और 2 कुत्तों के साथ 100 चित्र दिखाएं। अन्य ऑब्जेक्ट भी हो सकते हैं" और यह आंतरिक रूप से क्वेरी उत्पन्न करेगा और आपको उन परिणामों को दिखाएगा। नोट: यह हुड के नीचे एलएलएम का उपयोग करके काम करता है इसलिए परिणाम संभाव्य हैं और कभी-कभी चीजें गलत हो सकती हैं

एआई से पूछें

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 क्वेरी करना

आप का उपयोग करके अपने डेटासेट पर SQL क्वेरी चला सकते हैं sql_query विधि। यह विधि इनपुट के रूप में एक SQL क्वेरी लेती है और परिणामों के साथ एक पांडा डेटाफ्रेम लौटाती है।

SQL क्वेरी

from ultralytics import Explorer

# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolov8n.pt")
exp.create_embeddings_table()

df = exp.sql_query("WHERE labels LIKE '%person%' AND labels LIKE '%dog%'")
print(df.head())

SQL क्वेरी परिणाम प्लॉटिंग

आप का उपयोग करके SQL क्वेरी के परिणामों को भी प्लॉट कर सकते हैं plot_sql_query विधि। यह विधि समान तर्क लेती है sql_query और परिणामों को ग्रिड में प्लॉट करता है।

SQL क्वेरी परिणाम प्लॉटिंग

from ultralytics import Explorer

# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolov8n.pt")
exp.create_embeddings_table()

# plot the SQL Query
exp.plot_sql_query("WHERE labels LIKE '%person%' AND labels LIKE '%dog%' LIMIT 10")

4. एम्बेडिंग टेबल के साथ काम करना

आप सीधे एम्बेडिंग टेबल के साथ भी काम कर सकते हैं। एक बार एम्बेडिंग टेबल बन जाने के बाद, आप इसका उपयोग करके इसे एक्सेस कर सकते हैं Explorer.table

एक्सप्लोरर पर काम करता है लांसडीबी आंतरिक रूप से तालिकाएँ। आप का उपयोग कर सीधे इस तालिका तक पहुँच सकते हैं Explorer.table ऑब्जेक्ट करें और कच्चे प्रश्नों को चलाएं, पूर्व और बाद के फ़िल्टर आदि को नीचे धकेलें।

from ultralytics import Explorer

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

यहां कुछ उदाहरण दिए गए हैं कि आप तालिका के साथ क्या कर सकते हैं:

कच्चे एम्बेडिंग प्राप्त करें

उदाहरण

from ultralytics import Explorer

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

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

पूर्व और बाद के फ़िल्टर के साथ उन्नत क्वेरी

उदाहरण

from ultralytics import Explorer

exp = Explorer(model="yolov8n.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)

वेक्टर इंडेक्स बनाएं

बड़े डेटासेट का उपयोग करते समय, आप तेजी से क्वेरी करने के लिए एक समर्पित वेक्टर इंडेक्स भी बना सकते हैं। यह का उपयोग करके किया जाता है create_index लांसडीबी टेबल पर विधि।

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

उपलब्ध प्रकार वेक्टर सूचकांकों और मापदंडों के बारे में अधिक जानकारी यहां प्राप्त करें भविष्य में, हम एक्सप्लोरर एपीआई से सीधे वेक्टर इंडेक्स बनाने के लिए समर्थन जोड़ देंगे।

5. एम्बेडिंग एप्लिकेशन

आप विभिन्न प्रकार के खोजपूर्ण विश्लेषण करने के लिए एम्बेडिंग तालिका का उपयोग कर सकते हैं। यहां कुछ उदाहरण दिए गए हैं:

समानता सूचकांक

एक्सप्लोरर एक के साथ आता है similarity_index परिचालन:

  • यह अनुमान लगाने की कोशिश करता है कि शेष डेटासेट के साथ प्रत्येक डेटा बिंदु कितना समान है।
  • यह गिनती करके करता है कि कितने छवि एम्बेडिंग करीब झूठ बोलते हैं max_dist उत्पन्न एम्बेडिंग स्थान में वर्तमान छवि के लिए, विचार करते हुए top_k एक समय में इसी तरह की छवियां।

यह निम्नलिखित कॉलम के साथ एक पांडा डेटाफ्रेम देता है:

  • idx: डेटासेट में छवि का सूचकांक
  • im_file: छवि फ़ाइल के लिए पथ
  • count: डेटासेट में छवियों की संख्या जो इससे करीब हैं max_dist वर्तमान छवि के लिए
  • sim_im_files: पथों की सूची count इसी तरह के चित्र

नोक

किसी दिए गए डेटासेट के लिए, मॉडल, max_dist & top_k एक बार उत्पन्न समानता सूचकांक का पुन: उपयोग किया जाएगा। यदि आपका डेटासेट बदल गया है, या आपको बस समानता सूचकांक को पुन: उत्पन्न करने की आवश्यकता है, तो आप पास कर सकते हैं force=True.

समानता सूचकांक

from ultralytics import Explorer

exp = Explorer()
exp.create_embeddings_table()

sim_idx = exp.similarity_index()

आप डेटासेट को फ़िल्टर करने के लिए कस्टम स्थितियां बनाने के लिए समानता सूचकांक का उपयोग कर सकते हैं। उदाहरण के लिए, आप निम्न कोड का उपयोग करके उन छवियों को फ़िल्टर कर सकते हैं जो डेटासेट में किसी अन्य छवि के समान नहीं हैं:

import numpy as np

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

एम्बेडिंग स्पेस विज़ुअलाइज़ करें

आप अपनी पसंद के प्लॉटिंग टूल का उपयोग करके एम्बेडिंग स्पेस की कल्पना भी कर सकते हैं। उदाहरण के लिए, यहाँ 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()

एक्सप्लोरर एपीआई का उपयोग करके अपनी स्वयं की सीवी डेटासेट अन्वेषण रिपोर्ट बनाना शुरू करें। प्रेरणा के लिए, देखें

का उपयोग कर बनाया क्षुधा Ultralytics खोजयात्री

एक्सप्लोरर एपीआई के आधार पर हमारे जीयूआई डेमो का प्रयास करें

जल्दी ही आगमन

  • [] डेटासेट से विशिष्ट लेबल मर्ज करें। उदाहरण - सभी आयात करें person COCO से लेबल और car Cityscapes से लेबल
  • [] उन छवियों को हटा दें जिनमें दी गई सीमा की तुलना में उच्च समानता सूचकांक है
  • [ ] प्रविष्टियों को विलय/हटाने के बाद स्वचालित रूप से नए डेटासेट बने रहें
  • [] उन्नत डेटासेट विज़ुअलाइज़ेशन


Created 2024-01-07, Updated 2024-06-18
Authors: glenn-jocher (11), 0xSynapse (1), RizwanMunawar (2), AyushExel (2)

टिप्पणियाँ