مثال استكشاف VOC#
中文 | 한국어 | 日本語 | Русский | Deutsch | Français | Español | Português | Türkçe | Tiếng Việt | العربية
مرحبًا بك في دفتر ملاحظات API مستكشف Ultralytics. يقدم هذا الدفتر الموارد المتاحة لاستكشاف مجموعات البيانات باستخدام البحث الدلالي، والبحث المتجهي، واستعلامات SQL.
جرب yolo explorer (مدعوم بواسطة Explorer API)
قم بتثبيت ultralytics وقم بتشغيل yolo explorer في طرفية الأوامر (terminal) لديك لتنفيذ استعلامات مخصصة وبحث دلالي في متصفحك.
بدءاً من إصدار ultralytics>=8.3.12، تمت إزالة Ultralytics Explorer. لاستخدام Explorer، قم بتثبيت الإصدار عبر الأمر pip install ultralytics==8.3.11. تتوفر ميزات استكشاف مجموعات البيانات المماثلة (والموسعة) في منصة Ultralytics.
الإعداد#
قم بتثبيت ultralytics والتبعيات المطلوبة، ثم تحقق من البرامج والأجهزة.
!uv pip install ultralytics[explorer] openai
yolo checksبحث التشابه#
استفد من قوة بحث تشابه المتجهات للعثور على نقاط البيانات المماثلة في مجموعة بياناتك إلى جانب مسافتها في فضاء التضمين (embedding space). ما عليك سوى إنشاء جدول تضمينات لزوج مجموعة البيانات والنموذج المحدد. إنه مطلوب مرة واحدة فقط، ويتم إعادةใชهو تلقائيًا.
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 DataFrame مع العدد المحدود من نقاط البيانات الأكثر تشابهًا مع المدخل، إلى جانب مسافتها في فضاء التضمين. يمكنك استخدام مجموعة البيانات هذه لإجراء تصفية إضافية.

# 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 بنوع نقاط البيانات التي تريد رؤيتها، وسيتحاول إرجاع DataFrame بهذه النتائج. نظرًا لأنه مدعوم بنماذج اللغات الكبيرة (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 على مجموعة بياناتك#
في بعض الأحيان قد ترغب في فحص إدخالات معينة في مجموعة بياناتك. لهذا الغرض، يتيح لك Explorer تنفيذ استعلامات SQL. وهو يقبل أي من التنسيقين التاليين:
- الاستعلامات التي تبدأ بـ "WHERE" ستحدد تلقائيًا جميع الأعمدة. يمكن اعتبار هذا استعلامًا اختصارياً.
- يمكنك أيضًا كتابة استعلامات كاملة حيث يمكنك تحديد الأعمدة المراد اختيارها.
يمكن استخدام هذا لفحص أداء النموذج ونقاط البيانات المحددة. على سبيل المثال:
- لنفترض أن نموذجك يواجه صعوبة في الصور التي تحتوي على بشر وكلاب. يمكنك كتابة استعلام مثل هذا لتحديد النقاط التي تحتوي على شخصين على الأقل وکلب واحد على الأقل.
يمكنك الجمع بين استعلام 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)العمل مع جدول التضمينات (متقدم)#
يعمل Explorer على جداول LanceDB داخليًا. يمكنك الوصول إلى هذا الجدول مباشرة، باستخدام كائن Explorer.table وتشغيل استعلامات خام، ودفع عوامل التصفية القبلية والبعدية، وما إلى ذلك.
table = exp.table
print(table.schema)تشغيل الاستعلامات الخام¶#
يعثر البحث المتجهي على أقرب المتجهات من قاعدة البيانات. في نظام التوصية أو محرك البحث، يمكنك العثور على منتجات مشابهة للمنتج الذي بحثت عنه. في نماذج اللغات الكبيرة وتطبيقات الذكاء الاصطناعي الأخرى، يمكن تمثيل كل نقطة بيانات بواسطة التضمينات الناتجة عن بعض النماذج، وهي تعيد الميزات الأكثر صلة.
البحث في فضاء متجهات عالي الأبعاد، هو البحث عن أقرب جيران (KNN) لمتجه الاستعلام.
المقياس في LanceDB، المقياس هو الطريقة لوصف المسافة بين زوج من المتجهات. حاليًا، يدعم المقاييس التالية:
- L2
- جيب التمام (Cosine)
- يستخدم بحث تشابه نقطة Explorer مقياس 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)مخطط الانتشار (Scatterplot)#
إحدى الخطوات الأولية في تحليل التضمينات هي رسمها في فضاء ثنائي الأبعاد (2D) عبر تقليل الأبعاد. لننجرب مثالاً

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()فهرس التشابه#
إليك مثال بسيط لعملية مدعومة بواسطة جدول التضمينات. يأتي Explorer مع عملية 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