مثال على استكشاف المركبات العضوية المتطايرة
مرحبًا بك في دفتر Ultralytics Explorer API! يُعد هذا الدفتر بمثابة نقطة البداية لاستكشاف الموارد المختلفة المتاحة لمساعدتك على البدء في استخدام Ultralytics لاستكشاف مجموعات البيانات الخاصة بك باستخدام قوة البحث الدلالي. يمكنك استخدام الأدوات المساعدة خارج الصندوق التي تسمح لك بفحص أنواع محددة من التسميات باستخدام البحث الدلالي أو حتى استعلامات SQL.
جرّب yolo explorer
مدعوم من واجهة برمجة تطبيقات إكسبلورر
ببساطة pip install ultralytics
وتشغيل yolo explorer
في جهازك لتشغيل الاستعلامات المخصصة والبحث الدلالي على مجموعات البيانات الخاصة بك داخل متصفحك مباشرةً!
مذكرة المجتمع ⚠️
اعتباراً من ultralytics>=8.3.10
، Ultralytics مستكشف الدعم قد تم إهماله. ولكن لا تقلق! يمكنك الآن الوصول إلى وظائف مماثلة بل ومحسنة من خلال Ultralytics هبمنصتنا البديهية الخالية من التعليمات البرمجية والمصممة لتبسيط سير عملك. مع Ultralytics HUB، يمكنك مواصلة استكشاف بياناتك وتصورها وإدارتها دون عناء، كل ذلك دون كتابة سطر واحد من التعليمات البرمجية. تأكد من التحقق من ذلك والاستفادة من ميزاته القوية!
الإعداد
تثبيت بيب ultralytics
و التبعيات والتحقق من البرامج والأجهزة.
البحث عن التشابه
استفد من قوة البحث عن التشابه المتجهي للعثور على نقاط البيانات المتشابهة في مجموعة البيانات الخاصة بك مع المسافة بينها في فضاء التضمين. ما عليك سوى إنشاء جدول التضمينات لزوج مجموعة البيانات والنموذج المحدد. وهو مطلوب مرة واحدة فقط، ويُعاد استخدامه تلقائيًا.
بمجرد إنشاء جدول التضمينات، يمكنك الحصول على تشغيل البحث الدلالي بأي من الطرق التالية:
- على فهرس معين/قائمة مؤشرات معينة في مجموعة البيانات مثل - exp.get_similar(idx=[1,10]، الحد=10)
- على أي صورة/قائمة من الصور غير الموجودة في مجموعة البيانات - exp.get_similar(img=["path/to/img1"، "path/to/img2"]، الحد=10) في حالة وجود مدخلات متعددة، يتم استخدام مجموع تضميناتها.
ستحصل على إطار بيانات بانداس مع العدد الحد الأقصى لنقاط البيانات الأكثر تشابهًا مع المدخلات، إلى جانب المسافة بينهما في فضاء التضمين. يمكنك استخدام مجموعة البيانات هذه لإجراء المزيد من التصفية
يمكنك أيضًا استخدام رسم النماذج المتشابهة مباشرةً باستخدام 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
اسأل الذكاء الاصطناعي: البحث أو التصفية باستخدام اللغة الطبيعية
يمكنك مطالبة كائن المستكشف بنوع نقاط البيانات التي تريد رؤيتها، وسيحاول إرجاع إطار بيانات بها. ولأنه مدعوم من قبل LLMs، فإنه لا يحصل دائمًا على ذلك بشكل صحيح. في هذه الحالة، سيعيد لا شيء.
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. يقبل أيًا من الصيغ:
- ستحدد الاستعلامات التي تبدأ ب "حيث" جميع الأعمدة تلقائيًا. يمكن اعتبار ذلك استعلامًا مختصرًا
- يمكنك أيضًا كتابة استعلامات كاملة حيث يمكنك تحديد الأعمدة التي تريد تحديدها
يمكن استخدام ذلك للتحقق من أداء النموذج ونقاط بيانات محددة. على سبيل المثال:
- لنفترض أن نموذجك يكافح على الصور التي تحتوي على بشر وكلاب. يمكنك كتابة استعلام مثل هذا لتحديد النقاط التي تحتوي على شخصين على الأقل من البشر وكلب واحد على الأقل.
يمكنك الجمع بين استعلام 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.table
كائن وتشغيل استعلامات أولية، ودفع المرشحات المسبقة واللاحقة، إلخ.
تشغيل الاستعلامات الأولية¶
بحث المتجهات يعثر على أقرب المتجهات من قاعدة البيانات. في نظام التوصيات أو محرك البحث، يمكنك العثور على منتجات مماثلة من تلك التي بحثت عنها. في 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()
التحويل البيني إلى تنسيقات البيانات الشائعة
العمل مع التضمينات
يمكنك الوصول إلى التضمين الخام من جدول 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)
في المؤامرة أولاً
والآن دعونا نلقي نظرة على ناتج العملية
دعنا ننشئ استعلامًا لمعرفة نقاط البيانات التي يزيد عدد التشابه بينها عن 30 ونرسم صورًا مشابهة لها.
يجب أن ترى شيئاً مثل هذا