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

مثال على استكشاف المركبات العضوية المتطايرة

مرحبًا بك في دفتر Ultralytics Explorer API! يُعد هذا الدفتر بمثابة نقطة البداية لاستكشاف الموارد المختلفة المتاحة لمساعدتك على البدء في استخدام Ultralytics لاستكشاف مجموعات البيانات الخاصة بك باستخدام قوة البحث الدلالي. يمكنك استخدام الأدوات المساعدة خارج الصندوق التي تسمح لك بفحص أنواع محددة من التسميات باستخدام البحث الدلالي أو حتى استعلامات SQL.

جرّب yolo explorer مدعوم من واجهة برمجة تطبيقات إكسبلورر

ببساطة pip install ultralytics وتشغيل yolo explorer في جهازك لتشغيل الاستعلامات المخصصة والبحث الدلالي على مجموعات البيانات الخاصة بك داخل متصفحك مباشرةً!

مذكرة المجتمع ⚠️

اعتباراً من ultralytics>=8.3.10، Ultralytics مستكشف الدعم قد تم إهماله. ولكن لا تقلق! يمكنك الآن الوصول إلى وظائف مماثلة بل ومحسنة من خلال Ultralytics هبمنصتنا البديهية الخالية من التعليمات البرمجية والمصممة لتبسيط سير عملك. مع Ultralytics HUB، يمكنك مواصلة استكشاف بياناتك وتصورها وإدارتها دون عناء، كل ذلك دون كتابة سطر واحد من التعليمات البرمجية. تأكد من التحقق من ذلك والاستفادة من ميزاته القوية!

الإعداد

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

%pip install ultralytics[explorer] openai
yolo checks

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

exp = Explorer("VOC.yaml", model="yolo11n.pt")
exp.create_embeddings_table()

بمجرد إنشاء جدول التضمينات، يمكنك الحصول على تشغيل البحث الدلالي بأي من الطرق التالية:

  • على فهرس معين/قائمة مؤشرات معينة في مجموعة البيانات مثل - exp.get_similar(idx=[1,10]، الحد=10)
  • على أي صورة/قائمة من الصور غير الموجودة في مجموعة البيانات - exp.get_similar(img=["path/to/img1"، "path/to/img2"]، الحد=10) في حالة وجود مدخلات متعددة، يتم استخدام مجموع تضميناتها.

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

جدول البحث عن التشابه

# Search dataset by index
similar = exp.get_similar(idx=1, limit=10)
similar.head()

يمكنك أيضًا استخدام رسم النماذج المتشابهة مباشرةً باستخدام plot_similar الاستخدام

صورة البحث عن التشابه 1

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

صورة بحث التشابه في البحث عن التشابه 2

اسأل الذكاء الاصطناعي: البحث أو التصفية باستخدام اللغة الطبيعية

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

اسأل عن جدول الطلب Ai

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)

اسأل صورة Ai 1

# 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. يقبل أيًا من الصيغ:

  • ستحدد الاستعلامات التي تبدأ ب "حيث" جميع الأعمدة تلقائيًا. يمكن اعتبار ذلك استعلامًا مختصرًا
  • يمكنك أيضًا كتابة استعلامات كاملة حيث يمكنك تحديد الأعمدة التي تريد تحديدها

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

  • لنفترض أن نموذجك يكافح على الصور التي تحتوي على بشر وكلاب. يمكنك كتابة استعلام مثل هذا لتحديد النقاط التي تحتوي على شخصين على الأقل من البشر وكلب واحد على الأقل.

يمكنك الجمع بين استعلام 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

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

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

صورة استعلامات SQL 1

exp.plot_sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10", labels=True)

العمل مع جدول التضمينات (متقدم)

يعمل المستكشف على لانس دي بي الجداول داخليًا. يمكنك الوصول إلى هذا الجدول مباشرة، باستخدام Explorer.table كائن وتشغيل استعلامات أولية، ودفع المرشحات المسبقة واللاحقة، إلخ.

table = exp.table
print(table.schema)

تشغيل الاستعلامات الأولية¶

بحث المتجهات يعثر على أقرب المتجهات من قاعدة البيانات. في نظام التوصيات أو محرك البحث، يمكنك العثور على منتجات مماثلة من تلك التي بحثت عنها. في LLM وتطبيقات الذكاء الاصطناعي الأخرى، يمكن تقديم كل نقطة بيانات من خلال التضمينات التي تم إنشاؤها من بعض النماذج، فهي تُرجع الميزات الأكثر صلة.

البحث في الفضاء المتجه عالي الأبعاد، هو العثور على K-أقرب الأقرب (KNN) لمتجه الاستعلام.

المتري في LanceDB، المتري هو طريقة لوصف المسافة بين زوج من المتجهات. يدعم حاليًا المقاييس التالية:

  • L2
  • جيب التمام
  • يستخدم بحث التشابه في مستكشف النقاط 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 إلى الصورة الحالية في مساحة التضمين التي تم إنشاؤها، مع الأخذ في الاعتبار أعلى_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
📅 تم إنشاؤها منذ 2 أشهر ✏️ تم التحديث منذ 2 أشهر

التعليقات