با سیستم تشخیص اشیا و رویکردهای نوین این حوزه آشنا شوید
مقاله را با معرفی چند مورد از رویکردهای سیستم تشخیص اشیا شروع میکنیم. بعد از آشنایی با رویکردهای قدیمی و جدید، به مطالعه مهمترین قسمتهای دو رویکرد مذکور (CenterNet و TTFNet) میپردازیم. بسیاری از این قسمتها بین این دو رویکرد مشترک هستند، بنابراین آنها را تنها یک بار توضیح خواهیم داد. ما توانستیم بسته نرمافزاری Package را پیادهسازی کنیم که از هردو شبکه الهام گرفته است؛ برای مشاهده این بسته میتوانید به سایت Github مراجعه نمایید.
برای فهم بهتر این مقاله آشنایی مختصر با شبکههای عصبی پیچشی (CNN) لازم است.
رویکردهای قدیمی
در علم کامپیوتر، وقتی مسئلهای داریم که راهحلی ندارد، سعی میکنیم آنرا به مسئلهای آسانتر یا قابلحل تغییر دهیم. مدلهای تشخیصگر دومرحلهای Two-stage detection models مصداق خوبی برای این موضوع هستند. در این مدلها، دستهبندی تصویر Image classification یا نشانهگذاری tagging آن (یعنی جایگذاری تصویر موردنظر در یک دسته خاص و اختصاص تگهایی به آن) مسئله سادهتر است. برای انجام این عملیاتها میتوانیم تصویر را به نواحی متعدد تقسیم و این نواحی را دستهبندی کنیم. اما این روش بسیار زمانبر است؛ پس باید به دنبال راهحل بهتری باشیم. R-CNN (2014) یکی از شبکههایی است که الگوریتمهای آن از این رویکرد استفاده میکنند. شبکههای Fast R-CNN (2015) و سپس Faster R-CNN (2016) از آن مشتق شدند.
این مدلها عملکرد خوبی از خود نشان دادند؛ با اینحال پژوهشگران به دنبال تسریع و کارایی بیشتر هستند، به نحوی که بتوان عملیات مورد نظر را در یک مرحله (به جای دو مرحله) و بدون نیاز به مشخص کردن نواحی انجام داد. یکی از راهحلهایی که برای این مسئله مطرح شده، سیستم YOLO You can only look once (2015) بوده که اکنون نسخه چهارم (2020) آن نیز موجود است. یک رویکرد دیگر SSD Single Shot Multibox Detector (2015) است. جا دارد به مدل تشخیصگر RetinaNet (2017) نیز اشاره کنیم که یک تابع زیان کانونی A focal loss برای سیستم تشخیص اشیا معرفی کرده است (این تابع زیان امروزه کاربرد زیادی دارد).
رویکردهای جدید
رویکرد دیگری در سالهای اخیر محبوبیت پیدا کرده است. در این رویکرد، شیء را میتوان به یک مجموعه نقطه تبدیل کرد و مسئله تشخیص را به عنوان مسئله برآورد نقاط کلیدی در نظر گرفت. این رویکرد در مقاله CornerNet: سیستم تشخیص اشیا به عنوان جفت نقط کلیدی Detecting Objects as Paired Keypoints مطرح شد. همانطور که از اسم آن برمیآید، در این رویکرد شیء به صورت یک جفت نقاط کلیدی (گوشه بالا سمت چپ و گوشه پایین سمت راست) بازنمایی میشود.
رویکردی مشابه به نام CenterNet در مقاله Objects as Points معرفی شده است. در این روش نقطه مرکزی کادر محصورکننده با استفاده از یک نقشه حرارتی مشخص میشود. ویژگیهای دیگر، همچون اندازه کادر محصورکننده، به صورت مستقیم و با استفاده از رگرسیون پیشبینی میشوند.
نقطه ضعف این رویکرد، سرعت نسبتاً کم آموزش آن است. برای حل این مسئله شبکه TTFNet (Training-time-friendly network) معرفی شده است. اصول زیربنایی این شبکهها یکسان است، بنابراین هردوی آنها را در یک بسته به کار بردیم.
معماری شبکه عصبی
اجازه دهید از ابتدا، یعنی معماری شبکه شروع کنیم؛ سپس اجزای مهم (از جمله نقشههای حرارتی و توابع زیان مختلف) شبکه را توضیح خواهیم داد.
میتوانیم از شبکهای همچون شبکه پیچشی Hourglass Network استفاده کنیم که منحصراً برای انجام چنین مسئلهای طراحی شده است؛ راه دیگر (که ما در پیش گرفتیم) انتخاب یکی از شبکههای عصبی پیچشی (CNN) استاندارد برای طبقهبندی تصاویر و اصلاح آن شبکه مطابق با نیازهایمان است. ما شبکههای ResNet (18،50) و EfficientNet (b0, b1, b2) را به کار بردیم.
اینجا نیز همچون سایر مسائل یادگیری انتقالی Standard transfer learning tasks، لایه متراکم بالایی را حذف میکنیم. اما لایه بعدی به هیچ وجه با خروجی موردنیاز ما مطابقت ندارد. به همین دلیل لازم است مقداری بیش نمونهبرداری upsampling انجام دهیم. علاوه بر این، اتصالات لایههای پایینتر عملکرد را بهبود میبخشند. اگر در انتهای شبکه یک لایه با اندازه درست داشته باشیم، میتوانیم آن را به تعداد شاخههای دلخواه تقسیم کنیم.
نقشه حرارتی تنها ¼ تصویر ورودی را پوشش میدهد تا سرعت شبکه افزایش یابد. به ازای هر کلاس یک نقشه حرارتی داریم. در شبکه CenterNet (برای مسئلهی ساده سیستم تشخیص اشیا) دو شاخه و در TTFNet یک شاخه وجود دارد.
دو شاخهی CenterNet عبارتاند از:
- شاخه اندازه کادر A size head، که طول و عرض یک کادر محصورکننده را نشان میدهد؛
- شاخه مختصات نقطه میانی Offset head، که شامل فاصله x و y از مبدأ است؛ این شاخه به استفاده از نقشه حرارتی (که مورد نمونهگیری کاهشی downsampling قرار گرفته) برمیگردد.
هردو شاخه فقط دو فیلتر دارند، بدین معنی که در هر نقطه از نقشه حرارتی فقط یک شیء میتواند وجود داشته باشد. اگر میخواهید سایر ویژگیهای شیء را نیز در نظر بگیرید، باید به تعداد شاخهها بیافزایید.
شبکه TTFNet شامل یک شاخه با چهار فیلتر میشود که برای محاسبه اندازه استفاده میشود (منظور از اندازه، فواصل تا کنارههای شیء است).
نقشههای حرارتی
نقشه حرارتی، ماتریسی است که از مقادیر 0.0 تا 1.0 پر شده است. نقاط حداکثری (اوج) Peaks در این نقشه حاکی از وجود یک شیء هستند.
در تصویر پایین چند نقشه حرارتی را مشاهده میکنید که برای آموزش تولید شدهاند. در این نقشه تنها یک نقطه وجود دارد که مقدار آن دقیقاً برابر با 1.0 است و احتمالات اطراف این نقطه به آرامی ناپدید میشوند (کاهش مییابند).
کانولوشن شکلپذیر
بیشنمونهبرداری در شبکه به چندین طریق قابل انجام است. در رویکرد آسان سیستم تشخیص اشیا (که پیشتر توضیح دادیم) از الحاق، نمونهگیری افزایشی و لایههای پیچشی استاندارد استفاده میشود. برای ارتقای این رویکرد از کانولوشنهای شکلپذیر استفاده میکنیم.
شبکههای عصبی پیچشی نقش شگرفی در حوزه یادگیری عمیق داشتهاند. این شبکهها امکان استخراج ویژگی را فراهم کردند، کاری که انجام آن در لایههای تماممتصل Fully connected کار بسیار دشواری بود. این قابلیت در کنار سایر پیشرفتها در معماری باعث افزایش عمق شبکهها شده است. با اینحال فلسفه زیربنایی (به خصوص شکل چهارضلعی فیلترها) همچنان ثابت است. کانولوشنهای شکلپذیر سعی در تغییر این قضیه دارند. این کانولوشنها میتوانند فاصله از گرید استاندارد Standard grid را بیاموزند و با این کرنل تغییر شکل یافته Deformed kernel منحنیها را اجرا کنند.
متأسفانه کانولوشنهای شکلپذیر هنوز در کتابخانههای TensorFlow و یا TensorFlow Addons (TFA) پیادهسازی نشدهاند. ما برای پشتیبانی از کانولوشنهای دوبُعدی شکلپذیر Deformable Conv2d، از یک کپی از TFA A fork of TFA استفاده میکنیم و امیدواریم این دو به زودی با هم ادغام شوند (به درخواست Pull 1129 مراجعه نمایید).
تابع زیان کانونی
یکی از مشکلات نقشههای حرارتی، پراکندگی و خلوت بودن ماتریس sparse آنهاست. دلیل پراکندگی این است که اغلب هیچ تشخیصی صورت نمیگیرد (صفر) و تنها به ندرت میتوانیم یک شیء را ببینیم (یک- که مقادیر اطراف آن کاهش مییابند). معیارهای استاندارد نمیتوانند در چنین شرایطی عملکرد خوبی داشته باشند. با اینحال یک راهحل وجود دارد: تابع زیان کانونی. این تابع در هر دو شبکه CenterNet و TTFNet استفاده میشود.
تابع زیان اشتراک همپوشانی از اجتماع دو کادر محصور
CenterNet به منظور بهینهسازی اندازه کادر محصورکننده، تابع زیان L1 را به کار میبرد. این تابع مجموع تفاوتهای بین مختصات واقعی و پیشبینیشده کادرهای محصورکننده است. تابع زیان L1 مقبول به نظر میرسد، اما غالباً برای ارزیابی استفاده نمیشود. برای ارزیابی معیار تابع زیان اشتراک همپوشانی از اجتماع دو کادر محصور IoU
Intersection over union of bounding boxes را به کار میبریم. هنگام ارتقای این معیارها نیز میتوانیم از همین معیار استفاده کنیم؛ به این صورت که با جمع و تفریق مقدار IoU از 1، آن را به یک تابع زیان تبدیل میکنیم.
اما زمانی که همپوشانی وجود نداشته نباشد، IoU صفر میشود. بنابراین تابع زیان در چنین شرایطی همیشه برابر 1 است. بر اساس اصل اجتماع-اشتراک (IoU)، دو تابع زیان میتوان پیشنهاد داد: تابع زیان IoU تعمیمیافته
Generalized intersection over union loss که در TTFNet استفاده میشود و میتواند مشکلی که به آن اشاره کردیم را حل کند، و تابع زیان IoU فاصله Distance-IoU loss که بر ارائهی اطلاعات مربوط به فاصله به تابع تمرکز دارد (این اطلاعات نشان میدهند چقدر از مرکز کادر محصورکننده فاصله داریم).
سخن نهایی
پیادهسازی این پروژه را میتوانید در این لینک github مشاهده کنید. در انجام این پروژه از میکال لوکاک Michal Lukac و برای متنباز کردن آن از شرکت Ximilar کمک گرفتم. اگر میخواهید مدل مذکور را بدون نیاز به کدنویسی امتحان کنید، به این پست (در مورد سیستم تشخیص اشیا در نرمافزارهایXimilar) مراجعه نمایید.