تخطي إلى المحتوى

مثال على استكشاف VOC

مرحباً بك في دفتر ملاحظات Ultralytics Explorer API. يقدم هذا الدفتر الموارد المتاحة لاستكشاف مجموعات البيانات باستخدام البحث الدلالي، والبحث المتجهي، واستعلامات SQL.

جرب yolo explorer (مدعوم بواجهة برمجة تطبيقات Explorer)

تثبيت ultralytics وشغل yolo explorer في جهازك الطرفي لتشغيل استعلامات مخصصة والبحث الدلالي في متصفحك.

ملاحظة من المجتمع ⚠️

اعتبارًا من ultralytics>=8.3.10، تم إهمال دعم Ultralytics Explorer. تتوفر ميزات استكشاف مجموعات البيانات المماثلة (والموسعة) في منصة Ultralytics.

الإعداد

تثبيت ultralytics والمتطلبات التبعيات، ثم تحقق من البرامج والأجهزة.

!uv pip install ultralytics[explorer] openai
yolo checks

استخدم قوة البحث عن التشابه المتجه للعثور على نقاط البيانات المتشابهة في مجموعة البيانات الخاصة بك جنبًا إلى جنب مع المسافة بينها في فضاء التضمين. ما عليك سوى إنشاء جدول تضمينات لزوج مجموعة البيانات والنموذج المحدد. هذا مطلوب مرة واحدة فقط، ويتم إعادة استخدامه تلقائيًا.

exp = Explorer("VOC.yaml", model="yolo26n.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 مع العدد المحدد من نقاط البيانات الأكثر تشابهاً مع المدخلات، بالإضافة إلى مسافتها في مساحة التضمين. يمكنك استخدام مجموعة البيانات هذه لإجراء المزيد من التصفية.

نتائج البحث عن التشابه في Ultralytics

# 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.

Ultralytics اطلب نتائج استعلام اللغة الطبيعية من الذكاء الاصطناعي

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" ستحدد جميع الأعمدة تلقائيًا. يمكن اعتبار هذا استعلامًا مختصرًا.
  • يمكنك أيضًا كتابة استعلامات كاملة حيث يمكنك تحديد الأعمدة التي تريد اختيارها.

يمكن استخدام هذا للتحقق من أداء النموذج ونقاط بيانات محددة. على سبيل المثال:

  • لنفترض أن النموذج الخاص بك يعاني من صور بها بشر وكلاب. يمكنك كتابة استعلام مثل هذا لتحديد النقاط التي تحتوي على 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)

جدول نتائج استعلام SQL في Explorer

table = exp.sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10")
print(table)

تمامًا مثل البحث عن التشابه، يمكنك أيضًا الحصول على أداة لرسم استعلامات SQL مباشرةً باستخدام exp.plot_sql_query

تصور الصور المطابقة لاستعلام SQL

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 المتاحة في الوثائق

جدول نتائج استعلامات SQL الخام في Explorer

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


📅 تم الإنشاء منذ سنة واحدة ✏️ تم التحديث منذ يوم واحد
glenn-jocherRizwanMunawarpderrengerronald_eddy@yahoo.commiles-deans-ultralyticsonuralpszrpicsalex

تعليقات