به نام خدا
تشخیص شی یکی از حیاتی ترین مسائل در بینایی ماشین است. این مسئله فقط محدود به فعالیت های آکادمیک نمی شود و می تواند در دنیای واقعی کارهایی شبیه به خودروهای خودران نیز استفاده شود.
در دنیای واقعی کارهایی شبیه به همین ماشین های خودران احتیاج به مدل ها و الگوریتم هایی دارند که دقت و سرعت بالا داشته باشند که یولو می تواند این نیاز را برآورده سازد.
مدل های تشیخص شی را می توان به سه دسته تقسیم کرد:
1- مدل های تشخیص شی برپایه ی روش های سنتی
2- مدل های دومرحله ای یا two stage با استفاده از یادگیری عمیق
3-مدل های تک مرحله ای یا one stage با استفاده از یادگیری عمیق
معرفی object detection
قبل از اینکه سراغ بحث تشخیص اشیا برویم، می خواهیم عمل classification را بررسی کنیم. در این مسائل مدل سعی می کند به این سوال پاسخ دهد که ' تصویر چه چیزی را ارائه می دهد؟' یا اینکه برچسب کلی تصویر چه می تواند باشد. در کل با سناریویی سروکار داریم که فقط یک شی در دسته بندی تصویر دخیل است. شکل1 نمونه ای از عمل دسته بندی است که این تصویر را در دسته ی گربه قرار داده است.
اما اگر در تصویر چند شی وجود داشته باشد جواب سوال بالا فقط یک شی یا دسته نیست و باید هر شی جداگانه مشخص شود و برچسب مربوطه را بگیرد که به این عمل objetc detection یا تشخیص اشیا می گویند.
در واقع در دسته بندی عملی که انجام می شود این است که برای تصویر ورودی یک برچسب مشخص می شود در صورتی که برای عمل تشخیص اشیا، اطراف اشیا یک جعبه ی محاطی یا bounding box در تصویر ورودی رسم می شود و برای هر شی برچسبی پیش بینی می شود مانند شکل2.
به عبارت دیگر همان طور که در شکل2 مشخص است عمل object detection شامل localization یا مکان یابی و classification یا دسته بندی است.
چالش ها
1- تصاویر شلوغ
تشخیص اشیا در تصاویری که اشیا بسیار زیاد دارند، دشوار است.
2- واریانس درون کلاسی
به این معنا که برای یک شی تنوع زیادی داشته باشیم مثلا از دسته سگ، 6 نژاد مختلف با ابعاد، رنگ و ویژگی های متفاوت دیگر را داشته باشیم این مسئله را شکل4 نشان می دهد.
3- عدم بالانس کلاس ها
این چالش در مسئله ی تشخیص شی به تشخیص پس زمینه و اشیا بر می گردد که به آن foreground-background class imbalance نیز می گویند.در تصویر زیر این موضوع نمایش داده شده است.
برای درک اینکه چگونه عدم تعادل کلاس می تواند مشکل ایجاد کند، تصویری را در نظر بگیرید که دارای تعداد بسیار کمی از اشیاء است و تعداد زیادی جعبه در ناحیه های پس زمینه است. در نتیجه، مدل به بسیاری از مناطق در تصویر نگاه می کند که در آن بیشتر مناطق منفی در نظر گرفته می شوند. به دلیل این موارد منفی، مدل هیچ اطلاعات مفیدی نمی آموزد و می تواند کل آموزش مدل را تحت تأثیر قرار دهد.
برخی از چالش های دیگر
4- انسداد یا پوشیدگی (occlusion)
فقط قسمتی از شی درون تصویر مشخص باشد و شی به طور کامل مشخص نیست.
5- تغییر شکل در اشیا (deformation)
ممکن است یک شی با فرم ها و ژست های مختلفی در تصاویر ظاهر شود.
6- شرایط نورپردازی متفاوت (illumination conditions)
ممکن است در برخی تصاویر نور بسیار زیاد یا بسیار کم باشند که تشخیص اشیا را دشوار می کند.
7- سرعت
در مسائلی که نیاز است تشخیص اشیا به صورت بلادرنگ یا real-time انجام شود سرعت اجرا نیز ضروری خواهد بود.
دو مقطع در تاریخچه ی تشخیص شی وجود دارد:
1- استفاده از تکنیک های بینایی ماشین سنتی که تا سال 2010 رواج داشت.
2- از سال 2012 که شبکه ی عصبی AlexNet معرفی شد استفاده از شبکه های عصبی برای مسائل تشخیص شی آغاز شد.
در شکل1 روش های تشخیص شی سنتی به رنگ آبی و روش های با استفاده از شبکه عصبی به رنگ سورمه ای نشان داده شده است.
روش های سنتی مثل Histogram of Oriented Gradients (HOG)، Viola–Jones و غیره روش هایی هستند که استخراج ویژگی هایی مثل خط، لبه و ... را به شکل دستی انجام می دهند. اما با معرفی شبکه های عصبی مدل ها قادر هستند که ویژگی های سطح بالاتری را استخراج و استفاده کنند.
همان طور که قبل هم گفته شد شبکه های تشخیص شی دو مرحله و تک مرحله ای داریم که دومرحله ای ها مثلFaster-RCNN، Fast-RCNN، RCNN و غیره. شبکه های تک مرحله ای YOLO، SSD و EfficientDet نمونه ای از این الگوریتم هاست.
شکل2 روند پیشرفت الگوریتم YOLO را نشان می دهد.
تفاوت single stage و two stage
در الگوریتم های تک مرحله ای عمل تشخیص شی و مکان یابی را یکباره پیش بینی می کند اما الگوریتم های دو مرحله ای در دومرحله این اعمال را انجام می دهند. شکل3 این دو روش را به خوبی نمایش می دهد.
ادامه دارد...
منبع
https://pyimagesearch.com/2022/04/04/introduction-to-the-yolo-family/