واجهة Explorer API من Ultralytics#
اعتبارًا من 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="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)إذا أردت فرض تحديث جدول التضمينات، يمكنك تمرير 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. ويحوّل مولّد الاستعلامات المدعوم بالذكاء الاصطناعي طلبك إلى استعلام ويعرض النتائج المطابقة. على سبيل المثال، يمكنك أن تطلب: "اعرض لي 100 صورة تحتوي كل واحدة منها على شخص واحد بالضبط و2 من الكلاب. يمكن أن توجد كائنات أخرى أيضًا"، وسيُنشئ الاستعلام ويعرض لك تلك النتائج. ملاحظة: تستخدم هذه الميزة نماذج اللغة الكبيرة (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_distsim_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()ابدأ بإنشاء تقاريرك الخاصة لاستكشاف مجموعات بيانات الرؤية الحاسوبية باستخدام Explorer API. وللاستلهام، اطلع على مثال استكشاف VOC.
تطبيقات مبنية باستخدام Ultralytics Explorer#
جرّب العرض التوضيحي لواجهة المستخدم الرسومية المستند إلى Explorer API
الأسئلة الشائعة#
صُممت واجهة Explorer API من Ultralytics لاستكشاف مجموعات البيانات بشكل شامل. وتتيح للمستخدمين تصفية مجموعات البيانات والبحث فيها باستخدام استعلامات SQL، والبحث عن التشابه المتجهي، والبحث الدلالي. ويمكن لواجهة Python API القوية هذه التعامل مع مجموعات البيانات الكبيرة، مما يجعلها مثالية لمختلف مهام الرؤية الحاسوبية باستخدام نماذج Ultralytics.
لتثبيت واجهة Explorer API من Ultralytics مع تبعياتها، استخدم الأمر التالي:
pip install ultralytics[explorer]سيؤدي ذلك تلقائيًا إلى تثبيت جميع المكتبات الخارجية اللازمة لوظائف Explorer API. ولمزيد من تفاصيل الإعداد، راجع قسم التثبيت في وثائقنا.
يمكنك استخدام واجهة Explorer API من Ultralytics لإجراء عمليات البحث عن التشابه من خلال إنشاء جدول للتضمينات والاستعلام عنه للعثور على الصور المتشابهة. فيما يلي مثال أساسي:
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 في الخلفية، جداول تضمينات قابلة للتوسع ومخزنة على القرص. ويضمن ذلك إمكانية إنشاء التضمينات وإعادة استخدامها لمجموعات بيانات كبيرة مثل COCO من دون نفاد الذاكرة. ولا تُنشأ هذه الجداول إلا مرة واحدة، ويمكن إعادة استخدامها، مما يعزز الكفاءة في التعامل مع البيانات.
تتيح ميزة «اسأل الذكاء الاصطناعي» للمستخدمين تصفية مجموعات البيانات باستخدام استعلامات باللغة الطبيعية. وتستفيد هذه الميزة من نماذج اللغة الكبيرة (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())لمزيد من الأمثلة، اطلع على قسم «اسأل الذكاء الاصطناعي».