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 পাতা প্রতিটি অবস্থানে একটি স্থির মাপের window সরায়। R-CNN (2014) অনেক কম জায়গা দেখে। প্রথমে এটি region প্রস্তাব করে: এমন box যেখানে কোনো জিনিস থাকতে পারে। এগুলো খুঁজে পায় selective search দিয়ে, যা ছোট ছোট টুকরো থেকে শুরু করে সবচেয়ে বেশি মিল থাকা দুটি প্রতিবেশীকে বারবার জোড়া দেয়; প্রতিটি জোড়া লাগানো দল একটি box দেয়। তারপর প্রতিটি region কেটে নেয়, CNN যে স্থির মাপ চায় তাতে চেপে আনে, আর তার ওপর CNN চালিয়ে একটি class score পায়। চাপা region-এর মাপ সবসময় ঠিক থাকে, তাই বড় বিড়াল আর ছোট বিড়াল CNN-এর কাছে একই রকম দেখায়। প্রস্তাবিত region কমই প্রাণীটির সঙ্গে ঠিকঠাক মেলে, তাই R-CNN আরও ভালো মেলাতে box-এর প্রতিটি কিনারা একটু সরায় (box regression)। শেষে NMS ডুপ্লিকেট সরায়।

Fast R-CNN (2015) লক্ষ করল যে region-গুলো একটির ওপর আরেকটি পড়ে, তাই R-CNN একই pixel-এর ওপর বারবার CNN চালায়। এটি পুরো ছবিতে CNN একবার চালায়, তারপর ফলাফলের feature map থেকে প্রতিটি region কেটে একটি স্থির grid-এ pool করে (RoI pooling)। একই region, একবার CNN চালানো।

Faster R-CNN (2015) selective search-ও বদলে দিল। একটি ছোট Region Proposal Network একই feature map দেখে, প্রতিটি অবস্থানে বিভিন্ন মাপের কয়েকটি anchor box বসায়, আর প্রতিটিকে score দেয়: এখানে কি কোনো জিনিস আছে? শুধু সেরা কয়েক ডজন region হয়। প্রস্তাব আর যাচাই এখন একবার CNN চালানো ভাগ করে নেয়।

এখানে কী simulate করা হয়েছে।
এই পাতায় কোনো trained নেটওয়ার্ক নেই। “CNN” হলো object detection পাতার template score: চাপা region একটি ছোট বিড়াল বা কুকুরের সঙ্গে কতটা মেলে, −1 থেকে +1। “feature map” হলো ছবিটি 4 গুণ ছোট করা; আসলটিতে শত শত channel থাকে। আসল detector box সরানোটা শেখে আর এক ধাপে করে; এই পাতা প্রতিটি কিনারা অল্প অল্প সরিয়ে দেখে সেরা score রেখে সেটি খুঁজে বের করে। পাতাটি যা আসলের মতোই দেখায়: region কোথা থেকে আসে, কী কেটে নেওয়া হয়, আর CNN-কে কতবার চলতে হয়।

যা করে দেখার মতো:
1. R-CNN-এ Propose regions চাপুন। selective search 900টি ছোট টুকরো থেকে শুরু করে 111টি region-এ শেষ হয়; বেশিরভাগই পটভূমি। Check them all চাপুন আর counter দেখুন: 111টি region-এ লাগে 111 বার CNN চালানো। আসল ছবিতে R-CNN প্রায় 2,000টি region দেখে — একটি ছবির জন্য 2,000 বার CNN। তারপর Run NMS: 5টি প্রাণীই পাওয়া যায়।

2. যাচাইয়ের সময় প্যানেলটি দেখুন: কোনো প্রাণীর চারপাশের region প্রস্তাবিত অবস্থায় সাধারণত মাত্র 0.5 থেকে 0.8 score পায়, কারণ এটি প্রাণীটির সঙ্গে ঠিকঠাক মেলে না। সরানোর পর এটি 0.96–0.99-এ ওঠে। সরানোর আগে মাত্র 2টি region 0.70 cut-off পার হয়; পরে 8টি।

3. Fast R-CNN-এ যান আর আবার চালান। একই 111টি region, কিন্তু counter বলে 1 বার CNN। The feature map চাপুন, দেখুন প্রতিটি region কী থেকে কাটা হয়। score একটু কম আসে (0.86–0.97), কারণ feature map ছবির চেয়ে মোটা দাগের — একবার CNN চালানো ভাগ করে নেওয়ার দাম। 5টি প্রাণীই তবুও পাওয়া যায়।

4. Faster R-CNN-এ যান। Region Proposal Network 4,900টি anchor-কে score দেয় আর মাত্র 50টি region রাখে — selective search যা দিয়েছিল তার অর্ধেকেরও কম — আর সবকিছু তবুও একবার CNN চালানো। 5টি প্রাণীই পাওয়া যায়; বড় কুকুরটি সবচেয়ে দুর্বল, 0.77-এ।

5. R-CNN-এ score cut-off 0.50-এ নামান: একটি ভুল সংকেত দেখা দেয়: বড় কুকুরের মুখের একটি ছোট টুকরো, বিড়াল হিসেবে 0.50 পায়। নিচু cut-off বেশি ধরে, ঠিক আর ভুল দুটোই।