Two-Stage Object Detectors
استكشف آليات كاشفات الكائنات ذات المرحلتين، مع التركيز على مقترحات المناطق والتصنيف. تعرّف على سبب تصدّر النماذج الحديثة مثل Ultralytics YOLO26 الآن.
كاشفات الأجسام ثنائية المراحل هي فئة متقدمة من معماريات التعلم العميق (DL) المستخدمة في رؤية الحاسوب لتحديد العناصر داخل الصورة وتعيين مواقعها. وعلى خلاف نظيراتها أحادية المرحلة، التي تنفذ الاكتشاف في تمريرة واحدة، تقسم هذه النماذج المهمة إلى مرحلتين متميزتين: اقتراح المناطق وتصنيف الأجسام. وقد ابتُكر هذا النهج ثنائي المسار لإعطاء الأولوية لدقة تحديد الموقع، ما جعل هذه الكاشفات ذات أهمية تاريخية في تطور الذكاء الاصطناعي (AI). ومن خلال فصل «أين» عن «ماذا»، تحقق الكاشفات ثنائية المراحل غالبًا دقة فائقة، لا سيما مع الأجسام الصغيرة أو المحجوبة، إلا أن ذلك يأتي عادةً على حساب زيادة الموارد الحاسوبية وارتفاع زمن استجابة الاستدلال.
العملية ثنائية المراحل#
تعتمد معمارية الكاشف ثنائي المراحل على سير عمل تسلسلي يحاكي الطريقة التي قد يفحص بها الإنسان مشهدًا بعناية.
-
اقتراح المناطق: في المرحلة الأولى، يفحص النموذج الصورة المُدخلة لتحديد المناطق المحتملة التي قد توجد فيها الأجسام. وينشئ مكوّن يُعرف باسم شبكة اقتراح المناطق (RPN) مجموعة متناثرة من الصناديق المرشحة، يُشار إليها غالبًا باسم مناطق الاهتمام (RoIs). وتعمل هذه المرحلة على تصفية معظم الخلفية، مما يتيح للشبكة تركيز القدرة الحاسوبية على المناطق ذات الصلة.
-
التصنيف والتحسين: في المرحلة الثانية، يستخرج النموذج السمات من هذه المناطق المرشحة باستخدام الشبكات العصبية الالتفافية (CNNs). ثم يعيّن تسمية فئة محددة (مثل «شخص» أو «مركبة») لكل منطقة، ويحسّن إحداثيات الصندوق المحيط ليحيط بالجسم بإحكام.
تشمل الأمثلة البارزة على هذه المعمارية عائلة R-CNN، وتحديدًا Faster R-CNN وMask R-CNN، اللذين وضعا معيار الاختبارات المعيارية الأكاديمية لعدة سنوات.
مقارنة مع الكاشفات أحادية المرحلة#
من المفيد التمييز بين النماذج ثنائية المراحل وكاشفات الأجسام أحادية المرحلة مثل كاشف Single Shot MultiBox (SSD) وسلسلة Ultralytics YOLO. فبينما تعطي النماذج ثنائية المراحل الأولوية لـالدقة عبر معالجة المناطق بشكل منفصل، تصوغ النماذج أحادية المرحلة عملية الاكتشاف باعتبارها مسألة انحدار واحدة، إذ تربط وحدات بكسل الصورة مباشرةً بإحداثيات الصناديق المحيطة واحتمالات الفئات.
تسبب ذلك تاريخيًا في مفاضلة: كانت النماذج ثنائية المراحل أكثر دقة لكنها أبطأ، بينما كانت النماذج أحادية المرحلة أسرع لكنها أقل إحكامًا. غير أن التطورات الحديثة طمست هذا الفارق. فالنماذج المتقدمة مثل YOLO26 تستخدم الآن معماريات من طرف إلى طرف تضاهي دقة الكاشفات ثنائية المراحل، مع الحفاظ على السرعة اللازمة لـالاستدلال في الوقت الفعلي.
التطبيقات الواقعية#
وبفضل تركيزها على الإحكام والاستدعاء، تُفضَّل الكاشفات ثنائية المراحل غالبًا في السيناريوهات التي تكون فيها السلامة والتفاصيل أهم من سرعة المعالجة الخام.
- التصوير التشخيصي الطبي: في مجال الذكاء الاصطناعي في الرعاية الصحية، قد يكون تفويت تشخيص ما أمرًا بالغ الخطورة. وتُستخدم المعماريات ثنائية المراحل بصورة متكررة في تحليل الصور الطبية لاكتشاف حالات شاذة مثل الأورام في صور الأشعة السينية أو فحوصات MRI. وتساعد العملية متعددة الخطوات على ضمان عدم إغفال الآفات الصغيرة وسط خلفيات الأنسجة المعقدة، مما يوفر لأخصائيي الأشعة مساعدة آلية عالية الثقة.
- الفحص الصناعي عالي الدقة: في التصنيع الذكي، تستخدم أنظمة الفحص البصري الآلي هذه النماذج لتحديد العيوب المجهرية على خطوط التجميع. فعلى سبيل المثال، يتطلب اكتشاف شرخ شعري في شفرة توربين دقة عالية في التقاطع على الاتحاد (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








