بعد از آموزش مدل ها، ما به معیار ارزیابی برای محاسبه میزان عملکرد هر مدل نیاز داریم. به طور معمول هر دیتاست موجود به سه بخش داده آموزش، اعتبارسنجی و آموزش تقسیم میشود که توضیحات بیشتر را می توانید در زیر بخوانید:
بعد از آموزش مدل با استفاده از داده های آموزشی و تنظیم پارامترهای آن توسط داده های اعتبارسنجی، نوبت به ارزیابی نهایی مدل برای مقایسه با مدل های دیگر که از همین دیتاست برای آموزش استفاده کرده اند، می رسد.
اما چگونه میتوان معیار مناسبی برای ارزیابی مدل هایی که برای تشخیص اشیاء در تصاویر آموزش دیده اند، پیدا کرد!؟
در این نوشته به توضیح کامل معیار ارزیابی معروف mAP برای این کاربرد می پردازم.
برای شروع و توضیح mAPنیاز به فهم درستی نسبت به Precision، Recall، Precision-Recall curve و APداریم.
شکل زیر رو نگاه کنید:
تصور کنید دو دسته شی داریم. آبی و قرمز. یه مدل آموزش دیده شده داریم که قراره تعدادی از این اشیاء رو که در شکل بالا اومده دسته بندی کنه. 10 تا شی آبی(دسته مثبت) داریم و 10 تا شی قرمز(دسته منفی) که برچسب هرکدوم از اشیاء رو هم میدونیم. در شکل بالا با Label Positive و Label Negative مشخص شدند.
حالا اتفاقی که میفته اینه که مدل ما دقت 100 در صدی نداره. بنابراین تعداد از این اشیاء رو درست دسته بندی نمیکنه. در شکل بالا مشخص شده که از 10 تا شی آبی 9 تا رو به عنوان شی آبی و یک دونه رو به عنوان دسته قرمز دسته بندی کرده. اشیاء قرمز رو هم با خطا دسته بندی کرده و فقط تونسته 8 تا از 10 تا رو درست دسته بندی کنه.
این توضیحاتی که دارم میدم مربوط به دسته بندیه که بعد از همین توضیحات پل میزنیم برای توضیح دادن mAPدر تشخیص اشیاء در تصویر.
نکته بعدی که باید توجه کنید اینه که هر بار یکی از دسته ها رو مورد بررسی قرار میدیم. به عنوان مثال اگر 10 تا دسته داشته باشیم، باید معیار ارزیابی رو هر بار برای هرکدوم از 10 تا دسته اجرا کنیم.
خوب... بریم سراغ ادامه توضیحات...
شکل زیر رو هم علی الحساب داشته باشید، به مرور متوجهش میشید:
به زبان ساده معیار Precision به ما میگه چنتا از اشیائی که به عنوان دسته مثبت تشخیص دادیم، واقعا مثبت هستند! اگر اشیایی که مثبت تشخیص داده شدند و واقعا هم مثبت هستند رو TP(True Positive)بنامیم و اشیایی که مثبت تشخیص داده شدند ولی واقعا مثبت نیستند(نه اینکه لزوما منفی باشند! در مثال بالا چون دوتا کلاس داریم اینطوری نوشته شده وگرنه همینکه مثبت نباشند جزو این دسته قرار میگیرند.) رو FP(False Positive) نام گذاری کنیم، Precision رو میتونیم به شکل زیر تعریف کنیم:
برای مثال بالا tpبرابر 9 هست و fpبرابر 2 بنابراین داریم:
مقدار precision [برای دسته مثبت و داده های تست بالا] برابر با 0.81 خواهد بود.
مفهوم Recall به ما میگه چنتا از اشیایی که واقعا مثبت هستند رو مدل تونسته به عنوان مثبت تشخیص بده! مفهوم TPرو که متوجه شدیم حالا اگر اشیایی که واقعا مثبت هستند اما به عنوان دسته مثبت در نظر گرفته نشدند(تکرار میکنم مهم اینه ک مثبت در نظر گرفته نشده وگرنه جزو هر دسته دیگه ای باشه همین و آش و همین کاسست[!] و تو این مثال دو کلاسه(دسته) داریم اینجوری بهش میپردازیم) رو FN نام گذاری کنیم، مفهوم Recall رو میتونیم به صورت زیر فرموله کنیم:
که با توجه به مقادیر TP=9 و FN=1 برای مثال بالا خواهیم داشت:
مقدار recall [برای دسته مثبت و داده های تست بالا] برابر با 0.9 خواهد بود.
حالا که درک درستی نسبت به مفهوم precision و recall ایجاد شده مفهوم IOU رو هم بگیم بعد بریم سراغ precision-recall curve.
برای دسته بندی تصاویر، استفاده از فرمول های بالا کار آسونیه و به راحتی میتونید برای هر دسته مقدار precision و recall رو محاسبه کنید. اما برای محاسبه precisionو recallبرای کاربرد تشخیص اشیاء در تصویر کار کمی پیچیده میشه.
برای دسته بندی تصاویر اتفاقی که میفته اینه که یه تصویر به مدل داده میشه و در نهایت به صورت 0و1 گفته میشه تصویر متعلق به کدوم کلاسه. اما در کاربرد تشخیص اشیاء در تصویر فقط تعیین دسته کافی نیست و باید موقعیت شی در تصویر هم مشخص بشه. به همین دلیل نیاز به مفهوم IOU داریم.
اما IOUچیه!؟
با توجه به اینکه در کاربرد تشخیص اشیاء در تصویر، موقعیت شی هم مهمه، پس باید یک معیار برای تعیین درست بودن موقعیت تشخیص داده شده هم داشته باشیم. به زبان ساده IOU به ما میگه که باکسی(box) که تشخیص داده شده چقدر با باکس واقعی همپوشانی دارند. این همپوشانی رو اگه بخوایم فرموله کنیم، به صورت زیر در میاد:
همونطور که مشخصه از نسبت اشتراک دو باکس به اجتماع دو باکس برای محاسبه IOUاستفاده میشه.
اما محاسبه IOUچه کاربردی برای محاسبه Precision و recall داره!؟ جوابش خیلی سادست: اگر مقدار IOU از یک مقداری بیشتر بود به عنوان باکس تشخیص داده شده در نظر گرفته میشه(چه دسته پیش بینی شده برای این باکس درست باشه، چه اشتباه. IOU صرفا میزان همپوشانی رو محاسبه میکنه.)
[برای محاسبه IOUیک باکس تشخیص داده شده، باید میزان همپوشانی این باکس با همه باکس های واقعی درون تصویر مقایسه بشه.]
مقدار معمول برای IOUبرای محاسبه precision و recall مقدار 0.5 است. به این معنا که اگر میزان همپوشانی از 0.5 بیشتر بود می توان درباره درست یا اشتباه بودن دسته آن باکس اعلام نظر کرد.
خوب الان اون پلی که دوست داشتیم برای محاسبه معیار ارزیابی از دسته بندی به تشخیص اشیاء بزنیم، زده شد و الان یجورایی خوشحالیم:)))
اما بریم سراغ precision-recall curve...
منحنی Precision-Recall نشون دهنده tradeoff (پیدا کردن جایگزین فارسی برای این کلمه واقعا سخته!) بین Precisionو Recallبرای آستانههای مختلفه!
قبول دارم! تعریف بالا یه خورده زیادی سنگینه. برا همین با یه مثال مفهوم بالا رو توضیح میدم.
فرض کنید میخوایم منحنی precision-recall دسته آبی رو برای یه نمونه دیتاست 10تایی دیگه رسم کنیم. برای این کار نیاز داریم تا اولا میزان اطمینان(cnfidence) تشخیص هر شی (فرض نید مقدار IOU برابر 0.5 در نظر گفته شده) داشته باشیم و دوما بدونیم درست تشخیص داده شده یا نه!
ابتدا خروجی تشخیص رو به صورت نزولی مرتب میکنیم و بعد تعداد TP و FP رو به صورت تجمعی از بالا به پایین محاسبه و در جدول میاریم. و در نهایت برای هر سطر مقدار precision و recall رو محاسبه میکنیم.
و در نهایت با توجه به مقادیر precision و recall جدول بالا، نمودار زیر رو رسم میکنیم:
منحنی بالا همون precision-recall curve است.
این نمودار نشون دهنده دقت(precision) به ازای مقادیر مختلف recall است. هر چقدر مساحت زیر منحنی بیشتر باشد نشون دهنده دقت بالای مدل است.(برا اینکه متوجه مفهوم این نکته بشید کافیه فرض کنید FPندارید و البته مدل همه TP ها رو تشخیص داده. اینجوری مساحت برابر یک[حداکثر مقدار ممکن و همون دقت 100در100 ] خواهد شد.)
حالا که مفهوم Precision-Recall ccurve رو متوجه شدیم، میریم سراغ اصل مطلب و چیزی نیست جز AP(Average Precision)...
با توجه به نمودار رسم شده در بالا، AP برابر با میانگین Precision برای Recall های مختلف بین 0 و 1 است.
به همین راحتی:)))
مفهوم mAP همون محاسبه APبرای IOUهای مختلف و در نهایت میانگین گرفتن از همه مقادیره[البته با این پیشفرض که میانگین همه دسته ها گرفته بشه و بعد میانگین IOUها هم محاسبه بشه]. به عنوان مثال mAP@[0.5:0.05:0.95] به معنی اینه که برای حد آستانه های 0.5 تا 0.95 با فاصله 0.05 مقدار AP رو محاسبه کنید و در نهایت میانگین بگیرید...
امیدوارم به صورت کامل متوجه مفهوم معیار ارزیابی در تشخیص اشیاء در تصویر شده باشید.
کد خیلی خوبی برای محاسبه AP و mAP برای تشخیص اشیاء در تصاویر تو گیتهاب هست که میتونید بهش مراجعه کنید:
منابع و مطالعه بیشتر: