Skip to content

Latest commit

 

History

History
179 lines (101 loc) · 14.1 KB

File metadata and controls

179 lines (101 loc) · 14.1 KB

تشخیص اشیا

مدل‌های طبقه‌بندی تصویر که تاکنون با آن‌ها کار کرده‌ایم، یک تصویر را گرفته و یک نتیجه دسته‌بندی شده تولید می‌کردند، مانند کلاس "عدد" در مسئله MNIST. اما در بسیاری از موارد، ما فقط نمی‌خواهیم بدانیم که یک تصویر اشیایی را نشان می‌دهد - بلکه می‌خواهیم مکان دقیق آن‌ها را نیز تعیین کنیم. این دقیقاً هدف تشخیص اشیا است.

تشخیص اشیا

تصویر از وب‌سایت YOLO v2

یک رویکرد ساده برای تشخیص اشیا

فرض کنید می‌خواهیم یک گربه را در یک تصویر پیدا کنیم. یک رویکرد بسیار ساده برای تشخیص اشیا می‌تواند به این صورت باشد:

  1. تصویر را به تعدادی کاشی تقسیم کنید.
  2. طبقه‌بندی تصویر را روی هر کاشی اجرا کنید.
  3. کاشی‌هایی که منجر به فعال‌سازی کافی بالا می‌شوند، می‌توانند به عنوان حاوی شیء مورد نظر در نظر گرفته شوند.

تشخیص ساده اشیا

تصویر از دفترچه تمرین

اما این رویکرد ایده‌آل نیست، زیرا فقط به الگوریتم اجازه می‌دهد که جعبه محدودکننده شیء را به صورت بسیار نادقیق مکان‌یابی کند. برای مکان‌یابی دقیق‌تر، باید نوعی رگرسیون اجرا کنیم تا مختصات جعبه‌های محدودکننده را پیش‌بینی کنیم - و برای این کار، به مجموعه داده‌های خاصی نیاز داریم.

رگرسیون برای تشخیص اشیا

این پست وبلاگ مقدمه‌ای عالی و ساده برای تشخیص اشکال ارائه می‌دهد.

مجموعه داده‌ها برای تشخیص اشیا

ممکن است با مجموعه داده‌های زیر برای این کار مواجه شوید:

  • PASCAL VOC - شامل ۲۰ کلاس
  • COCO - اشیای عمومی در زمینه. شامل ۸۰ کلاس، جعبه‌های محدودکننده و ماسک‌های تقسیم‌بندی

COCO

معیارهای تشخیص اشیا

تقاطع بر اتحاد (IoU)

در حالی که برای طبقه‌بندی تصویر اندازه‌گیری عملکرد الگوریتم آسان است، برای تشخیص اشیا باید هم درستی کلاس و هم دقت مکان‌یابی جعبه محدودکننده استنباط شده را اندازه‌گیری کنیم. برای مورد دوم، از معیاری به نام تقاطع بر اتحاد (IoU) استفاده می‌کنیم که میزان همپوشانی دو جعبه (یا دو ناحیه دلخواه) را اندازه‌گیری می‌کند.

IoU

شکل ۲ از این پست وبلاگ عالی درباره IoU

ایده ساده است - مساحت تقاطع بین دو شکل را بر مساحت اتحاد آن‌ها تقسیم می‌کنیم. برای دو ناحیه یکسان، IoU برابر ۱ خواهد بود، در حالی که برای نواحی کاملاً جدا از هم، ۰ خواهد بود. در غیر این صورت، مقدار آن بین ۰ تا ۱ متغیر خواهد بود. معمولاً فقط جعبه‌های محدودکننده‌ای را در نظر می‌گیریم که IoU آن‌ها بالاتر از مقدار مشخصی باشد.

دقت متوسط (Average Precision)

فرض کنید می‌خواهیم اندازه‌گیری کنیم که یک کلاس خاص از اشیا $C$ چقدر خوب تشخیص داده می‌شود. برای اندازه‌گیری آن، از معیار دقت متوسط استفاده می‌کنیم که به صورت زیر محاسبه می‌شود:

  1. منحنی دقت-بازخوانی (Precision-Recall) را در نظر بگیرید که دقت را بر اساس مقدار آستانه تشخیص (از ۰ تا ۱) نشان می‌دهد.
  2. بسته به آستانه، تعداد اشیای تشخیص داده شده در تصویر و مقادیر دقت و بازخوانی متفاوت خواهد بود.
  3. منحنی به این شکل خواهد بود:

تصویر از 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 عبور داده می‌شوند تا کلاس شیء تعیین شود، و از رگرسیون خطی برای تعیین مختصات جعبه محدودکننده استفاده می‌شود. مقاله رسمی

RCNN

تصویر از van de Sande et al. ICCV’11

RCNN-1

تصاویر از این وبلاگ

F-RCNN - Fast R-CNN

این روش مشابه R-CNN است، اما ناحیه‌ها پس از اعمال لایه‌های کانولوشنی تعریف می‌شوند.

FRCNN

تصویر از مقاله رسمی، arXiv، ۲۰۱۵

Faster R-CNN

ایده اصلی این روش استفاده از شبکه عصبی برای پیش‌بینی ROIها است - به اصطلاح شبکه پیشنهاد ناحیه. مقاله، ۲۰۱۶

FasterRCNN

تصویر از مقاله رسمی

R-FCN: شبکه کاملاً کانولوشنی مبتنی بر ناحیه

این الگوریتم حتی سریع‌تر از Faster R-CNN است. ایده اصلی به شرح زیر است:

  1. ویژگی‌ها با استفاده از ResNet-101 استخراج می‌شوند.
  2. ویژگی‌ها توسط نقشه امتیاز حساس به موقعیت پردازش می‌شوند. هر شیء از کلاس‌های $C$ به ناحیه‌های $k\times k$ تقسیم می‌شود و ما برای پیش‌بینی بخش‌های اشیا آموزش می‌بینیم.
  3. برای هر بخش از ناحیه‌های $k\times k$، تمام شبکه‌ها برای کلاس‌های اشیا رأی می‌دهند و کلاس شیء با بیشترین رأی انتخاب می‌شود.

r-fcn image

تصویر از مقاله رسمی

YOLO - فقط یک بار نگاه کن

YOLO یک الگوریتم یک‌مرحله‌ای بلادرنگ است. ایده اصلی به شرح زیر است:

  • تصویر به ناحیه‌های $S\times S$ تقسیم می‌شود.
  • برای هر ناحیه، CNN $n$ شیء ممکن، مختصات جعبه محدودکننده و اعتماد = احتمال * IoU را پیش‌بینی می‌کند.

YOLO

تصویر از مقاله رسمی

سایر الگوریتم‌ها

✍️ تمرین‌ها: تشخیص اشیا

یادگیری خود را در دفترچه زیر ادامه دهید:

ObjectDetection.ipynb

نتیجه‌گیری

در این درس، شما یک مرور سریع از روش‌های مختلفی که می‌توان برای تشخیص اشیا استفاده کرد، داشتید!

🚀 چالش

این مقالات و دفترچه‌ها درباره YOLO را بخوانید و خودتان آن‌ها را امتحان کنید:

مرور و مطالعه شخصی