14 KiB
تشخیص اشیا
مدلهای طبقهبندی تصویر که تاکنون با آنها کار کردهایم، یک تصویر را گرفته و یک نتیجه دستهبندی شده تولید میکردند، مانند کلاس "عدد" در مسئله MNIST. اما در بسیاری از موارد، ما فقط نمیخواهیم بدانیم که یک تصویر اشیایی را نشان میدهد - بلکه میخواهیم مکان دقیق آنها را نیز تعیین کنیم. این دقیقاً هدف تشخیص اشیا است.
پیشکوئیز
تصویر از وبسایت YOLO v2
یک رویکرد ساده برای تشخیص اشیا
فرض کنید میخواهیم یک گربه را در یک تصویر پیدا کنیم. یک رویکرد بسیار ساده برای تشخیص اشیا میتواند به این صورت باشد:
- تصویر را به تعدادی کاشی تقسیم کنید.
- طبقهبندی تصویر را روی هر کاشی اجرا کنید.
- کاشیهایی که منجر به فعالسازی کافی بالا میشوند، میتوانند به عنوان حاوی شیء مورد نظر در نظر گرفته شوند.
تصویر از دفترچه تمرین
اما این رویکرد ایدهآل نیست، زیرا فقط به الگوریتم اجازه میدهد که جعبه محدودکننده شیء را به صورت بسیار نادقیق مکانیابی کند. برای مکانیابی دقیقتر، باید نوعی رگرسیون اجرا کنیم تا مختصات جعبههای محدودکننده را پیشبینی کنیم - و برای این کار، به مجموعه دادههای خاصی نیاز داریم.
رگرسیون برای تشخیص اشیا
این پست وبلاگ مقدمهای عالی و ساده برای تشخیص اشکال ارائه میدهد.
مجموعه دادهها برای تشخیص اشیا
ممکن است با مجموعه دادههای زیر برای این کار مواجه شوید:
- PASCAL VOC - شامل ۲۰ کلاس
- COCO - اشیای عمومی در زمینه. شامل ۸۰ کلاس، جعبههای محدودکننده و ماسکهای تقسیمبندی
معیارهای تشخیص اشیا
تقاطع بر اتحاد (IoU)
در حالی که برای طبقهبندی تصویر اندازهگیری عملکرد الگوریتم آسان است، برای تشخیص اشیا باید هم درستی کلاس و هم دقت مکانیابی جعبه محدودکننده استنباط شده را اندازهگیری کنیم. برای مورد دوم، از معیاری به نام تقاطع بر اتحاد (IoU) استفاده میکنیم که میزان همپوشانی دو جعبه (یا دو ناحیه دلخواه) را اندازهگیری میکند.
شکل ۲ از این پست وبلاگ عالی درباره IoU
ایده ساده است - مساحت تقاطع بین دو شکل را بر مساحت اتحاد آنها تقسیم میکنیم. برای دو ناحیه یکسان، IoU برابر ۱ خواهد بود، در حالی که برای نواحی کاملاً جدا از هم، ۰ خواهد بود. در غیر این صورت، مقدار آن بین ۰ تا ۱ متغیر خواهد بود. معمولاً فقط جعبههای محدودکنندهای را در نظر میگیریم که IoU آنها بالاتر از مقدار مشخصی باشد.
دقت متوسط (Average Precision)
فرض کنید میخواهیم اندازهگیری کنیم که یک کلاس خاص از اشیا C چقدر خوب تشخیص داده میشود. برای اندازهگیری آن، از معیار دقت متوسط استفاده میکنیم که به صورت زیر محاسبه میشود:
- منحنی دقت-بازخوانی (Precision-Recall) را در نظر بگیرید که دقت را بر اساس مقدار آستانه تشخیص (از ۰ تا ۱) نشان میدهد.
- بسته به آستانه، تعداد اشیای تشخیص داده شده در تصویر و مقادیر دقت و بازخوانی متفاوت خواهد بود.
- منحنی به این شکل خواهد بود:
تصویر از NeuroWorkshop
دقت متوسط برای یک کلاس خاص C مساحت زیر این منحنی است. به طور دقیقتر، محور بازخوانی معمولاً به ۱۰ قسمت تقسیم میشود و دقت در تمام این نقاط میانگینگیری میشود:
AP = {1\over11}\sum_{i=0}^{10}\mbox{Precision}(\mbox{Recall}={i\over10})
AP و IoU
ما فقط آن تشخیصهایی را در نظر خواهیم گرفت که IoU آنها بالاتر از مقدار مشخصی باشد. برای مثال، در مجموعه داده PASCAL VOC معمولاً \mbox{IoU Threshold} = 0.5 فرض میشود، در حالی که در COCO، AP برای مقادیر مختلف \mbox{IoU Threshold} اندازهگیری میشود.
تصویر از NeuroWorkshop
دقت متوسط میانگین - mAP
معیار اصلی برای تشخیص اشیا دقت متوسط میانگین یا mAP نامیده میشود. این مقدار دقت متوسط است که به طور میانگین در تمام کلاسهای اشیا و گاهی نیز بر اساس \mbox{IoU Threshold} محاسبه میشود. فرآیند محاسبه mAP به طور مفصل در
این پست وبلاگ توضیح داده شده است، و همچنین اینجا با نمونه کد.
روشهای مختلف تشخیص اشیا
دو دسته کلی از الگوریتمهای تشخیص اشیا وجود دارد:
- شبکههای پیشنهاد ناحیه (R-CNN، Fast R-CNN، Faster R-CNN). ایده اصلی این است که ناحیههای مورد علاقه (ROI) تولید کنیم و CNN را روی آنها اجرا کنیم تا به دنبال حداکثر فعالسازی بگردیم. این روش کمی شبیه به رویکرد ساده است، با این تفاوت که ROIها به روش هوشمندانهتری تولید میشوند. یکی از معایب اصلی این روشها این است که کند هستند، زیرا نیاز به چندین بار عبور از طبقهبندیکننده CNN روی تصویر دارند.
- روشهای یکمرحلهای (YOLO، SSD، RetinaNet). در این معماریها، شبکه به گونهای طراحی شده است که هم کلاسها و هم ROIها را در یک مرحله پیشبینی کند.
R-CNN: شبکه عصبی کانولوشنی مبتنی بر ناحیه
R-CNN از جستجوی انتخابی برای تولید ساختار سلسلهمراتبی ناحیههای ROI استفاده میکند که سپس از طریق استخراجکنندههای ویژگی CNN و طبقهبندیکنندههای SVM عبور داده میشوند تا کلاس شیء تعیین شود، و از رگرسیون خطی برای تعیین مختصات جعبه محدودکننده استفاده میشود. مقاله رسمی
تصویر از van de Sande et al. ICCV’11
تصاویر از این وبلاگ
F-RCNN - Fast R-CNN
این روش مشابه R-CNN است، اما ناحیهها پس از اعمال لایههای کانولوشنی تعریف میشوند.
تصویر از مقاله رسمی، arXiv، ۲۰۱۵
Faster R-CNN
ایده اصلی این روش استفاده از شبکه عصبی برای پیشبینی ROIها است - به اصطلاح شبکه پیشنهاد ناحیه. مقاله، ۲۰۱۶
تصویر از مقاله رسمی
R-FCN: شبکه کاملاً کانولوشنی مبتنی بر ناحیه
این الگوریتم حتی سریعتر از Faster R-CNN است. ایده اصلی به شرح زیر است:
- ویژگیها با استفاده از ResNet-101 استخراج میشوند.
- ویژگیها توسط نقشه امتیاز حساس به موقعیت پردازش میشوند. هر شیء از کلاسهای
Cبه ناحیههایk\times kتقسیم میشود و ما برای پیشبینی بخشهای اشیا آموزش میبینیم. - برای هر بخش از ناحیههای
k\times k، تمام شبکهها برای کلاسهای اشیا رأی میدهند و کلاس شیء با بیشترین رأی انتخاب میشود.
تصویر از مقاله رسمی
YOLO - فقط یک بار نگاه کن
YOLO یک الگوریتم یکمرحلهای بلادرنگ است. ایده اصلی به شرح زیر است:
- تصویر به ناحیههای
S\times Sتقسیم میشود. - برای هر ناحیه، CNN
nشیء ممکن، مختصات جعبه محدودکننده و اعتماد = احتمال * IoU را پیشبینی میکند.
تصویر از مقاله رسمی
سایر الگوریتمها
- RetinaNet: مقاله رسمی
- پیادهسازی PyTorch در Torchvision
- پیادهسازی Keras
- تشخیص اشیا با RetinaNet در نمونههای Keras
- SSD (Single Shot Detector): مقاله رسمی
✍️ تمرینها: تشخیص اشیا
یادگیری خود را در دفترچه زیر ادامه دهید:
نتیجهگیری
در این درس، شما یک مرور سریع از روشهای مختلفی که میتوان برای تشخیص اشیا استفاده کرد، داشتید!
🚀 چالش
این مقالات و دفترچهها درباره YOLO را بخوانید و خودتان آنها را امتحان کنید:
- یک پست وبلاگ خوب که YOLO را توضیح میدهد
- سایت رسمی
- YOLO: پیادهسازی Keras، دفترچه گامبهگام
- YOLO v2: پیادهسازی Keras، دفترچه گامبهگام
پسکوئیز
مرور و مطالعه شخصی
- تشخیص اشیا توسط نیکیل ساردانا
- مقایسه خوبی از الگوریتمهای تشخیص اشیا
- مروری بر الگوریتمهای یادگیری عمیق برای تشخیص اشیا
- مقدمهای گامبهگام بر الگوریتمهای پایه تشخیص اشیا
- پیادهسازی Faster R-CNN در پایتون برای تشخیص اشیا









