انتقل إلى المحتوى

Ultralytics واجهة برمجة تطبيقات المستكشف

مقدمة

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



شاهد: Ultralytics نظرة عامة على واجهة برمجة تطبيقات المستكشف

تركيب

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

pip install ultralytics[explorer]

استخدام

from ultralytics import Explorer

# Create an Explorer object
explorer = Explorer(data="coco128.yaml", model="yolov8n.pt")

# Create embeddings for your dataset
explorer.create_embeddings_table()

# Search for similar images to a given image/images
dataframe = explorer.get_similar(img="path/to/image.jpg")

# Or search for similar images to a given index/indices
dataframe = 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)

في حالة المدخلات المتعددة ، يتم استخدام إجمالي عمليات التضمين الخاصة بهم.

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

البحث الدلالي

from ultralytics import Explorer

# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolov8n.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())
from ultralytics import Explorer

# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolov8n.pt")
exp.create_embeddings_table()

similar = exp.get_similar(idx=1, limit=10)
print(similar.head())

# Search using multiple indices
similar = exp.get_similar(idx=[1, 10], limit=10)
print(similar.head())

رسم صور مماثلة

يمكنك أيضا رسم الصور المتشابهة باستخدام plot_similar أسلوب. تأخذ هذه الطريقة نفس الحجج مثل get_similar ويرسم الصور المتشابهة في شبكة.

رسم صور مماثلة

from ultralytics import Explorer

# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolov8n.pt")
exp.create_embeddings_table()

plt = exp.plot_similar(img="https://ultralytics.com/images/bus.jpg", limit=10)
plt.show()
from ultralytics import Explorer

# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolov8n.pt")
exp.create_embeddings_table()

plt = exp.plot_similar(idx=1, limit=10)
plt.show()

2. اسأل الذكاء الاصطناعي (الاستعلام باللغة الطبيعية)

يتيح لك ذلك كتابة الطريقة التي تريد بها تصفية مجموعة البيانات الخاصة بك باستخدام اللغة الطبيعية. ليس عليك أن تكون بارعا في كتابة استعلامات SQL. سيقوم مولد الاستعلام الذي يعمل بالطاقة الذكاء الاصطناعي الخاص بنا بذلك تلقائيا تحت الغطاء. على سبيل المثال - يمكنك أن تقول - "أرني 100 صورة مع شخص واحد بالضبط و 2. يمكن أن يكون هناك كائنات أخرى أيضا" وسيقوم بإنشاء الاستعلام داخليا ويعرض لك هذه النتائج. ملاحظة: يعمل هذا باستخدام LLMs تحت الغطاء ، لذا فإن النتائج احتمالية وقد تخطئ الأمور في بعض الأحيان

اسأل الذكاء الاصطناعي

from ultralytics import Explorer
from ultralytics.data.explorer import plot_query_result

# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolov8n.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 كإدخال وترجع إطار بيانات الباندا مع النتائج.

استعلام SQL

from ultralytics import Explorer

# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolov8n.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

# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolov8n.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.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="yolov8n.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=...)

يمكنك العثور على مزيد من التفاصيل حول مؤشرات متجه النوع المتاحة والمعلمات هنا في المستقبل ، سنضيف دعما لإنشاء مؤشرات متجهة مباشرة من Explorer API.

5. تطبيقات التضمين

يمكنك استخدام جدول التضمينات لإجراء مجموعة متنوعة من التحليلات الاستكشافية. فيما يلي بعض الأمثلة:

مؤشر التشابه

إكسبلورر يأتي مع similarity_index عملية:

  • يحاول تقدير مدى تشابه كل نقطة بيانات مع بقية مجموعة البيانات.
  • يقوم بذلك عن طريق حساب عدد عمليات تضمين الصور التي تقع أقرب من max_dist إلى الصورة الحالية في مساحة التضمين التي تم إنشاؤها ، مع الأخذ في الاعتبار top_k صور مماثلة في وقت واحد.

تقوم بإرجاع إطار بيانات الباندا بالأعمدة التالية:

  • 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()

ابدأ في إنشاء تقارير استكشاف مجموعة بيانات السيرة الذاتية الخاصة بك باستخدام واجهة برمجة تطبيقات Explorer. للإلهام ، تحقق من

التطبيقات التي تم إنشاؤها باستخدام Ultralytics مستكشف

جرب العرض التوضيحي لواجهة المستخدم الرسومية استنادا إلى واجهة برمجة تطبيقات Explorer

قريباً

  • [] دمج تسميات محددة من مجموعات البيانات. مثال - استيراد الكل person تسميات من COCO و car تسميات من سيتي سكيب
  • [] قم بإزالة الصور التي تحتوي على مؤشر تشابه أعلى من الحد المحدد
  • [] استمرار مجموعات البيانات الجديدة تلقائيا بعد دمج / إزالة الإدخالات
  • [] تصورات مجموعة البيانات المتقدمة


Created 2024-01-07, Updated 2024-06-18
Authors: glenn-jocher (11), 0xSynapse (1), RizwanMunawar (2), AyushExel (2)

التعليقات