واجهة برمجة تطبيقات Ultralytics Explorer
بدءًا من إصدار ultralytics>=8.3.12، تمت إزالة Ultralytics Explorer. لاستخدام Explorer، قم بالتثبيت باستخدام pip install ultralytics==8.3.11. تتوفر ميزات استكشاف مجموعات البيانات المشابهة (والموسعة) في Ultralytics Platform.
مقدمة
تعد Explorer API واجهة برمجة تطبيقات Python لاستكشاف مجموعات البيانات الخاصة بك. وهي تدعم تصفية والبحث في مجموعة البيانات الخاصة بك باستخدام استعلامات SQL، والبحث عن التشابه المتجهي، والبحث الدلالي.
Watch: Ultralytics Explorer API Overview
التثبيت
يعتمد Explorer على مكتبات خارجية لبعض وظائفه. يتم تثبيت هذه المكتبات تلقائيًا عند استخدام Explorer. لتثبيت هذه التبعيات يدويًا، استخدم الأمر التالي:
pip install ultralytics[explorer]الاستخدام
from ultralytics import Explorer
# Create an Explorer object
explorer = Explorer(data="coco128.yaml", model="yolo26n.pt")
# Create embeddings for your dataset
explorer.create_embeddings_table()
# Search for similar images to a given image/images
df = explorer.get_similar(img="path/to/image.jpg")
# Or search for similar images to a given index/indices
df = explorer.get_similar(idx=0)يتم إنشاء جدول Embeddings لزوج معين من مجموعة البيانات والنموذج مرة واحدة فقط ثم يُعاد استخدامه. تستخدم هذه الجداول LanceDB في الخلفية، والذي يتميز بالقدرة على التوسع على القرص، مما يتيح لك إنشاء وإعادة استخدام التضمينات (embeddings) لمجموعات بيانات كبيرة مثل COCO دون استهلاك الذاكرة بالكامل.
في حال كنت ترغب في فرض تحديث جدول التضمينات، يمكنك تمرير force=True إلى أسلوب create_embeddings_table.
يمكنك الوصول مباشرة إلى كائن جدول LanceDB لإجراء تحليل متقدم. تعرف على المزيد حول ذلك في قسم العمل مع جدول التضمينات
1. البحث عن التشابه
البحث عن التشابه هو أسلوب للعثور على صور مشابهة لصورة معينة. يعتمد هذا الأسلوب على فكرة أن الصور المتشابهة سيكون لها تضمينات (embeddings) متشابهة. بمجرد إنشاء جدول التضمينات، يمكنك تشغيل البحث الدلالي بأي من الطرق التالية:
- على فهرس معين أو قائمة من الفهارس في مجموعة البيانات:
exp.get_similar(idx=[1,10], limit=10) - على أي صورة أو قائمة من الصور غير الموجودة في مجموعة البيانات:
exp.get_similar(img=["path/to/img1", "path/to/img2"], limit=10)
في حالة وجود مدخلات متعددة، يتم استخدام مجموع تضميناتها.
ستحصل على إطار بيانات pandas يحتوي على عدد limit من نقاط البيانات الأكثر تشابهاً مع المدخلات، إلى جانب مسافتها في مساحة التضمين. يمكنك استخدام مجموعة البيانات هذه لإجراء المزيد من التصفية.
from ultralytics import Explorer
# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolo26n.pt")
exp.create_embeddings_table()
similar = exp.get_similar(img="https://ultralytics.com/images/bus.jpg", limit=10)
print(similar.head())
# Search using multiple indices
similar = exp.get_similar(
img=["https://ultralytics.com/images/bus.jpg", "https://ultralytics.com/images/bus.jpg"],
limit=10,
)
print(similar.head())رسم الصور المتشابهة
يمكنك أيضاً رسم الصور المتشابهة باستخدام أسلوب plot_similar. يأخذ هذا الأسلوب نفس وسيطات get_similar ويرسم الصور المتشابهة في شبكة.
from ultralytics import Explorer
# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolo26n.pt")
exp.create_embeddings_table()
plt = exp.plot_similar(img="https://ultralytics.com/images/bus.jpg", limit=10)
plt.show()2. اسأل الذكاء الاصطناعي (استعلام باللغة الطبيعية)
تتيح لك هذه الميزة تصفية مجموعة البيانات الخاصة بك باستخدام اللغة الطبيعية، دون الحاجة إلى كتابة استعلامات SQL. يقوم منشئ الاستعلامات المدعوم بالذكاء الاصطناعي بتحويل طلبك إلى استعلام وإرجاع النتائج المطابقة. على سبيل المثال، يمكنك أن تسأل: "أرني 100 صورة تحتوي على شخص واحد فقط وكلبين. يمكن أن توجد كائنات أخرى أيضاً" وسيقوم بإنشاء الاستعلام وعرض تلك النتائج لك. ملاحظة: تستخدم هذه الميزة نماذج لغوية كبيرة (LLMs)، لذا فإن النتائج احتمالية وقد تكون غير دقيقة.
from ultralytics.data.explorer import plot_query_result
from ultralytics import Explorer
# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolo26n.pt")
exp.create_embeddings_table()
df = exp.ask_ai("show me 100 images with exactly one person and 2 dogs. There can be other objects too")
print(df.head())
# plot the results
plt = plot_query_result(df)
plt.show()3. استعلام SQL
يمكنك تشغيل استعلامات SQL على مجموعة البيانات الخاصة بك باستخدام أسلوب sql_query. يأخذ هذا الأسلوب استعلام SQL كمدخل ويعيد إطار بيانات pandas يحتوي على النتائج.
from ultralytics import Explorer
# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolo26n.pt")
exp.create_embeddings_table()
df = exp.sql_query("WHERE labels LIKE '%person%' AND labels LIKE '%dog%'")
print(df.head())رسم نتائج استعلام SQL
يمكنك أيضاً رسم نتائج استعلام SQL باستخدام أسلوب plot_sql_query. يأخذ هذا الأسلوب نفس وسيطات sql_query ويرسم النتائج في شبكة.
from ultralytics import Explorer
# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolo26n.pt")
exp.create_embeddings_table()
# plot the SQL Query
exp.plot_sql_query("WHERE labels LIKE '%person%' AND labels LIKE '%dog%' LIMIT 10")4. العمل مع جدول التضمينات
يمكنك أيضاً العمل مع جدول التضمينات مباشرة. بمجرد إنشاء جدول التضمينات، يمكنك الوصول إليه باستخدام Explorer.table
يعمل Explorer داخلياً على جداول LanceDB. يمكنك الوصول إلى هذا الجدول مباشرة باستخدام كائن Explorer.table وتشغيل استعلامات خام، وتطبيق عوامل تصفية مسبقة ولاحقة، وما إلى ذلك.
from ultralytics import Explorer
exp = Explorer()
exp.create_embeddings_table()
table = exp.tableإليك بعض الأمثلة لما يمكنك القيام به باستخدام الجدول:
الحصول على التضمينات الخام
from ultralytics import Explorer
exp = Explorer()
exp.create_embeddings_table()
table = exp.table
embeddings = table.to_pandas()["vector"]
print(embeddings)استعلام متقدم مع عوامل تصفية مسبقة ولاحقة
from ultralytics import Explorer
exp = Explorer(model="yolo26n.pt")
exp.create_embeddings_table()
table = exp.table
# Dummy embedding
embedding = [i for i in range(256)]
rs = table.search(embedding).metric("cosine").where("").limit(10)إنشاء فهرس متجهي
عند استخدام مجموعات بيانات كبيرة، يمكنك أيضاً إنشاء فهرس متجهي مخصص لاستعلام أسرع. يتم ذلك باستخدام أسلوب create_index على جدول LanceDB.
table.create_index(num_partitions=..., num_sub_vectors=...)5. تطبيقات التضمينات
يمكنك استخدام جدول التضمينات لإجراء مجموعة متنوعة من التحليلات الاستكشافية. إليك بعض الأمثلة:
فهرس التشابه
يأتي Explorer مزوداً بعملية similarity_index:
- تحاول هذه العملية تقدير مدى تشابه كل نقطة بيانات مع بقية مجموعة البيانات.
- تقوم بذلك عن طريق حساب عدد تضمينات الصور التي تقع على مسافة أقرب من
max_distللصورة الحالية في مساحة التضمين التي تم إنشاؤها، مع مراعاةtop_kمن الصور المتشابهة في كل مرة.
يعيد إطار بيانات pandas يحتوي على الأعمدة التالية:
idx: فهرس الصورة في مجموعة البياناتim_file: مسار ملف الصورةcount: عدد الصور في مجموعة البيانات التي تقع على مسافة أقرب منmax_distللصورة الحاليةsim_im_files: قائمة بمسارات الصور المتشابهة التي يبلغ عددهاcount
For a given dataset, model, max_dist & top_k the similarity index once generated will be reused. In case, your dataset has changed, or you simply need to regenerate the similarity index, you can pass force=True.
from ultralytics import Explorer
exp = Explorer()
exp.create_embeddings_table()
sim_idx = exp.similarity_index()يمكنك استخدام فهرس التشابه لبناء شروط مخصصة لتصفية مجموعة البيانات. على سبيل المثال، يمكنك تصفية الصور التي لا تشبه أي صورة أخرى في مجموعة البيانات باستخدام الكود التالي:
import numpy as np
sim_count = np.array(sim_idx["count"])
sim_idx["im_file"][sim_count > 30]تصور مساحة التضمين
يمكنك أيضاً تصور مساحة التضمين باستخدام أداة الرسم التي تفضلها. على سبيل المثال، إليك مثال بسيط باستخدام Matplotlib:
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
# 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 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()ابدأ في إنشاء تقارير استكشاف مجموعة بيانات الرؤية الحاسوبية (CV) الخاصة بك باستخدام Explorer API. للإلهام، تحقق من مثال استكشاف VOC.
التطبيقات التي تم إنشاؤها باستخدام Ultralytics Explorer
جرب عرض واجهة المستخدم الرسومية (GUI) الخاص بنا المستند إلى Explorer API
الأسئلة الشائعة
فيم تُستخدم واجهة برمجة تطبيقات Ultralytics Explorer؟
صُممت واجهة برمجة تطبيقات Ultralytics Explorer لاستكشاف شامل لمجموعة البيانات. وهي تتيح للمستخدمين تصفية والبحث في مجموعات البيانات باستخدام استعلامات SQL، والبحث عن التشابه المتجهي، والبحث الدلالي. يمكن لواجهة برمجة تطبيقات Python القوية هذه التعامل مع مجموعات البيانات الكبيرة، مما يجعلها مثالية لمهام الرؤية الحاسوبية المختلفة باستخدام نماذج Ultralytics.
كيف أقوم بتثبيت واجهة برمجة تطبيقات Ultralytics Explorer؟
لتثبيت واجهة برمجة تطبيقات Ultralytics Explorer مع تبعياتها، استخدم الأمر التالي:
pip install ultralytics[explorer]سيؤدي هذا إلى تثبيت جميع المكتبات الخارجية اللازمة تلقائياً لوظائف Explorer API. لمزيد من تفاصيل الإعداد، راجع قسم التثبيت في وثائقنا.
كيف يمكنني استخدام واجهة برمجة تطبيقات Ultralytics Explorer للبحث عن التشابه؟
يمكنك استخدام واجهة برمجة تطبيقات Ultralytics Explorer لإجراء عمليات البحث عن التشابه عن طريق إنشاء جدول تضمينات والاستعلام عنه للعثور على صور مشابهة. إليك مثال أساسي:
from ultralytics import Explorer
# Create an Explorer object
explorer = Explorer(data="coco128.yaml", model="yolo26n.pt")
explorer.create_embeddings_table()
# Search for similar images to a given image
similar_images_df = explorer.get_similar(img="path/to/image.jpg")
print(similar_images_df.head())لمزيد من التفاصيل، يرجى زيارة قسم البحث عن التشابه.
ما هي فوائد استخدام LanceDB مع Ultralytics Explorer؟
يوفر LanceDB، الذي يستخدمه Ultralytics Explorer في الخلفية، جداول تضمينات قابلة للتوسع على القرص. يضمن هذا إمكانية إنشاء وإعادة استخدام التضمينات لمجموعات بيانات كبيرة مثل COCO دون استنفاد الذاكرة. يتم إنشاء هذه الجداول مرة واحدة فقط ويمكن إعادة استخدامها، مما يعزز الكفاءة في معالجة البيانات.
كيف تعمل ميزة "اسأل الذكاء الاصطناعي" في واجهة برمجة تطبيقات Ultralytics Explorer؟
تتيح ميزة "اسأل الذكاء الاصطناعي" للمستخدمين تصفية مجموعات البيانات باستخدام استعلامات اللغة الطبيعية. تستفيد هذه الميزة من النماذج اللغوية الكبيرة (LLMs) لتحويل هذه الاستعلامات إلى استعلامات SQL في الخلفية. إليك مثال:
from ultralytics import Explorer
# Create an Explorer object
explorer = Explorer(data="coco128.yaml", model="yolo26n.pt")
explorer.create_embeddings_table()
# Query with natural language
query_result = explorer.ask_ai("show me 100 images with exactly one person and 2 dogs. There can be other objects too")
print(query_result.head())لمزيد من الأمثلة، تحقق من قسم اسأل الذكاء الاصطناعي.