البحث الدلالي عن الصور باستخدام OpenAI CLIP و Meta FAISS
مقدمة
يرشدك هذا الدليل خلال إنشاء محرك بحث دلالي عن الصور باستخدام OpenAI CLIP و Meta FAISS و Flask. من خلال الجمع بين تضمينات اللغة المرئية القوية لـ CLIP مع بحث الجوار الأقرب الفعال لـ FAISS، يمكنك إنشاء واجهة ويب كاملة الوظائف حيث يمكنك استرداد الصور ذات الصلة باستخدام استعلامات اللغة الطبيعية.
شاهد: كيف يعمل البحث عن التشابه | البحث المرئي باستخدام OpenAI CLIP و META FAISS وحزمة Ultralytics 🎉
معاينة بصرية للبحث الدلالي عن الصور
كيف يعمل؟
- يستخدم CLIP مشفر رؤية (مثل ResNet أو ViT) للصور ومشفر نصوص (يعتمد على Transformer) للغة لإسقاط كليهما في نفس فضاء التضمين متعدد الوسائط. يتيح ذلك المقارنة المباشرة بين النص والصور باستخدام تشابه جيب التمام.
- FAISS (بحث التشابه في الذكاء الاصطناعي من فيسبوك) يبني فهرسًا لتضمينات الصور ويتيح استرجاعًا سريعًا وقابلاً للتطوير لأقرب المتجهات لاستعلام معين.
- Flask يوفر واجهة ويب بسيطة لإرسال استعلامات باللغة الطبيعية وعرض الصور المتطابقة دلاليًا من الفهرس.
يدعم هذا الهيكل البحث بدون أمثلة، مما يعني أنك لست بحاجة إلى تسميات أو فئات، فقط بيانات الصورة ومطالبة جيدة.
البحث الدلالي عن الصور باستخدام حزمة Ultralytics Python
تحذير مسار الصورة
إذا كنت تستخدم صورك الخاصة، فتأكد من توفير مسار مطلق إلى دليل الصور. بخلاف ذلك، قد لا تظهر الصور على صفحة الويب بسبب قيود خدمة الملفات الخاصة بـ Flask.
from ultralytics import solutions
app = solutions.SearchApp(
# data = "path/to/img/directory" # Optional, build search engine with your own images
device="cpu" # configure the device for processing i.e "cpu" or "cuda"
)
app.run(debug=False) # You can also use `debug=True` argument for testing
VisualAISearch
الفئة
يقوم هذا الصنف بتنفيذ جميع عمليات الواجهة الخلفية:
- يقوم بتحميل أو إنشاء فهرس FAISS من الصور المحلية.
- يستخرج تضمينات الصور والنصوص باستخدام CLIP.
- يجري بحثًا عن التشابه باستخدام تشابه جيب التمام.
البحث عن صور مماثلة
تحذير مسار الصورة
إذا كنت تستخدم صورك الخاصة، فتأكد من توفير مسار مطلق إلى دليل الصور. بخلاف ذلك، قد لا تظهر الصور على صفحة الويب بسبب قيود خدمة الملفات الخاصة بـ Flask.
from ultralytics import solutions
searcher = solutions.VisualAISearch(
# data = "path/to/img/directory" # Optional, build search engine with your own images
device="cuda" # configure the device for processing i.e "cpu" or "cuda"
)
results = searcher("a dog sitting on a bench")
# Ranked Results:
# - 000000546829.jpg | Similarity: 0.3269
# - 000000549220.jpg | Similarity: 0.2899
# - 000000517069.jpg | Similarity: 0.2761
# - 000000029393.jpg | Similarity: 0.2742
# - 000000534270.jpg | Similarity: 0.2680
VisualAISearch
المعلمات
يحدد الجدول أدناه المعلمات المتاحة لـ VisualAISearch
:
الوسيطة | النوع | افتراضي | الوصف |
---|---|---|---|
data |
str |
'images' |
مسار إلى دليل الصور المستخدم للبحث عن التشابه. |
الوسيطة | النوع | افتراضي | الوصف |
---|---|---|---|
device |
str |
None |
يحدد الجهاز الخاص بالاستدلال (على سبيل المثال، cpu , cuda:0 أو 0 ). يسمح للمستخدمين بالاختيار بين CPU أو GPU معين أو أجهزة حساب أخرى لتنفيذ النموذج. |
مزايا البحث الدلالي عن الصور باستخدام CLIP و FAISS
يوفر بناء نظام البحث الدلالي عن الصور الخاص بك باستخدام CLIP و FAISS العديد من المزايا المقنعة:
-
إمكانيات Zero-Shot: لا تحتاج إلى تدريب النموذج على مجموعة البيانات الخاصة بك. يتيح لك تعلم Zero-Shot الخاص بـ CLIP إجراء استعلامات بحث على أي مجموعة بيانات صور باستخدام لغة طبيعية حرة، مما يوفر الوقت والموارد.
-
فهم شبيه بالبشر: على عكس محركات البحث القائمة على الكلمات الرئيسية، يفهم CLIP السياق الدلالي. يمكنه استرجاع الصور بناءً على استعلامات مجردة أو عاطفية أو علائقية مثل "طفل سعيد في الطبيعة" أو "أفق مدينة مستقبلية في الليل".
-
لا حاجة إلى تسميات أو بيانات وصفية: تتطلب أنظمة البحث عن الصور التقليدية بيانات مصنفة بعناية. هذا النهج يحتاج فقط إلى صور أولية. يقوم CLIP بإنشاء تضمينات دون الحاجة إلى أي تعليقات توضيحية يدوية.
-
بحث مرن وقابل للتطوير: يتيح FAISS بحثًا سريعًا عن أقرب جار حتى مع مجموعات البيانات واسعة النطاق. إنه مُحسَّن للسرعة والذاكرة، ممّا يسمح باستجابة في الوقت الفعلي حتى مع الآلاف (أو الملايين) من التضمينات.
-
تطبيقات عبر المجالات: سواء كنت تقوم ببناء أرشيف صور شخصي، أو أداة إلهام إبداعي، أو محرك بحث عن المنتجات، أو حتى نظام توصية فنية، فإن هذه الحزمة تتكيف مع المجالات المتنوعة بأقل قدر من التعديل.
الأسئلة الشائعة
كيف يفهم CLIP كلاً من الصور والنصوص؟
CLIP (Contrastive Language Image Pretraining) هو نموذج تم تطويره بواسطة OpenAI ويتعلم ربط المعلومات المرئية واللغوية. يتم تدريبه على مجموعة بيانات ضخمة من الصور المقترنة بتعليقات لغة طبيعية. يتيح هذا التدريب تعيين كل من الصور والنصوص في مساحة تضمين مشتركة، بحيث يمكنك مقارنتها مباشرة باستخدام تشابه المتجهات.
لماذا يعتبر CLIP قويًا جدًا لمهام الذكاء الاصطناعي؟
ما يميز CLIP هو قدرته على التعميم. فبدلاً من تدريبه فقط على تسميات أو مهام محددة، فإنه يتعلم من اللغة الطبيعية نفسها. وهذا يسمح له بالتعامل مع الاستعلامات المرنة مثل "رجل يركب جت سكي" أو "منظر حلم سريالي"، مما يجعله مفيدًا لكل شيء بدءًا من التصنيف وحتى البحث الدلالي الإبداعي، دون الحاجة إلى إعادة التدريب.
ما الذي يفعله FAISS بالضبط في هذا المشروع (البحث الدلالي)؟
FAISS (Facebook AI Similarity Search) هي مجموعة أدوات تساعدك على البحث بكفاءة عالية في المتجهات عالية الأبعاد. بمجرد أن يقوم CLIP بتحويل صورك إلى تضمينات، فإن FAISS يجعل العثور على أقرب التطابقات لاستعلام نصي أمرًا سريعًا وسهلاً، وهو مثالي لاسترجاع الصور في الوقت الفعلي.
لماذا نستخدم حزمة Python الخاصة بـ Ultralytics إذا كان CLIP و FAISS من OpenAI و Meta؟
بينما تم تطوير CLIP و FAISS بواسطة OpenAI و Meta على التوالي، فإن حزمة Ultralytics Python تبسط دمجهما في خط أنابيب بحث صور دلالي كامل في سير عمل من سطرين يعمل ببساطة:
البحث عن صور مماثلة
from ultralytics import solutions
searcher = solutions.VisualAISearch(
# data = "path/to/img/directory" # Optional, build search engine with your own images
device="cuda" # configure the device for processing i.e "cpu" or "cuda"
)
results = searcher("a dog sitting on a bench")
# Ranked Results:
# - 000000546829.jpg | Similarity: 0.3269
# - 000000549220.jpg | Similarity: 0.2899
# - 000000517069.jpg | Similarity: 0.2761
# - 000000029393.jpg | Similarity: 0.2742
# - 000000534270.jpg | Similarity: 0.2680
تتعامل هذه التنفيذات عالية المستوى مع:
- إنشاء تضمين للصور والنصوص المستند إلى CLIP.
- إنشاء وإدارة فهرس FAISS.
- بحث دلالي فعال باستخدام تشابه جيب التمام.
- تحميل الصور المستند إلى الدليل و التصور.
هل يمكنني تخصيص الواجهة الأمامية لهذا التطبيق؟
نعم، يمكنك ذلك بالتأكيد. يستخدم الإعداد الحالي Flask مع واجهة HTML أمامية أساسية، ولكن يمكنك استبدالها بواجهة HTML الخاصة بك أو حتى إنشاء شيء أكثر ديناميكية باستخدام React أو Vue أو أي إطار عمل أمامي آخر. يمكن أن يعمل Flask بسهولة كواجهة برمجة تطبيقات خلفية للواجهة المخصصة الخاصة بك.
هل من الممكن البحث في مقاطع الفيديو بدلاً من الصور الثابتة؟
ليس بشكل مباشر، ولكن هناك حل بسيط. يمكنك استخراج إطارات فردية من مقاطع الفيديو الخاصة بك (على سبيل المثال، واحدة كل ثانية)، والتعامل معها كصور مستقلة، وتغذيتها في النظام. بهذه الطريقة، يمكن لمحرك البحث فهرسة اللحظات المرئية من مقاطع الفيديو الخاصة بك دلاليًا.