مدلهای طبقهبندی تصویر که تاکنون با آنها کار کردهایم، یک تصویر را گرفته و یک نتیجه دستهبندی شده تولید میکردند، مانند کلاس "عدد" در مسئله MNIST. اما در بسیاری از موارد، ما فقط نمیخواهیم بدانیم که یک تصویر اشیایی را نشان میدهد - بلکه میخواهیم مکان دقیق آنها را نیز تعیین کنیم. این دقیقاً هدف تشخیص اشیا است.
تصویر از وبسایت YOLO v2
فرض کنید میخواهیم یک گربه را در یک تصویر پیدا کنیم. یک رویکرد بسیار ساده برای تشخیص اشیا میتواند به این صورت باشد:
- تصویر را به تعدادی کاشی تقسیم کنید.
- طبقهبندی تصویر را روی هر کاشی اجرا کنید.
- کاشیهایی که منجر به فعالسازی کافی بالا میشوند، میتوانند به عنوان حاوی شیء مورد نظر در نظر گرفته شوند.
تصویر از دفترچه تمرین
اما این رویکرد ایدهآل نیست، زیرا فقط به الگوریتم اجازه میدهد که جعبه محدودکننده شیء را به صورت بسیار نادقیق مکانیابی کند. برای مکانیابی دقیقتر، باید نوعی رگرسیون اجرا کنیم تا مختصات جعبههای محدودکننده را پیشبینی کنیم - و برای این کار، به مجموعه دادههای خاصی نیاز داریم.
این پست وبلاگ مقدمهای عالی و ساده برای تشخیص اشکال ارائه میدهد.
ممکن است با مجموعه دادههای زیر برای این کار مواجه شوید:
- PASCAL VOC - شامل ۲۰ کلاس
- COCO - اشیای عمومی در زمینه. شامل ۸۰ کلاس، جعبههای محدودکننده و ماسکهای تقسیمبندی
در حالی که برای طبقهبندی تصویر اندازهگیری عملکرد الگوریتم آسان است، برای تشخیص اشیا باید هم درستی کلاس و هم دقت مکانیابی جعبه محدودکننده استنباط شده را اندازهگیری کنیم. برای مورد دوم، از معیاری به نام تقاطع بر اتحاد (IoU) استفاده میکنیم که میزان همپوشانی دو جعبه (یا دو ناحیه دلخواه) را اندازهگیری میکند.
شکل ۲ از این پست وبلاگ عالی درباره IoU
ایده ساده است - مساحت تقاطع بین دو شکل را بر مساحت اتحاد آنها تقسیم میکنیم. برای دو ناحیه یکسان، IoU برابر ۱ خواهد بود، در حالی که برای نواحی کاملاً جدا از هم، ۰ خواهد بود. در غیر این صورت، مقدار آن بین ۰ تا ۱ متغیر خواهد بود. معمولاً فقط جعبههای محدودکنندهای را در نظر میگیریم که IoU آنها بالاتر از مقدار مشخصی باشد.
فرض کنید میخواهیم اندازهگیری کنیم که یک کلاس خاص از اشیا
- منحنی دقت-بازخوانی (Precision-Recall) را در نظر بگیرید که دقت را بر اساس مقدار آستانه تشخیص (از ۰ تا ۱) نشان میدهد.
- بسته به آستانه، تعداد اشیای تشخیص داده شده در تصویر و مقادیر دقت و بازخوانی متفاوت خواهد بود.
- منحنی به این شکل خواهد بود:
تصویر از NeuroWorkshop
دقت متوسط برای یک کلاس خاص
ما فقط آن تشخیصهایی را در نظر خواهیم گرفت که IoU آنها بالاتر از مقدار مشخصی باشد. برای مثال، در مجموعه داده PASCAL VOC معمولاً
تصویر از NeuroWorkshop
معیار اصلی برای تشخیص اشیا دقت متوسط میانگین یا mAP نامیده میشود. این مقدار دقت متوسط است که به طور میانگین در تمام کلاسهای اشیا و گاهی نیز بر اساس
دو دسته کلی از الگوریتمهای تشخیص اشیا وجود دارد:
- شبکههای پیشنهاد ناحیه (R-CNN، Fast R-CNN، Faster R-CNN). ایده اصلی این است که ناحیههای مورد علاقه (ROI) تولید کنیم و CNN را روی آنها اجرا کنیم تا به دنبال حداکثر فعالسازی بگردیم. این روش کمی شبیه به رویکرد ساده است، با این تفاوت که ROIها به روش هوشمندانهتری تولید میشوند. یکی از معایب اصلی این روشها این است که کند هستند، زیرا نیاز به چندین بار عبور از طبقهبندیکننده CNN روی تصویر دارند.
- روشهای یکمرحلهای (YOLO، SSD، RetinaNet). در این معماریها، شبکه به گونهای طراحی شده است که هم کلاسها و هم ROIها را در یک مرحله پیشبینی کند.
R-CNN از جستجوی انتخابی برای تولید ساختار سلسلهمراتبی ناحیههای ROI استفاده میکند که سپس از طریق استخراجکنندههای ویژگی CNN و طبقهبندیکنندههای SVM عبور داده میشوند تا کلاس شیء تعیین شود، و از رگرسیون خطی برای تعیین مختصات جعبه محدودکننده استفاده میشود. مقاله رسمی
تصویر از van de Sande et al. ICCV’11
تصاویر از این وبلاگ
این روش مشابه R-CNN است، اما ناحیهها پس از اعمال لایههای کانولوشنی تعریف میشوند.
تصویر از مقاله رسمی، arXiv، ۲۰۱۵
ایده اصلی این روش استفاده از شبکه عصبی برای پیشبینی ROIها است - به اصطلاح شبکه پیشنهاد ناحیه. مقاله، ۲۰۱۶
تصویر از مقاله رسمی
این الگوریتم حتی سریعتر از Faster R-CNN است. ایده اصلی به شرح زیر است:
- ویژگیها با استفاده از ResNet-101 استخراج میشوند.
- ویژگیها توسط نقشه امتیاز حساس به موقعیت پردازش میشوند. هر شیء از کلاسهای
$C$ به ناحیههای$k\times k$ تقسیم میشود و ما برای پیشبینی بخشهای اشیا آموزش میبینیم. - برای هر بخش از ناحیههای
$k\times k$ ، تمام شبکهها برای کلاسهای اشیا رأی میدهند و کلاس شیء با بیشترین رأی انتخاب میشود.
تصویر از مقاله رسمی
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 در پایتون برای تشخیص اشیا











