Ultralytics YOLO27:

واجهة Ultralytics Explorer API#

ملاحظة للمجتمع ⚠️

اعتبارًا من ultralytics>=8.3.12، أُزيل Ultralytics Explorer. لاستخدام Explorer، ثبّت pip install ultralytics==8.3.11. تتوفر ميزات مماثلة (وموسّعة) لاستكشاف مجموعات البيانات على منصة Ultralytics.

مقدمة#

واجهة Explorer API هي واجهة Python API لاستكشاف مجموعات بياناتك. وتدعم تصفية مجموعة بياناتك والبحث فيها باستخدام استعلامات SQL والبحث عن التشابه بين المتجهات والبحث الدلالي.



شاهد: نظرة عامة على Ultralytics Explorer API

التثبيت#

يعتمد Explorer على مكتبات خارجية لبعض وظائفه. تُثبَّت هذه المكتبات تلقائيًا عند استخدام Explorer. لتثبيت هذه التبعيات يدويًا، استخدم الأمر التالي:

pip install "ultralytics[explorer]==8.3.11"

الاستخدام#

from ultralytics import Explorer

# ⁨إنشاء كائن Explorer⁩
explorer = Explorer(data="coco128.yaml", model="yolo11n.pt")

# ⁨إنشاء تضمينات لمجموعة بياناتك⁩
explorer.create_embeddings_table()

# ⁨البحث عن صور مشابهة لصورة أو صور محددة⁩
df = explorer.get_similar(img="path/to/image.jpg")

# ⁨أو البحث عن صور مشابهة لفهرس أو فهارس محددة⁩
df = explorer.get_similar(idx=0)
ملاحظة

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

إذا أردت فرض تحديث جدول التضمينات، يمكنك تمرير force=True إلى الطريقة create_embeddings_table.

يمكنك الوصول مباشرةً إلى كائن جدول LanceDB لإجراء تحليلات متقدمة. تعرّف على المزيد في قسم العمل مع جدول التضمينات.

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

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

عند استخدام مدخلات متعددة، يُستخدم مجموع تضميناتها.

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

البحث الدلالي
from ultralytics import Explorer

# ⁨إنشاء كائن Explorer⁩
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())

# ⁨البحث باستخدام صور متعددة⁩
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

# ⁨إنشاء كائن Explorer⁩
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 صورة فيها شخص واحد بالضبط وكلبان. ويمكن أن تظهر فيها كائنات أخرى أيضًا"، وسيُنشئ الاستعلام ويعرض لك تلك النتائج. ملاحظة: تستخدم هذه الميزة نماذج اللغة الكبيرة، لذا فإن النتائج احتمالية وقد تكون غير دقيقة.

اسأل الذكاء الاصطناعي
from ultralytics.data.explorer import plot_query_result

from ultralytics import Explorer

# ⁨إنشاء كائن Explorer⁩
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())

# ⁨رسم النتائج⁩
plt = plot_query_result(df)
plt.show()

3. تنفيذ استعلامات SQL#

يمكنك تشغيل استعلامات SQL على مجموعة بياناتك باستخدام الطريقة sql_query. تقبل هذه الطريقة استعلام SQL كمدخل، وتعيد DataFrame من pandas يتضمن النتائج.

استعلام SQL
from ultralytics import Explorer

# ⁨إنشاء كائن Explorer⁩
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، ثم تعرض النتائج ضمن شبكة.

رسم نتائج استعلام SQL
from ultralytics import Explorer

# ⁨إنشاء كائن Explorer⁩
exp = Explorer(data="coco128.yaml", model="yolo11n.pt")
exp.create_embeddings_table()

# ⁨رسم استعلام SQL⁩
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

# ⁨تضمين افتراضي⁩
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 صورة مشابهة في كل مرة.

تعيد هذه العملية DataFrame من pandas يتضمن الأعمدة التالية:

  • 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

# ⁨تقليل الأبعاد باستخدام PCA إلى 3 مكونات لتصورها ثلاثي الأبعاد⁩
pca = PCA(n_components=3)
reduced_data = pca.fit_transform(embeddings)

# ⁨إنشاء مخطط مبعثر ثلاثي الأبعاد باستخدام Matplotlib Axes3D⁩
fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111, projection="3d")

# ⁨مخطط مبعثر⁩
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

الأسئلة الشائعة#

  • صُممت واجهة برمجة تطبيقات Ultralytics Explorer لاستكشاف مجموعات البيانات بشكل شامل. وتتيح للمستخدمين تصفية مجموعات البيانات والبحث فيها باستخدام استعلامات SQL، والبحث عن تشابه المتجهات، والبحث الدلالي. ويمكن لواجهة Python القوية هذه التعامل مع مجموعات البيانات الكبيرة، مما يجعلها مثالية لمختلف مهام الرؤية الحاسوبية باستخدام نماذج Ultralytics.

  • لتثبيت واجهة برمجة تطبيقات Ultralytics Explorer مع تبعياتها، استخدم الأمر التالي:

    pip install "ultralytics[explorer]==8.3.11"

    سيؤدي ذلك إلى تثبيت جميع المكتبات الخارجية اللازمة لوظائف Explorer API تلقائيًا. لمزيد من تفاصيل الإعداد، راجع قسم التثبيت في وثائقنا.

  • يمكنك استخدام واجهة برمجة تطبيقات Ultralytics Explorer لإجراء عمليات البحث عن التشابه من خلال إنشاء جدول للتضمينات والاستعلام فيه عن الصور المتشابهة. إليك مثالًا أساسيًا:

    from ultralytics import Explorer
    
    # ⁨إنشاء كائن Explorer⁩
    explorer = Explorer(data="coco128.yaml", model="yolo11n.pt")
    explorer.create_embeddings_table()
    
    # ⁨ابحث عن صور مشابهة لصورة معينة⁩
    similar_images_df = explorer.get_similar(img="path/to/image.jpg")
    print(similar_images_df.head())

    لمزيد من التفاصيل، يُرجى زيارة قسم البحث عن التشابه.

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

  • تتيح ميزة Ask AI للمستخدمين تصفية مجموعات البيانات باستخدام استعلامات باللغة الطبيعية. وتستفيد هذه الميزة من نماذج اللغة الكبيرة لتحويل هذه الاستعلامات إلى استعلامات SQL في الخلفية. إليك مثال:

    from ultralytics import Explorer
    
    # ⁨إنشاء كائن Explorer⁩
    explorer = Explorer(data="coco128.yaml", model="yolo11n.pt")
    explorer.create_embeddings_table()
    
    # ⁨استعلام بلغة طبيعية⁩
    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())

    للاطلاع على مزيد من الأمثلة، راجع قسم Ask AI.

التعليقات