تشخیص اشیا
به نام خدا، سلام… در این پست میخواهیم موضوع تشخیص اشیا یا همان Object Detection را به شما معرفی کنیم. هدفمان این است که شما را با مقدمات این شاخه مهم بینایی کامپیوتر آشنا کنیم. بعد از معرفی موضوع، از چالشها، کاربردها و دسته بندی روش های تشخیص اشیا خواهیم گفت. با هوسم همراه باشید…
تشخیص اشیا چیست؟
قبل از هرچیز بهتر است به این سوال پاسخ دهیم که تشخیص اشیا چیست؟ میخواهیم خیلی سریع و چکشی تعریف آن را بگوییم:
تشخیص اشیا، یعنی موقعیتیابی و شناسایی اشیای موجود در تصویر
پس ما به دنبال پیدا کردن اشیای موجود در تصویر هستیم. در تعریف بالا دو اصطلاح مهم وجود دارد. در واقع سیستم Object Detection دو وظیفه مهم برعهده دارد:
- موقعیتیابی اشیا: دور اشیای مدنظر در تصویر کادر یا مستطیل کشیده میشود. پس سیستم تشخیص اشیا، مکان (موقعیت) اشیای موجود در تصویر را در اختیار ما قرار میدهد. به کادرهای موجود در تصویر زیر دقت کنید.
- شناسایی اشیا: نام یا کلاس شی داخل هر کادر مشخص میشود. یعنی، تشخیص اشیا تعیین میکند که نام شی داخل هر کادر چیست. به نامهای بالای هر کادر در تصویر زیر دقت کنید.
در تصویر بالا مشاهده میکنید که عمل تشخیص اشیا (موقعیتیابی و شناسایی اشیا) به صورت کامل انجام شده است. چند نمونه جالب دیگر از خروجی Object Detection برای شما آوردیم که هم لذت ببرید و هم بیشتر با تشخیص اشیا آشنا شوید. روی هر تصویر کلیک کنید تا بزرگ شود…
این از تعریف اولیه Object Detection. اما یک سوال؟ این خروجیهای موقعیت و نام شی چگونه تولید میشوند؟ در ادامه، به این سوال با یک بلوک دیاگرام ساده پاسخ دادهایم…
بلوک دیاگرام ساده برای تشخیص اشیا
دراینجا، هدفمان این نیست که معماری شبکه های Object Detection معروف را به شما نشان دهیم. بلکه، تنها میخواهیم نشان دهیم که دو خروجی موقعیت و نام شی چگونه تولید میشود. به شکل زیر نگاه کنید؛ یک شبکه تشخیص اشیا داریم که محتویاتش فعلا مهم نیست. اما دو خروجی میسازد:
- یک خروجی، نام شی را نشان میدهد. مشاهده میکنید که صرفا یک کلاسیفایر یا دستهبند هست.
- خروجی بعدی، موقعیت اشیا هست که بهصورت رگرسیون تعریف میشود. چهار مقدار (x,y,w,h) را تخمین میزند. براساس این دو خروجی است که آن تصویر نهایی با باکس و برچسب حاصل میشود.
بیایید کمی معناگرا شویم! 😅 درادامه میخواهیم تفاوت دقیق تشخیص اشیا و شناسایی اشیا را توضیح دهیم.
شناسایی اشیا با تشخیص اشیا چه تفاوتی دارد؟
اول اینکه، شناسایی (بازشناسی) ترجمه کلمه Recognition و تشخیص هم معادل کلمه Detection است. در شناسایی اشیا (Object Recognition) به هر تصویر تنها یک نام اختصاص میدهیم. مثلا تصویری از یک سگ برچسب “سگ” را دریافت میکند. تصویری از دو سگ، هنوز برچسب “سگ” را دریافت میکند. اما، تشخیص اشیا کادری دور هر سگ میکشد و هر کادر را با عنوان “سگ” برچسب میزند. به تصویر زیر نگاه کنید و دو حالت را باهم مقایسه کنید. بنابراین، سیستم تشخیص پیشبینی میکند که هریک از اشیا کجا هستند و نام آنها چیست. به این ترتیب، تشخیص اشیا اطلاعات بیشتری نسبت به شناسایی اشیا در مورد یک تصویر به ما میدهد.
برتری تشخیص نسبت به شناسایی اشیا زمانی مشخص میشود که در تصویر چند شی متفاوت مانند گربه و سگ وجود داشته باشند. شناسایی اشیا نمیتواند برای این تصویر نامی انتخاب کند. اما تشخیص اشیا بهراحتی دور هر شی کادری میکشد و نام آن شی را مینویسد. مثلا تصویر زیر با این همه شی، خوراک Object Detection است!
آیا میتوانیم تشخیص اشیا را تعمیمیافته شناسایی اشیا بدانیم؟
بله. در شناسایی اشیا، معمولا یک شی در تصویر وجود دارد. بنابراین، دیگر موقعیتیابی چندان معنا ندارد و تنها باید بگوییم که این تصویر شامل کدام شی است. اما وقتی تعداد اشیا از یکی بیشتر باشد، تشخیص اشیا وارد کار میشود.
تا اینجا، واژه جدیدی بهنام کادر یا مستطیل وجود داشت. درواقع، کادر معادل با عبارت Bounding Box است. درادامه میخواهیم شما را بیشتر با این مفهوم آشنا کنیم.
Bounding Box در تشخیص اشیا
به کادر دور اشیا، bounding box گفته میشود. در فارسی میتوان آنرا مستطیل (کادر یا باکس) محیطی نامید. هرچند گروه هوسم نام چارچوب را انتخاب میکند. چارچوب واژه قشنگی است. حال بیایید ببینیم این چارچوب چگونه توصیف میشود. یک چارچوب را میتوان با 4 پارامتر در فضای دوبعدی ترسیم کرد:
- نقطه مبدا چارچوب (x,y): طبق تصویر زیر، این نقطه نشاندهنده گوشه بالا-چپ (top-left) چارچوب است. به (x,y) در تصویر زیر نگاه کنید.
- پهنای چارچوب (w): این پارامتر نشاندهنده پهنای چارچوب هست. طبق تصویر زیر، پهنای چارچوب، فاصله افقی بین ابتدا تا انتهای چارچوب است. به w در تصویر زیر نگاه کنید.
- ارتفاع چارچوب (h): این پارامتر نشان دهنده ارتفاع چارچوب است. به h در تصویر زیر نگاه کنید.
البته، روشهای دیگری برای نمایش چارچوب وجود دارد که برای شروع چندان نیاز نیست. بسیارخب، حالا بیایید به بررسی چالشهای موجود در تشخیص اشیا بپردازیم.
چالش در Object Detection
میتوان گفت که تشخیص اشیا، مساله مشکلتری نسبت به شناسایی اشیا است. درادامه، همراه با تصویر، چند چالش مهم در تصویر را معرفی کردهایم:
- انعطاف در اشیا: یک شی مانند انسان ممکن هست به شکلهای مختلفی در تصویر ظاهر شود. (شکل الف)
- انسداد: ممکن است بخش مهمی از اشیا پوشیده شده باشد. (شکل ب)
- زاویه دید: ممکن است زوایای تصویربرداری از شی بهگونهای باشد که شی بهصورت مناسب دیده نشود. (شکل پ)
- روشنایی: تغییر نور در تصویر (شکل ت)
- پس زمینه: شبیه بودن شی با پس زمینه (شکل ث)
- تغییرات بین کلاسی: شکلهای مختلف شی برای یک کلاس (شکل ج)
دیتاست برای Object Detection
تشخیص اشیا موضوع مهمی در بینایی کامپیوتر است. طبیعتا، تعداد دیتاست برای Object Detection بسیار زیاد است. دراینجا میخواهیم دو نمونه معروف را معرفی کنیم.
دیتاست COCO
دیتاست COCO یکی از بزرگترین دیتاستهای موجود در Object Detection است. این دیتاست توسط شرکتهای بزرگ فعال در حوزه هوش مصنوعی مانند مایکروسافت آماده شده است. این دیتاست شامل بیش از 200 هزار تصویر و 90 شی مختلف است. بسیاری از مقالات بزرگ و مطرح در برروی این دیتاست آموزش و ارزیابی انجام دادهاند. این دیتاست تنها برای تشخیص اشیا نیست و در سایر زمینههای بینایی کامپیوتر مانند سگمنت تصویر نیز استفاده میشود.
دیتاست Pascal VOC
دیتاست Pascal VOC یک مجموعه نسبتا قدیمی است که آخرین نسخه آن به سال 2012 برمیگردد. این دیتاست شامل 20 شی و حدود 5 هزار تصویر است.
معیار ارزیابی در Object Detection
فرض کنید که یک شبکه تشخیص اشیا را آموزش دادهاید. حالا با چه متر و معیاری عملکرد این شبکه را باید سنجید؟ دیگر مانند شناسایی اشیا نمیتوان از Accuracy استفاده کرد. برای Object Detection معیارهای ارزیابی دیگر وجود دارد. یکی از رایجترین معیارهای ارزیابی، mean Average Precision یا به اختصار mAP هست. mAP برمبنای مقایسه چارچوب پیش بینی و چارچوب هدف محاسبه میشود. منطقی هست که دو چارچوب پیش بینی و هدف را باهم مقایسه کنیم تا ببینیم چقدر به هم نزدیک هستند.
به تصاویر نمونه زیر نگاه کنید؛ چارچوب قرمز، هدف و آبی معادل پیش بینی برای سگ است. میتوانید ببینید که بعضیها خیلی خوب روی هم منطبق شدهاند. اما تعدادی هم خیلی از هم فاصله دارند.
حالا چطور میتوانیم این مقایسه بالا را بهصورت عددی انجام دهیم؟ برای این مقایسه از معیار Intersection Over Union یا به اختصار IoU استفاده میشود. بیایید ببینیم IOU چگونه محاسبه میشود. به شکل زیر نگاه کنید. برای محاسبه میزان انطباق چارچوب پیش بینی و هدف، اشتراک دو چارچوب را بر اجتماع آنها تقسیم میکنیم.
حالا باید براساس مقادیر IoU، معیار mAP محاسبه شود. برای محاسبه mAP، ابتدا نمودار Recall-Precision براساس IoU رسم میشود. مساحت زیر سطح این نمودار برابر با mAP خواهد بود. نحوه محاسبه mAP خود یک پست جداگانه میطلبد. ضمن اینکه برای شروع در تشخیص اشیا نیازی نیست که جزئیات نحوه محاسبه آنرا بدانید.
حالا ممکن است بپرسید که پس چگونه شبکه را ارزیابی کنم؟! ساده هست؛ کافی است از کتابخانه COCO API استفاده کنید. یک کتابخانه پایتونی که بسیار ساده مقدار mAP را به شکلهای مختلفی برای شما محاسبه میکند.
رسیدیم به اصل مطلب! چه روشهایی برای تشخیص اشیا وجود دارد؟ درادامه میخواهیم به شما روشهای رایج در این زمینه را معرفی کنیم.
انواع روش های تشخیص اشیا در تصویر
روشهای موجود در تشخیص اشیا معمولا در یکی از دو دسته زیر قرار میگیرند:
- روشهای یک مرحلهای (one shot Networks)
- روشهای دو مرحلهای (two shot Networks)
درادامه، هریک از این دو دسته را به صورت مختصر توضیح میدهیم. در هر بخش یک شبکه معروف را هم معرفی میکنیم. با روشهای دو مرحلهای آغاز میکنیم…
تشخیص اشیای دومرحلهای
روشهای دومرحلهای، فرآیند تشخیص اشیا را در دو مرحله پیشنهاد ناحیه (Region Proposal Network) و Detection Head انجام میدهند. طبق شکل زیر، این دو مرحله عبارتنداز:
- ابتدا، بخش Region Proposal Network یا RPN چندین کاندیدای شی را به عنوان نواحی مورد علاقه (Region of Interest یا RoI) پیشنهاد میدهند. (RPN در تصویر زیر)
- در بخش دوم (Detection Head)، مناطق پیشنهادی بررسی میشوند. تعدادی حذف میشوند و تعدادی هم دقیقتر تنظیم میشوند و نام شی درون چارچوب هم تعیین میشود.
پس، تشخیص اشیای دومرحلهای، یک حدس اولیه از محل احتمالی اشیا میزند (همان RPN). این حدسها به شکل چارچوب نمایش داده میشود. این چارچوبها خیلی دقیق نیستند و همچنین ممکن هست بسیاری از آنها به شی خاصی اشاره نکند (پس زمینه باشد). به تصویر وسطی در شکل زیر نگاه کنید؛ RPN یک عالمه چارچوب رسم کرده که خیلی از آنها کیفیت مطلوبی ندارند. در مرحله دوم، به دنبال حذف اشتباهها هستیم. همچنین، چارچوبهای غیردقیق را بهتر تنظیم میکنیم و نام شی موجود در چارچوب را هم پیشبینی کنیم.
شبکه Faster R-CNN دومرحلهای است و محبوبیت و قدرت بالایی دارد. روشهای دومرحلهای، معمولا دقت بالایی دارند، اما معمولاً نسبت به تکمرحلهایها کندتر هستند. برویم روشهای تکمرحلهای را ببینیم…
تشخیص اشیای تک مرحلهای
در بخش قبل دیدید که خروجی RPN در روشهای دومرحلهای چندان دقیق نبود و در بخش دومش آنرا اصلاح میکردیم. اما به خاطر دومرحلهای بودن، سرعت تشخیص پایین بود. روشهای تک مرحلهای، با هدف حل چالش سرعت پایین در روشهای دومرحلهای پشنهاد شدند. روشهای تکمرحلهای شبیه این هستند که بلوک RPN در روشهای دومرحلهای را حذف کنیم. بنابراین در این دسته، مطابق شکل زیر، بخش RPN وجود ندارد و فیچرمپ خروجی CNN مستقیما به Detection Head میرود.
در اصل روشهای تکمرحلهای تشخیص شی را مشابه با دستهبندی حل میکنند. چون در دستهبندی هم تنها براساس فیچرمپ خروجی عمل دستهبندی/شناسایی اشیا انجام میشود. شبکه معروف YOLO ازجمله روشهای تکمرحلهای است که پایهگذار روشهای تکمرحلهای بود.
تذکر راستی درمورد CNN توضیح ندادیم، چون فکر کردیم همه شما میدانید که چه وظیفهای دارد. بهصورت خلاصه، CNN وظیفه استخراج ویژگی از تصویر ورودی را دارد. اگر با CNN آشنا نیستید، آموزش شبکه عصبی کانولوشن هوسم را بخوانید.نویسندگان آموزش آشنایی با تشخیص اشیا
این آموزش برپایه دوره بینایی کامپیوتر هوسم تهیه شده است. نویسندگان این آموزش:
- سحر احمدی
- سید سجاد اشرفی
بسیارخب، فعلا تشخیص اشیا به پایان رسید. اما به زودی برمیگردیم! چون میخواهیم تعدادی شبکه تشخیص اشیای تکمرحلهای و دومرحلهای معرفی کنیم. همچنین، قراراست توضیح مختصری درباره دو شبکه Faster R-CNN و RetinaNet اضافه کنیم. خوشحال میشویم که نظر و پیشنهادتان را درباره این پست بگویید. با هوسم همراه باشید…
مطالب زیر را حتما مطالعه کنید
شبکه عصبی GRU
یادگیری عمیق چیست
شبکه عصبی کانولوشن
آموزش matplotlib در پایتون
آموزش کتابخانه numpy در پایتون
شبکه عصبی موبایل نت
7 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
سلام. مثل همیشه عالی .
همیشه سایت و کانال شما را به دوستان علاقمند به حوزه هوش مصنوعی توصیه کردم.
سلام وقت بخیر و خداقوت
بنده سوالی که داشتم این است که چگونه می توانیم توجه را به این مدل های یعنی yolo , ssd این ها وارد کنیم.
یعنی می توانیم از بلوک توجه کانال و توجه فضایی در اینگونه مدلها استفاده کنیم؟
سلام
بله، از مکانیزم توجه میتونیم در شبکههای دیتکشن استفاده کنیم. اما برای فهمیدن چگونگی انجام این کار، بهتر هست به مقالههای حوزه دیتکشن و مروری (survey) مراجعه کنید.
سلام و خداقوت
سوالی داشتم از آقای مهندس اشرفی
تاثیر کیفیت ویدیو بر الگوریتم های آبجکت دیتکشنی از قبیل Yolo ، SSD و … تا چه میزان می تونه باشه و برای تحقیق در این حوزه باید دنبال چه کلید واژه هایی باشم؟
سلام
ویدئو، تشکیلشده از مجموعهای فریم یا تصویر هست. بنابراین، بهتر هست درمورد کیفیت تصویر در تشخیص اشیا صحبت بشه. یکی از مهمترین عوامل تاثیرگذار در کیفیت تصویر، سایز تصویر هست. معمولا سرعت اجرای شبکهها با اندازه تصویر ارتباط مستقیم داره. فکر میکنم از مقالههای survey در زمینه object detection میتونید شروع کنید.
ممنون استاد عالیه.
ممنون 🌹🙏