Two-Stage Object Detectors
استكشف آليات كواشف الكائنات ذات المرحلتين، مع التركيز على مقترحات المناطق والتصنيف. تعلم لماذا تتصدر النماذج الحديثة مثل Ultralytics YOLO26 الآن.
تعد كاشفات الأشياء ثنائية المرحلة فئة متطورة من بنيات التعلم العميق (DL) المستخدمة في الرؤية الحاسوبية لتحديد وتحديد مواقع العناصر داخل الصورة. وعلى عكس نظيراتها أحادية المرحلة، التي تجري عملية الاكتشاف في تمرير واحد، تقسم هذه النماذج المهمة إلى مرحلتين متميزتين: اقتراح المنطقة وتصنيف الأشياء. وقد تم ابتكار هذا النهج المنقسم لإعطاء الأولوية لدقة التحديد العالية، مما يجعل هذه الكاشفات ذات أهمية تاريخية في تطور الذكاء الاصطناعي (AI). ومن خلال فصل "أين" عن "ماذا"، غالباً ما تحقق الكاشفات ثنائية المرحلة دقة فائقة، لا سيما مع الأشياء الصغيرة أو المحجوبة، على الرغم من أن ذلك يأتي عادةً على حساب زيادة الموارد الحاسوبية وبطء زمن الانتقال للاستدلال.
العملية ثنائية المرحلة#
تعتمد بنية الكاشف ثنائي المرحلة على سير عمل تسلسلي يحاكي كيفية قيام الإنسان بفحص المشهد بعناية.
-
اقتراح المنطقة: في المرحلة الأولى، يقوم النموذج بمسح الصورة المدخلة لتحديد المناطق المحتملة التي قد توجد فيها أشياء. ويقوم مكون يُعرف باسم شبكة اقتراح المناطق (RPN) بتوليد مجموعة متفرقة من مربعات المرشحين، والتي تُعرف غالباً بمناطق الاهتمام (RoIs). وتعمل هذه المرحلة على تصفية غالبية الخلفية، مما يسمح للشبكة بتركيز قوة المعالجة على المناطق ذات الصلة.
-
التصنيف والتحسين: في المرحلة الثانية، يستخرج النموذج الميزات من مناطق المرشحين هذه باستخدام شبكات العصبونات التلافيفية (CNNs). بعد ذلك، يخصص تسمية فئة محددة (مثل "شخص"، "مركبة") لكل منطقة ويقوم بتحسين إحداثيات مربع التحديد لتطويق الكائن بإحكام.
تشمل الأمثلة البارزة على هذه البنية عائلة R-CNN، وتحديداً Faster R-CNN وMask R-CNN، اللتين وضعتا المعيار للمعايير الأكاديمية لعدة سنوات.
المقارنة مع كاشفات الأجسام أحادية المرحلة#
من المفيد التمييز بين النماذج ثنائية المرحلة وكاشفات الأشياء أحادية المرحلة مثل كاشف الصناديق المتعددة أحادي الطلقة (SSD) وسلسلة Ultralytics YOLO. بينما تعطي النماذج ثنائية المرحلة الأولوية لـالدقة من خلال معالجة المناطق بشكل منفصل، تصوغ النماذج أحادية المرحلة عملية الاكتشاف كمشكلة انحدار واحدة، حيث تربط بكسلات الصورة مباشرة بإحداثيات مربع التحديد واحتمالات الفئات.
تاريخياً، أدى ذلك إلى مفاضلة: كانت النماذج ثنائية المرحلة أكثر دقة ولكنها أبطأ، بينما كانت النماذج أحادية المرحلة أسرع ولكنها أقل دقة. ومع ذلك، فقد أدت التطورات الحديثة إلى طمس هذا الخط. أصبحت النماذج الحديثة مثل YOLO26 تستخدم الآن بنيات شاملة تنافس دقة الكاشفات ثنائية المرحلة مع الحفاظ على السرعة اللازمة لـالاستدلال الفوري.
تطبيقات العالم الحقيقي#
نظرًا لتركيزها على الدقة والاسترجاع، يُفضل غالبًا استخدام الكاشفات ثنائية المرحلة في السيناريوهات التي تكون فيها السلامة والتفاصيل أكثر أهمية من سرعة المعالجة الخام.
- التصوير التشخيصي الطبي: في مجال الذكاء الاصطناعي في الرعاية الصحية, يمكن أن يكون تفويت التشخيص أمرًا بالغ الأهمية. تُستخدم البنيات ثنائية المرحلة بشكل متكرر في تحليل الصور الطبية للكشف عن الشذوذ مثل الأورام في الأشعة السينية أو فحوصات التصوير بالرنين المغناطيسي. تساعد هذه العملية متعددة الخطوات في ضمان عدم إغفال الآفات الصغيرة وسط خلفيات الأنسجة المعقدة، مما يوفر لأطباء الأشعة مساعدة آلية عالية الثقة.
- الفحص الصناعي عالي الدقة: في التصنيع الذكي, تستخدم أنظمة الفحص البصري الآلي هذه النماذج لتحديد العيوب المجهرية على خطوط التجميع. على سبيل المثال، يتطلب اكتشاف كسر دقيق في شفرة توربين دقة عالية في التقاطع فوق الاتحاد (IoU) التي توفرها الكاشفات ثنائية المرحلة، مما يضمن أن المكونات الخالية من العيوب فقط هي التي تنتقل إلى المرحلة التالية من الإنتاج.
تنفيذ الكشف الحديث#
بينما أسست الكاشفات ثنائية المرحلة الأساس للرؤية عالية الدقة، غالباً ما يستخدم المطورون المعاصرون نماذج أحادية المرحلة متقدمة توفر أداءً قابلاً للمقارنة مع سير عمل نشر أسهل بكثير. تعمل منصة Ultralytics على تبسيط تدريب ونشر هذه النماذج، وإدارة مجموعات البيانات وموارد الحوسبة بكفاءة.
يوضح مثال Python التالي كيفية تحميل وتشغيل الاستدلال باستخدام مسار عمل حديث لاكتشاف الأشياء مع ultralytics، مما يحقق نتائج عالية الدقة تشبه النهج التقليدية ثنائية المرحلة ولكن بكفاءة أكبر:
from ultralytics import YOLO
# Load the YOLO26 model, a modern high-accuracy detector
model = YOLO("yolo26n.pt")
# Run inference on an image to detect objects
results = model("https://ultralytics.com/images/bus.jpg")
# Process results (bounding boxes, classes, and confidence scores)
for result in results:
result.show() # Display the detection outcomes
print(result.boxes.conf) # Print confidence scores





