Object Detection، FCN، YOLO، mAP و Object Tracking
Object Detection، FCN، YOLO، mAP و Object Tracking
Object Detection
در Object Detection، Model باید همزمان چند Object را پیدا کند، Class هرکدام را تشخیص دهد و Bounding Box بدهد. یک روش ابتدایی این است که CNN طبقهبندی/Localization تکObject را با Windowهای مختلف روی Image بلغزانیم. هر Window بخشی از Image را بررسی میکند و اگر Object وجود داشته باشد Class و Box را Predict میکند.
شکل 14-25. تشخیص چند Object با Sliding CNN
مشکل Sliding Window هزینهٔ بسیار بالاست: برای Position و Scaleهای متعدد باید Forward Pass جدا انجام شود. Detectionهای متعدد و همپوشان نیز باید Consolidate شوند، معمولاً با Threshold بر Confidence و Non-Max Suppression یا NMS بر اساس IoU.
Fully Convolutional Network
راه بسیار سریعتر تبدیل Dense Layerهای انتهایی به Convolution است. Dense Layerی که روی Feature Map با اندازهٔ ثابت کار میکند، معادل Convolution با Kernelی هماندازهٔ Spatial Input آن است. پس از این تبدیل، Network میتواند Image با Size بزرگتر را در یک Forward Pass پردازش کند و Gridی از Predictionها تولید کند.
برای مثال اگر Network روی Image کوچک یک Output تکCell داشته باشد، با Input دوبرابر ممکن است Output به Grid چندسلولی تبدیل شود. هر Cell همان Classifier/Localizer را روی Receptive Field متفاوتی اجرا میکند و Weightها مشترکاند.
شکل 14-26. اجرای Fully Convolutional Network روی Image کوچک و بزرگ
این ایده پایهٔ بسیاری از Detectorهای One-Stage است.
You Only Look Once - YOLO
YOLO Detection را در یک Forward Pass انجام میدهد. Image به Grid تقسیم میشود و هر Cell Predictionهایی برای Objectهایی که مرکز آنها در Cell قرار دارد تولید میکند. Output معمولاً شامل موارد زیر است:
- Objectness Score یا احتمال وجود Object؛
- مختصات Bounding Box نسبت به Cell/Grid؛
- Class Probability Distribution؛
- چند Box Candidate یا Anchor برای Shapeهای مختلف Object.
نسخههای مختلف YOLO در طول زمان Architecture، Anchor Strategy، Feature Pyramid، Loss و Training Trickهای مختلفی اضافه کردهاند و Trade-off بسیار خوبی میان Speed و Accuracy ایجاد کردهاند. YOLOv2/v3/9000 و نسلهای بعدی توسط گروهها و پیادهسازیهای متفاوت توسعه یافتهاند.
پس از Raw Prediction معمولاً Boxهای با Confidence پایین حذف و NMS اجرا میشود. اگر دو Box Class یکسان IoU بالایی داشته باشند، Box ضعیفتر حذف میشود تا Duplicate Detection کم شود.
Precision، Recall، AP و mAP در Detection
در Detection، تعریف True Positive علاوه بر Class درست به Localization مناسب وابسته است. معمولاً یک IoU Threshold تعیین میشود؛ اگر Prediction Class صحیح داشته باشد و IoU از Threshold بالاتر باشد، True Positive محسوب میشود. Detection اضافی False Positive و Object جاافتاده False Negative است.
با تغییر Confidence Threshold، Precision و Recall تغییر میکنند. Average Precision یا AP کیفیت Precision-Recall Curve را برای یک Class خلاصه میکند و mean Average Precision یا mAP میانگین AP در Classهاست. Benchmarkها ممکن است AP را در چند IoU Threshold محاسبه کنند؛ بنابراین هنگام مقایسهٔ Modelها باید Protocol Metric دقیق را بررسی کرد.
TensorFlow Hub Modelهای Detection متعددی دارد؛ Familyهایی مانند EfficientDet، Faster R-CNN و SSD Trade-offهای متفاوتی میان Latency و Accuracy ارائه میکنند.
Object Tracking
Detection روی Frameهای مستقل، Identity Object را در طول Video حفظ نمیکند. Object Tracking باید بگوید Detection فعلی مربوط به کدام Object قبلی است، حتی وقتی Object حرکت میکند، موقتاً Occlude میشود یا ظاهرش کمی تغییر میکند.
یکی از Trackerهای معروف DeepSORT است. ایدهٔ اصلی آن ترکیب اطلاعات Motion و Appearance است:
- یک Detector در هر Frame Bounding Boxها را پیدا میکند؛
- Kalman Filter Location آیندهٔ Track را بر اساس Motion گذشته تخمین میزند؛
- یک Deep Network برای هر Detection Embedding ظاهری میسازد تا شباهت Objectها اندازهگیری شود؛
- سپس Assignment Algorithm Detectionهای جدید را به Trackهای موجود Match میکند.
جزئیات Matching و Hungarian Algorithm و سپس Pixel-Level Segmentation در مقالهٔ بعد ادامه مییابد.