Ultralytics Explorer API#
بدءاً من إصدار ultralytics>=8.3.12، تمت إزالة Ultralytics Explorer. لاستخدام Explorer، قم بتثبيت الإصدار عبر الأمر pip install ultralytics==8.3.11. تتوفر ميزات استكشاف مجموعات البيانات المماثلة (والموسعة) في منصة Ultralytics.
مقدمة#
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="yolo11n.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 تحت الغطاء، والتي تتوسع على القرص، بحيث يمكنك إنشاء وإعادة استخدام التضمينات لمجموعات البيانات الكبيرة مثل COCO دون نفاد الذاكرة.
في حال كنت تريد فرض تحديث جدول التضمينات، يمكنك تمرير force=True إلى طريقة create_embeddings_table.
يمكنك الوصول مباشرة إلى كائن جدول LanceDB لإجراء تحليل متقدم. تعرف على المزيد حول ذلك في قسم العمل مع جدول التضمينات
1. البحث عن التشابه#
البحث عن التشابه هو تقنية للعثور على صور مشابهة لصورة معينة. يعتمد على فكرة أن الصور المتشابهةจะมี تضمينات متشابهة. بمجرد بناء جدول التضمينات، يمكنك تشغيل البحث الدلالي بأي من الطرق التالية:
- على مؤشر معين أو قائمة مؤشرات في مجموعة البيانات:
exp.get_similar(idx=[1,10], limit=10) - على أي صورة أو قائمة صور غير موجودة في مجموعة البيانات:
exp.get_similar(img=["path/to/img1", "path/to/img2"], limit=10)
في حالة وجود مدخلات متعددة، يتم استخدام إجمالي تضميناتها.
تحصل على pandas DataFrame مع عدد limit من نقاط البيانات الأكثر تشابهًا مع المدخلات، إلى جانب مسافتها في فضاء التضمين. يمكنك استخدام مجموعة البيانات هذه لإجراء مزيد من التصفية.
from ultralytics import Explorer
# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolo11n.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="yolo11n.pt")
exp.create_embeddings_table()
plt = exp.plot_similar(img="https://ultralytics.com/images/bus.jpg", limit=10)
plt.show()2. اسأل الذكاء الاصطناعي (الاستعلام باللغة الطبيعية)#
تتيح لك هذه الميزة تصفية مجموعة البيانات الخاصة بك باستخدام اللغة الطبيعية، دون كتابة SQL. يقوم منشئ الاستعلام المدعوم بالذكاء الاصطناعي بتحويل مطالبتك إلى استعلام وإرجاع النتائج المطابقة. على سبيل المثال، يمكنك أن تسأل: "show me 100 images with exactly one person and 2 dogs. There can be other objects too" وسيقوم بإنشاء الاستعلام وعرض تلك النتائج لك. ملاحظة: تستخدم هذه الميزة نماذج لغوية كبرى (LLMs)، لذا فإن النتائج احتمالية وقد تكون غير دقيقة.
from ultralytics.data.explorer import plot_query_result
from ultralytics import Explorer
# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolo11n.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 DataFrame مع النتائج.
from ultralytics import Explorer
# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolo11n.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="yolo11n.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="yolo11n.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 DataFrame بالأعمدة التالية:
idx: مؤشر الصورة في مجموعة البياناتim_file: مسار ملف الصورةcount: عدد الصور في مجموعة البيانات التي تكون أقرب منmax_distإلى الصورة الحاليةsim_im_files: قائمة مسارات صورcountالمتشابهة
بالنسبة لمجموعة بيانات معينة، ونموذج، وmax_dist وtop_k، ستتم إعادة استخدام فهرس التشابه بمجرد إنشائه. في حال تغيرت مجموعة البيانات الخاصة بك، أو كنت بحاجة ببساطة إلى إعادة إنشاء فهرس التشابه، يمكنك تمرير 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 Demo) القائم على Explorer API
الأسئلة الشائعة#
ما هو الغرض من استخدام Ultralytics Explorer API؟#
تم تصميم Ultralytics Explorer API لاستكشاف شامل لمجموعات البيانات. وهي تتيح للمستخدمين تصفية والبحث في مجموعات البيانات باستخدام استعلامات SQL، والبحث عن التشابه المتجه، والبحث الدلالي. يمكن واجهة برمجة تطبيقات Python القوية هذه التعامل مع مجموعات البيانات الكبيرة، مما يجعلها مثالية لمختلف مهام رؤية الكمبيوتر باستخدام نماذج Ultralytics.
كيف يمكنني تثبيت Ultralytics Explorer API؟#
لتثبيت Ultralytics Explorer API مع تبعياتها، استخدم الأمر التالي:
pip install ultralytics[explorer]سيؤدي هذا إلى تثبيت جميع المكتبات الخارجية اللازمة لوظائف Explorer API تلقائيًا. للحصول على تفاصيل إعداد إضافية، راجع قسم التثبيت في وثائقنا.
كيف يمكنني استخدام Ultralytics Explorer API للبحث عن التشابه؟#
يمكنك استخدام Ultralytics Explorer API لإجراء عمليات بحث عن التشابه عن طريق إنشاء جدول تضمينات والاستعلام عنه بحثًا عن صور مشابهة. إليك مثال أساسي:
from ultralytics import Explorer
# Create an Explorer object
explorer = Explorer(data="coco128.yaml", model="yolo11n.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 دون نفاد الذاكرة. يتم إنشاء هذه الجداول مرة واحدة فقط ويمكن إعادة استخدامها، مما يعزز الكفاءة في معالجة البيانات.
كيف تعمل ميزة "اسأل الذكاء الاصطناعي" (Ask AI) في Ultralytics Explorer API؟#
تتيح ميزة "اسأل الذكاء الاصطناعي" للمستخدمين تصفية مجموعات البيانات باستخدام استعلامات اللغة الطبيعية. تستفيد هذه الميزة من النماذج اللغوية الكبرى (LLMs) لتحويل هذه الاستعلامات إلى استعلامات SQL خلف الكواليس. إليك مثال:
from ultralytics import Explorer
# Create an Explorer object
explorer = Explorer(data="coco128.yaml", model="yolo11n.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())لمزيد من الأمثلة، راجع قسم اسأل الذكاء الاصطناعي.