إجراء عمليات بحث في الرؤية باستخدام Milvus و FiftyOne
FiftyOne هي أداة مفتوحة المصدر لبناء مجموعات بيانات ونماذج رؤية حاسوبية عالية الجودة. يساعدك هذا الدليل على دمج إمكانيات البحث عن التشابه الخاصة ب Milvus في FiftyOne، مما يتيح لك إجراء عمليات بحث عن الرؤية على مجموعات البيانات الخاصة بك.
يوفر FiftyOne واجهة برمجة تطبيقات لإنشاء مجموعات Milvus، وتحميل المتجهات، وتشغيل استعلامات التشابه، سواءً برمجيًا في Python أو عبر التأشير والنقر في التطبيق. يركز العرض التوضيحي في هذه الصفحة على التكامل البرمجي.
المتطلبات الأساسية
قبل البدء، تأكد من أن لديك ما يلي:
- خادم ميلفوس قيد التشغيل.
- بيئة بايثون مع تثبيت
pymilvus
وfiftyone
. - مجموعة بيانات من الصور للبحث فيها.
متطلبات التثبيت
في هذا المثال، سنستخدم في هذا المثال pymilvus
و fiftyone
. يمكنك تثبيتها عن طريق تشغيل الأوامر التالية:
python3 -m pip install pymilvus fiftyone torch torchvision
الوصفة الأساسية
سير العمل الأساسي لاستخدام ميلفوس لإنشاء فهرس تشابه على مجموعات بيانات فيفتي ون واستخدامه للاستعلام عن بياناتك هو كالتالي
- تحميل مجموعة بيانات إلى FiftyOne
- احسب التضمينات المتجهة للعينات أو البقع في مجموعة البيانات الخاصة بك، أو حدد نموذجًا لاستخدامه في إنشاء التضمينات.
- استخدم
compute_similarity()
الطريقة لإنشاء فهرس تشابه ميلفوس للعينات أو رقع الكائنات في مجموعة البيانات عن طريق تعيين المعلمةbackend="milvus"
وتحديدbrain_key
من اختيارك. - استخدم فهرس تشابه ميلفوس هذا للاستعلام عن بياناتك باستخدام
sort_by_similarity()
. - إذا رغبت في ذلك، احذف الفهرس.
الإجراءات
يوضح المثال أدناه سير العمل أعلاه.
1. تحميل مجموعة بيانات إلى FiftyOne وحساب التضمينات للعينات
تستخدم الشيفرة التالية مجموعة الصور النموذجية التي يوفرها FiftyOne لتوضيح التكامل. يمكنك إعداد مجموعة الصور الخاصة بك بالرجوع إلى هذه المقالة.
import fiftyone as fo
import fiftyone.brain as fob
import fiftyone.zoo as foz
# Step 1: Load your data into FiftyOne
dataset = foz.load_zoo_dataset("quickstart")
# Steps 2 and 3: Compute embeddings and create a similarity index
milvus_index = fob.compute_similarity(
dataset,
brain_key="milvus_index",
backend="milvus",
)
2. إجراء عمليات البحث عن تشابه الرؤية
يمكنك الآن استخدام فهرس التشابه Milvus لإجراء عمليات بحث عن تشابه الرؤية على مجموعة البيانات الخاصة بك.
# Step 4: Query your data
query = dataset.first().id # query by sample ID
view = dataset.sort_by_similarity(
query,
brain_key="milvus_index",
k=10, # limit to 10 most similar samples
)
# Step 5 (optional): Cleanup
# Delete the Milvus collection
milvus_index.cleanup()
# Delete run record from FiftyOne
dataset.delete_brain_run("milvus_index")
3. حذف الفهرس
إذا لم تعد بحاجة إلى فهرس تشابه ميلفوس فيمكنك حذفه باستخدام الكود التالي:
# Step 5: Delete the index
milvus_index.delete()
استخدام الواجهة الخلفية لميلفوس
بشكل افتراضي، استدعاء compute_similarity()
أو sort_by_similarity()
سيستخدم الواجهة الخلفية ل sklearn.
لاستخدام الواجهة الخلفية لـ Milvus، ما عليك سوى تعيين معلمة الواجهة الخلفية الاختيارية compute_similarity()
إلى "milvus"
:
import fiftyone.brain as fob
fob.compute_similarity(..., backend="milvus", ...)
بدلاً من ذلك، يمكنك تهيئة FiftyOne بشكل دائم لاستخدام الواجهة الخلفية لـ Milvus من خلال تعيين متغير البيئة التالي
export FIFTYONE_BRAIN_DEFAULT_SIMILARITY_BACKEND=milvus
أو عن طريق تعيين المعلمة default_similarity_backend
من تكوين الدماغ الموجود في ~/.fiftyone/brain_config.json
:
{
"default_similarity_backend": "milvus"
}
المصادقة
إذا كنت تستخدم خادم Milvus مخصص، يمكنك توفير بيانات الاعتماد الخاصة بك بعدة طرق.
متغيرات البيئة (موصى بها)
الطريقة الموصى بها لتهيئة بيانات اعتماد ميلفوس الخاصة بك هي تخزينها في متغيرات البيئة الموضحة أدناه، والتي يتم الوصول إليها تلقائيًا بواسطة فيفتي ون كلما تم إجراء اتصال بميلفوس.
export FIFTYONE_BRAIN_SIMILARITY_MILVUS_URI=XXXXXX
export FIFTYONE_BRAIN_SIMILARITY_MILVUS_USER=XXXXXX
export FIFTYONE_BRAIN_SIMILARITY_MILVUS_PASSWORD=XXXXXX
# also available if necessary
export FIFTYONE_BRAIN_SIMILARITY_MILVUS_SECURE=true
export FIFTYONE_BRAIN_SIMILARITY_MILVUS_TOKEN=XXXXXX
export FIFTYONE_BRAIN_SIMILARITY_MILVUS_DB_NAME=XXXXXX
export FIFTYONE_BRAIN_SIMILARITY_MILVUS_CLIENT_KEY_PATH=XXXXXX
export FIFTYONE_BRAIN_SIMILARITY_MILVUS_CLIENT_PEM_PATH=XXXXXX
export FIFTYONE_BRAIN_SIMILARITY_MILVUS_CA_PEM_PATH=XXXXXX
export FIFTYONE_BRAIN_SIMILARITY_MILVUS_SERVER_PEM_PATH=XXXXXX
export FIFTYONE_BRAIN_SIMILARITY_MILVUS_SERVER_NAME=XXXXXX
تهيئة دماغ فيفتي ون
يمكنك أيضًا تخزين بيانات الاعتماد الخاصة بك في تكوين الدماغ الموجود في ~/.fiftyone/brain_config.json
:
{
"similarity_backends": {
"milvus": {
"uri": "XXXXXX",
"user": "XXXXXX",
"password": "XXXXXX",
# also available if necessary
"secure": true,
"token": "XXXXXX",
"db_name": "XXXXXX",
"client_key_path": "XXXXXX",
"client_pem_path": "XXXXXX",
"ca_pem_path": "XXXXXX",
"server_pem_path": "XXXXXX",
"server_name": "XXXXXX"
}
}
}
لاحظ أن هذا الملف لن يكون موجوداً حتى تقوم بإنشائه.
وسيطات الكلمات الرئيسية
يمكنك تقديم بيانات اعتماد ميلفوس يدويًا كوسيطات كلمات رئيسية في كل مرة تستدعي فيها طرقًا مثل compute_similarity()
التي تتطلب الاتصال بـ Milvus:
import fiftyone.brain as fob
milvus_index = fob.compute_similarity(
...
backend="milvus",
brain_key="milvus_index",
uri="XXXXXX",
user="XXXXXX",
password="XXXXXX",
# also available if necessary
secure=True,
token="XXXXXX",
db_name="XXXXXX",
client_key_path="XXXXXX",
client_pem_path="XXXXXX",
ca_pem_path="XXXXXX",
server_pem_path="XXXXXX",
server_name="XXXXXX",
)
لاحظ أنه عند استخدام هذه الاستراتيجية، يجب عليك توفير بيانات الاعتماد يدويًا عند تحميل فهرس لاحقًا عبر load_brain_results()
:
milvus_index = dataset.load_brain_results(
"milvus_index",
uri="XXXXXX",
user="XXXXXX",
password="XXXXXX",
# also available if necessary
secure=True,
token="XXXXXX",
db_name="XXXXXX",
client_key_path="XXXXXX",
client_pem_path="XXXXXX",
ca_pem_path="XXXXXX",
server_pem_path="XXXXXX",
server_name="XXXXXX",
)
معلمات تكوين ميلفوس
تدعم الواجهة الخلفية لـ Milvus مجموعة متنوعة من معلمات الاستعلام التي يمكن استخدامها لتخصيص استعلامات التشابه الخاصة بك. تتضمن هذه المعلمات ما يلي:
اسم_المجموعة(بلا): اسم مجموعة Milvus المراد استخدامها أو إنشاؤها. إذا لم يتم توفير أي منها، سيتم إنشاء مجموعة جديدة
المقياس ("dotproduct"): مقياس مسافة التضمين المراد استخدامه عند إنشاء فهرس جديد. القيم المدعومة هي (
"dotproduct"
،"euclidean"
)مستوى_الاتساق ("الجلسة"): مستوى الاتساق المطلوب استخدامه. القيم المدعومة هي (
"Strong"
،"Session"
، ،"Bounded"
،"Eventually"
)
للحصول على معلومات مفصلة حول هذه المعلمات، راجع وثائق مصادقة Milvus ووثائق مستويات الاتساق في Milvus.
يمكنك تحديد هذه المعلمات عبر أي من الاستراتيجيات الموضحة في القسم السابق. فيما يلي مثال على تكوين الدماغ الذي يتضمن جميع المعلمات المتاحة:
{
"similarity_backends": {
"milvus": {
"collection_name": "your_collection",
"metric": "dotproduct",
"consistency_level": "Strong"
}
}
}
ومع ذلك، عادةً ما يتم تمرير هذه المعلمات مباشرةً إلى compute_similarity()
لتكوين فهرس جديد محدد:
milvus_index = fob.compute_similarity(
...
backend="milvus",
brain_key="milvus_index",
collection_name="your_collection",
metric="dotproduct",
consistency_level="Strong",
)
إدارة عمليات تشغيل الدماغ
يوفر FiftyOne مجموعة متنوعة من الطرق التي يمكنك استخدامها لإدارة عمليات تشغيل الدماغ.
على سبيل المثال، يمكنك استدعاء list_brain_runs()
لرؤية مفاتيح الدماغ المتوفرة في مجموعة بيانات:
import fiftyone.brain as fob
# List all brain runs
dataset.list_brain_runs()
# Only list similarity runs
dataset.list_brain_runs(type=fob.Similarity)
# Only list specific similarity runs
dataset.list_brain_runs(
type=fob.Similarity,
patches_field="ground_truth",
supports_prompts=True,
)
أو يمكنك استخدام get_brain_info()
لاسترجاع معلومات حول تكوين تشغيل دماغ:
info = dataset.get_brain_info(brain_key)
print(info)
استخدم load_brain_results()
لتحميل SimilarityIndex
مثيل لتشغيل دماغ.
يمكنك استخدام rename_brain_run()
لإعادة تسمية مفتاح الدماغ المرتبط بتشغيل نتائج تشابه موجودة:
dataset.rename_brain_run(brain_key, new_brain_key)
وأخيراً، يمكنك استخدام delete_brain_run()
لحذف تشغيل دماغ:
dataset.delete_brain_run(brain_key)
استدعاء delete_brain_run()
يحذف فقط سجل التشغيل الدماغي من مجموعة بيانات FiftyOne، ولن يحذف أي مجموعة Milvus مرتبطة بها، وهو ما يمكنك القيام به على النحو التالي:
# Delete the Milvus collection
milvus_index = dataset.load_brain_results(brain_key)
milvus_index.cleanup()
للاطلاع على سير عمل البحث المتجه الشائع على مجموعة بيانات FiftyOne باستخدام الواجهة الخلفية لـ Milvus، انظر الأمثلة هنا.