R-CNN, region by region


Version
Keep scores above
NMS: suppress if IoU >
1. Find regions
2. Check each one
3. Clean up (NMS)
Show

Checking one region

region
→
squeezed

Work done so far

الفكرة كلّها.
تمرّر صفحة الـ object detection نافذة واحدة ثابتة الحجم فوق كلّ موضع. أمّا R-CNN (2014) فيفحص أماكن أقلّ بكثير. أوّلًا يقترح regions: boxes قد تحوي شيئًا. ويجدها بالـ selective search، الذي يبدأ من رقع صغيرة ويظلّ يدمج الجارتين الأكثر تشابهًا؛ وكلّ مجموعة مدموجة تعطي box واحدًا. ثمّ يأخذ كلّ region، ويقصّه، ويضغطه إلى الحجم الثابت الذي يتوقّعه الـ CNN، ويشغّل الـ CNN عليه ليحصل على score للفئة. الـ region المضغوط له الحجم الصحيح دائمًا، فتبدو القطّة الكبيرة والصغيرة متماثلتين للـ CNN. ونادرًا ما يطابق الـ region المقترح الحيوان تمامًا، لذا يزحزح R-CNN أيضًا كلّ حافّة من حوافّ الـ box لتطابق أفضل (box regression). وأخيرًا يحذف الـ NMS المكرّرات.

لاحظ Fast R-CNN (2015) أنّ الـ regions تتداخل، فيشغّل R-CNN الـ CNN على الـ pixels نفسها مرّة بعد مرّة. فهو يشغّل الـ CNN مرّة واحدة على الصورة كلّها، ثمّ يقصّ كلّ region من الـ feature map الناتج ويعمل له pool إلى grid ثابت (RoI pooling). الـ regions نفسها، وتشغيل واحد للـ CNN.

واستبدل Faster R-CNN (2015) الـ selective search أيضًا. فشبكة صغيرة، الـ Region Proposal Network، تنظر إلى الـ feature map نفسه، وتضع بضعة anchor boxes بأحجام مختلفة في كلّ موضع، وتعطي كلًّا منها score: هل يوجد شيء هنا؟ ولا يصير regions إلّا أفضل بضع عشرات. الاقتراح والفحص يتشاركان الآن تشغيلًا واحدًا للـ CNN.

ما المُحاكى هنا.
لا توجد شبكة مدرَّبة في هذه الصفحة. الـ «CNN» هو score الـ template من صفحة الـ object detection: مدى تطابق الـ region المضغوط مع قطّة أو كلب صغير، من −1 إلى +1. والـ «feature map» هو الصورة مصغّرة 4 مرّات؛ والحقيقي فيه مئات الـ channels. والـ detector الحقيقي يتعلّم زحزحة الـ box ويقوم بها في خطوة واحدة؛ أمّا هذه الصفحة فتجدها بتجربة حركات صغيرة لكلّ حافّة والإبقاء على أفضل score. وما تعرضه الصفحة كما هو في الحقيقة: من أين تأتي الـ regions، وماذا يُقصّ، وكم مرّة يجب أن يعمل الـ CNN.

أمور تستحقّ التجربة:
1. على R-CNN، اضغط Propose regions. يبدأ الـ selective search من 900 رقعة صغيرة وينتهي بـ 111 region؛ معظمها خلفيّة. اضغط Check them all وراقب العدّاد: 111 region تأخذ 111 تشغيلًا للـ CNN. وفي صورة حقيقية يفحص R-CNN نحو 2,000 region — 2,000 تشغيل للـ CNN لصورة واحدة. ثمّ Run NMS: يُعثَر على الحيوانات الخمسة كلّها.

2. راقب اللوحة أثناء الفحص: الـ region حول حيوان يحصل عادةً على score بين 0.5 و0.8 فقط كما اقتُرح، لأنّه لا يطابق الحيوان تمامًا. والزحزحة ترفعه إلى 0.96–0.99. قبل الزحزحة يتجاوز regionان فقط الـ cut-off البالغ 0.70؛ وبعدها 8.

3. انتقل إلى Fast R-CNN وشغّله من جديد. الـ 111 region نفسها، لكنّ العدّاد يقول تشغيلًا واحدًا للـ CNN. اضغط The feature map لترى ما يُقصّ منه كلّ region. تخرج الـ scores أقلّ قليلًا (0.86–0.97)، لأنّ الـ feature map أخشن من الصورة — وهذا ثمن مشاركة تشغيل واحد للـ CNN. ويُعثَر على الحيوانات الخمسة كلّها أيضًا.

4. انتقل إلى Faster R-CNN. تعطي الـ Region Proposal Network الـ scores لـ 4,900 anchor وتُبقي 50 region فقط — أقلّ من نصف ما أعطاه الـ selective search — ويبقى كلّ شيء تشغيلًا واحدًا للـ CNN. يُعثَر على الحيوانات الخمسة كلّها؛ والكلب الكبير هو الأضعف، عند 0.77.

5. أنزِل الـ cut-off للـ score إلى 0.50 على R-CNN: يظهر إنذار كاذب واحد: رقعة صغيرة من وجه الكلب الكبير، تحصل على 0.50 كقطّة. الـ cut-off الأدنى يلتقط أكثر، صوابًا وخطأً.