مثال استكشاف VOC
مرحبًا بك في دفتر Ultralytics Explorer API! يعمل هذا الدفتر كنقطة انطلاق لاستكشاف الموارد المختلفة المتاحة لمساعدتك على البدء في استخدام Ultralytics لاستكشاف مجموعات البيانات الخاصة بك باستخدام قوة البحث الدلالي. يمكنك استخدام الأدوات الجاهزة التي تسمح لك بفحص أنواع معينة من الملصقات باستخدام البحث المتجه أو حتى استعلامات SQL.
جرب yolo explorer مدعوم بواسطة Explorer API
ببساطة pip install ultralytics وشغل yolo explorer في جهازك الطرفي لتشغيل استعلامات مخصصة وبحث دلالي على مجموعات البيانات الخاصة بك مباشرة داخل متصفحك!
ملاحظة من المجتمع ⚠️
اعتبارًا من ultralytics>=8.3.10، تم إيقاف دعم Ultralytics Explorer. ولكن لا تقلق! يمكنك الآن الوصول إلى وظائف مماثلة وحتى محسّنة من خلال Ultralytics HUB، منصتنا سهلة الاستخدام بدون تعليمات برمجية والمصممة لتبسيط سير عملك. باستخدام Ultralytics HUB، يمكنك متابعة استكشاف بياناتك وتصورها وإدارتها بسهولة، كل ذلك دون كتابة سطر واحد من التعليمات البرمجية. تأكد من التحقق من ذلك والاستفادة من ميزاته القوية! 🚀
الإعداد
تثبيت Pip ultralytics و التبعيات وتحقق من البرامج والأجهزة.
!uv pip install ultralytics[explorer] openai
yolo checks
البحث عن الصور المتشابهة
استخدم قوة البحث عن التشابه المتجه للعثور على نقاط البيانات المتشابهة في مجموعة البيانات الخاصة بك جنبًا إلى جنب مع المسافة بينها في فضاء التضمين. ما عليك سوى إنشاء جدول تضمينات لزوج مجموعة البيانات والنموذج المحدد. هذا مطلوب مرة واحدة فقط، ويتم إعادة استخدامه تلقائيًا.
exp = Explorer("VOC.yaml", model="yolo11n.pt")
exp.create_embeddings_table()
بمجرد إنشاء جدول التضمينات، يمكنك تشغيل البحث الدلالي بأي من الطرق التالية:
- في فهرس معين / قائمة فهارس في مجموعة البيانات مثل - exp.get_similar(idx=[1,10], limit=10)
- على أي صورة / قائمة صور ليست في مجموعة البيانات - exp.get_similar(img=["path/to/img1", "path/to/img2"], limit=10) في حالة وجود مدخلات متعددة، يتم استخدام مجموع تضميناتها.
ستحصل على إطار بيانات pandas مع العدد المحدد من نقاط البيانات الأكثر تشابهًا مع الإدخال، جنبًا إلى جنب مع المسافة بينها في فضاء التضمين. يمكنك استخدام مجموعة البيانات هذه لإجراء المزيد من التصفية

# Search dataset by index
similar = exp.get_similar(idx=1, limit=10)
similar.head()
يمكنك أيضًا رسم العينات المتشابهة مباشرةً باستخدام plot_similar أداة

exp.plot_similar(idx=6500, limit=20)
exp.plot_similar(idx=[100, 101], limit=10) # Can also pass list of idxs or imgs
exp.plot_similar(img="https://ultralytics.com/images/bus.jpg", limit=10, labels=False) # Can also pass external images

اسأل الذكاء الاصطناعي: البحث أو التصفية باللغة الطبيعية
يمكنك مطالبة كائن Explorer بنوع نقاط البيانات التي تريد رؤيتها، وسيحاول إرجاع إطار بيانات يحتوي عليها. نظرًا لأنه مدعوم بواسطة LLMs، فإنه لا يحصل عليه دائمًا بشكل صحيح. في هذه الحالة، سيعيد None.

df = exp.ask_ai("show me images containing more than 10 objects with at least 2 persons")
df.head(5)
لرسم هذه النتائج يمكنك استخدام plot_query_result مثال للاستخدام:
plt = plot_query_result(exp.ask_ai("show me 10 images containing exactly 2 persons"))
Image.fromarray(plt)

# plot
from PIL import Image
from ultralytics.data.explorer import plot_query_result
plt = plot_query_result(exp.ask_ai("show me 10 images containing exactly 2 persons"))
Image.fromarray(plt)
تشغيل استعلامات SQL على مجموعة البيانات الخاصة بك
قد ترغب أحيانًا في فحص نوع معين من الإدخالات في مجموعة البيانات الخاصة بك. يتيح لك هذا المستكشف تنفيذ استعلامات SQL. يقبل أيًا من التنسيقات:
- الاستعلامات التي تبدأ بـ "WHERE" ستحدد تلقائيًا جميع الأعمدة. يمكن اعتبار هذا بمثابة استعلام مختصر
- يمكنك أيضًا كتابة استعلامات كاملة حيث يمكنك تحديد الأعمدة المراد تحديدها
يمكن استخدام هذا للتحقق من أداء النموذج ونقاط بيانات محددة. على سبيل المثال:
- لنفترض أن النموذج الخاص بك يعاني من صور بها بشر وكلاب. يمكنك كتابة استعلام مثل هذا لتحديد النقاط التي تحتوي على 2 من البشر على الأقل وكلب واحد على الأقل.
يمكنك الجمع بين استعلام SQL والبحث الدلالي لتصفية النتائج وصولًا إلى نوع معين.
table = exp.sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10")
exp.plot_sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10", labels=True)

table = exp.sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10")
print(table)
تمامًا مثل البحث عن التشابه، يمكنك أيضًا الحصول على أداة لرسم استعلامات SQL مباشرةً باستخدام exp.plot_sql_query

exp.plot_sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10", labels=True)
العمل مع جدول التضمينات (متقدم)
يعمل المستكشف على LanceDB جداول داخليًا. يمكنك الوصول إلى هذا الجدول مباشرةً باستخدام Explorer.table الكائنات وتشغيل الاستعلامات الأولية، ودفع عوامل التصفية المسبقة واللاحقة، وما إلى ذلك.
table = exp.table
print(table.schema)
تشغيل الاستعلامات الأولية¶
يجد بحث المتجهات أقرب المتجهات من قاعدة البيانات. في نظام التوصية أو محرك البحث، يمكنك العثور على منتجات مماثلة للمنتج الذي بحثت عنه. في نماذج اللغة الكبيرة (LLM) وتطبيقات الذكاء الاصطناعي الأخرى، يمكن تمثيل كل نقطة بيانات بواسطة التضمينات التي تم إنشاؤها من بعض النماذج، ويعيد الميزات الأكثر صلة.
البحث في فضاء متجهي عالي الأبعاد هو إيجاد أقرب K جار (KNN) لمتجه الاستعلام.
في LanceDB، المقياس (Metric) هو الطريقة التي تصف المسافة بين زوج من المتجهات. وهو يدعم حاليًا المقاييس التالية:
- L2
- جيب التمام
- يستخدم البحث عن التشابه في Dot Explorer's معيار L2 افتراضيًا. يمكنك تشغيل الاستعلامات على الجداول مباشرةً، أو استخدام تنسيق lance لإنشاء أدوات مخصصة لإدارة مجموعات البيانات. مزيد من التفاصيل حول عمليات جدول LanceDB المتاحة في الوثائق

dummy_img_embedding = [i for i in range(256)]
table.search(dummy_img_embedding).limit(5).to_pandas()
التحويل المتبادل إلى تنسيقات البيانات الشائعة
df = table.to_pandas()
pa_table = table.to_arrow()
العمل مع التضمينات
يمكنك الوصول إلى التضمين الخام من جدول lancedb وتحليله. يتم تخزين تضمينات الصورة في العمود vector
import numpy as np
embeddings = table.to_pandas()["vector"].tolist()
embeddings = np.array(embeddings)
مخطط التشتت
إحدى الخطوات التمهيدية في تحليل التضمينات هي رسمها في فضاء ثنائي الأبعاد عن طريق تقليل الأبعاد. لنجرب مثالاً

import matplotlib.pyplot as plt
from sklearn.decomposition import PCA # pip install scikit-learn
# 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's 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()
مؤشر التشابه
إليك مثال بسيط لعملية مدعومة بجدول التضمينات. يأتي المستكشف مزودًا بـ similarity_index عملية-
- تحاول تقدير مدى تشابه كل نقطة بيانات مع بقية مجموعة البيانات.
- يقوم بذلك عن طريق حساب عدد تضمينات الصور التي تقع على مسافة أقرب من max_dist إلى الصورة الحالية في فضاء التضمين الذي تم إنشاؤه، مع الأخذ في الاعتبار أفضل top_k من الصور المتشابهة في كل مرة.
بالنسبة لمجموعة بيانات معينة، نموذج، max_dist & top_k سيتم إعادة استخدام فهرس التشابه بمجرد إنشائه. في حال تغيرت مجموعة البيانات الخاصة بك، أو كنت بحاجة ببساطة إلى إعادة إنشاء فهرس التشابه، يمكنك تمرير force=True. على غرار البحث المتجهي و SQL، يأتي هذا أيضًا مع أداة لرسمه مباشرةً. دعونا نلقي نظرة
sim_idx = exp.similarity_index(max_dist=0.2, top_k=0.01)
exp.plot_similarity_index(max_dist=0.2, top_k=0.01)

في الرسم البياني أولاً
exp.plot_similarity_index(max_dist=0.2, top_k=0.01)
الآن دعونا نلقي نظرة على ناتج العملية
sim_idx = exp.similarity_index(max_dist=0.2, top_k=0.01, force=False)
sim_idx
لنقم بإنشاء استعلام لمعرفة نقاط البيانات التي لديها عدد تشابه أكثر من 30 ورسم صور مشابهة لها.
import numpy as np
sim_count = np.array(sim_idx["count"])
sim_idx["im_file"][sim_count > 30]
يجب أن ترى شيئًا كهذا

exp.plot_similar(idx=[7146, 14035]) # Using avg embeddings of 2 images
