Object Detection, box by box


Look for
Noise
Window stride
Keep scores above
NMS: suppress if IoU >
1. Slide the window
2. Clean up (NMS)
Show
What the detector sees: one brightness per pixel. Dashed boxes, once NMS is done, mark where the real animals are.

How well does this window match?

template
vs
window

IoU: how much do two boxes overlap?

 

মূল ধারণা।
একটি detector-কে দুটি প্রশ্নের উত্তর দিতে হয়: বিড়াল আছে কি? আর ঠিক কোথায়? সবচেয়ে পুরনো পদ্ধতিটি এই পাতায়। একটি বিড়ালের ছোট একটি ছবি নিন — template — আর edge detection পাতার filter-এর মতোই সেটিকে ছবির ওপর দিয়ে সরান, একবারে এক অবস্থান। প্রতিটি অবস্থানে, নিচের window কতটা মেলে তার একটি score দিন। যে window-এর score cut-off-এর ওপরে, সেটি একটি box হয়।

এখানে score হলো normalized correlation: window আর template দুটো থেকেই গড় উজ্জ্বলতা বাদ দিন, তারপর মাপুন দুটি নকশা কতটা মেলে। এটি +1 (একই নকশা) থেকে 0 (সম্পর্কহীন) হয়ে −1 (ঠিক উল্টো) পর্যন্ত যায়, আর window-টি সব মিলিয়ে বেশি উজ্জ্বল না অন্ধকার, তাতে এর কিছু যায় আসে না।

sweep যে সমস্যা রেখে যায়।
বিড়াল থেকে এক-দুই pixel সরে থাকা একটি window তখনও বিড়ালের বেশিরভাগ ঢেকে রাখে, তাই তার score প্রায় সমান উঁচু। ফলে প্রতিটি বিড়াল প্রায় একই রকম box-এর একটি স্তূপে মোড়া থাকে। Non-max suppression একটি নিয়ম বারবার চালিয়ে এটি পরিষ্কার করে: বাকিগুলোর মধ্যে সবচেয়ে বেশি score-এর box রাখুন, তারপর যে box এর সঙ্গে একটি নির্দিষ্ট পরিমাণের বেশি মিলে যায় তা মুছে ফেলুন। মিলে যাওয়া মাপা হয় IoU দিয়ে — দুটি box-এর সাধারণ অংশের ক্ষেত্রফল, ভাগ দুটি মিলে যতটা ঢাকে তার ক্ষেত্রফল। একই box-এর IoU 1; যে box দুটি ছোঁয় না তাদের IoU 0।

আধুনিক detector কোথায় আলাদা।
YOLO, Faster R-CNN আর বাকিরা হাতে বানানো template-এর বদলে এমন একটি CNN ব্যবহার করে যা শিখেছে বিড়াল দেখতে কেমন, আর একটি স্থির window-এর বদলে box-এর মাপ অনুমান করে। কিন্তু তারাও মিলে-যাওয়া box-এর একটি স্তূপ তৈরি করে, আর বেশিরভাগই ঠিক এই NMS ধাপ দিয়ে তা পরিষ্কার করে।

যা করে দেখার মতো:
1. Score everything at once চাপুন আর স্তূপটি গুনুন: তিনটি বিড়ালের জন্য 19টি box, প্রতিটি বিড়াল নিজের একটি স্তূপের নিচে চাপা। তারপর Run NMS to the end। প্রতিটি স্তূপ একটি box-এ নেমে আসে।

2. এবার IoU সীমা 0.05-এ নামান আর আবার NMS চালান। পাশাপাশি বসা দুটি বিড়াল একটি হয়ে যায়: তাদের box মাত্র 0.11 মেলে, কিন্তু সেটি 0.05-এর বেশি, তাই একটি রাখলে অন্যটি মুছে যায়। 0.95-এ তুলুন, উল্টোটা ঘটে — 19টি box-ই টিকে থাকে, কারণ এক pixel দূরের box দুটিও মাত্র 0.90 মেলে।

3. বড় বিড়ালটি দেখুন। template-এর একটিই স্থির মাপ, আর বড় করে আঁকা বিড়াল তার সঙ্গে মেলে না — তার সেরা window পায় 0.43, cut-off-এর অনেক নিচে। পুরনো detector-গুলো ছবিটি বারবার ছোট করে প্রতিটি মাপে একই window সরিয়ে এটি সামলাত; আধুনিকগুলো সরাসরি box-এর মাপ অনুমান করতে শেখে।

4. score cut-off 0.50-এ নামান, দুটি কুকুরই box পায়; 0.45-এ বলটিও পায়। প্রতিটি detector এই বিনিময়টি করে: নিচু cut-off আপনি যা চান তার বেশি ধরে, আর যা চান না তারও বেশি।