Sanaz Khalili
Sanaz Khalili
خواندن ۴ دقیقه·۲ سال پیش

خانواده ی یولو(پست دوم: یولو1)

به نام خدا

یولو1 در سال 2016 توسط جوزف ردمون و همکارانش با عنوان You Only Look Once: Unified, Real-Time Object Detection در کنفرانس CVPR ارائه شد. این الگوریتم اولین الگوریتم single stage برای تشخیص اشیا است. کلمه ی YOLO از عبارت you only look once گرفته شده است به این معنی که این الگوریتم مثل بینایی بشر فقط یکبار به تصویر نگاه می کند و مکان اشیا و کلاس آن ها را پیش بینی می کند.

یولو1 الگوریتمی سریع است که در هر ثانیه 45 فریم(یا FPS ->Frames Per Second) را پردازش می کند. نویسنده های مقاله نسخه ای سریعتر از این نسخه را نیز به نام Fast YOLO ارائه کردند که تعداد لایه های کانولوشنی کمتر و سریعتر است. FPS آن 155 است. مقدار mAP در یولو نسبت به الگوریتم DPM دو برابر بهتر است و می تواند به صورت Real-Time پیش بینی را انجام دهد.

شکل1) مقایسه دقت و سرعت یولو(منبع)
شکل1) مقایسه دقت و سرعت یولو(منبع)

جزئیات یولو1

در واقع یولو1 یک مسئله ی رگرسیون و دارای معماری anchor-less( از جعبه های لنگر استفاده نمی کند) است. یولو، یک شبکه عصبی end to end است یعنی مثل شبکه های two stage نیست که قرار باشد قسمت های مختلف جدا از هم کار کنند و خروجی هر قسمت به ورودی بخش دیگری فرستاده شود. در این شبکه، تصویر فقط به یک شبکه عصبی داده می شود، ویژگی ها از کل تصویر استخراج می شوند و در نهایت خروجی شبکه مختصات bounding box و کلاس آن اشیا خواهد بود.

شکل زیر شبکه ی عصبی یولو1 را نشان می دهد.

شکل2) معماری شبکه ی یولو1(منبع)
شکل2) معماری شبکه ی یولو1(منبع)

همان طور که مشخص است این شبکه از 24 لایه ی کانولوشنی، ماکس پولینگ، 2 لایه ی تمام متصل و Dropout استفاده کرده است. ساختار این شبکه از GoogLeNet الهام گرفته است و برای کاهش عمق نقشه های ویژگی از کانولوشن 1×1 استفاده می کند.(این کانولوشن 1×1 در شبکه گوگل نت برای کاهش پارامترها استفاده شد.)

یولو، تصویر ورودی با ابعاد 448×448 را دریافت می کند و آن را به یک گرید S×S تبدیل می کند که در یولو1 مقدار S برابر 7 است. در واقع خروجی این شبکه یک تنسور با ابعاد 30×7×7 است. این تنسور را شکل3 نشان می دهد. قسمت مشکی این شکل، یک سلول را با عمق آن نشان می دهد.

شکل3) ساختار کلی خروجی شبکه ی یولو1(منبع)
شکل3) ساختار کلی خروجی شبکه ی یولو1(منبع)

کل یک تصویر در این شبکه به 49 سلول تقسیم می شود که مرکز هر شیئی که درون یک سلول باشد آن سلول مسئول پیش بینی آن شی می شود(یعنی توقع داریم آن سلول خاص آن شی را پیش بینی کند.). هر سلول می تواند B جعبه یا شی را پیش بینی کند که در یولو1، B مقدار 2 را دارد. پس در نتیجه در یولو1 حداکثر 98 شی یا جعبه می تواند پیش بینی شود(49×2 = 98).

پیش بینی هر جعبه شامل یک سری اطلاعات:

1- مشخصات جعبه که شامل مختصات مرکز جعبه و طول و عرض آن می باشد.

2- امتیاز اطمینان یا confidence score برای هر جعبه

3- به تعداد کلاس های مجموعه داده ی train، احتمال تعلق به آن کلاس ها را خواهیم داشت یعنی در یولو1 که مجموعه داده شامل 20 کلاس است، 20 خانه داریم که در هر یک از آن ها میزان احتمال تعلق آن شیئی که پیش بینی شده به آن دسته قرار می گیرد.

با این وجود 4 عدد برای مختصات یک جعبه وجود دارد که علاوه بر آن برای هر کدام یک امتیاز اطمینان داریم پس برای 2 جعبه 10 عدد و 20 کلاس هم وجود دارد پس در مجموع یک سلول 30 خانه دارد که به شکل4 است.

شکل4
شکل4

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

شکل5) نمایی از تنسور خروجی یولو1(منبع)
شکل5) نمایی از تنسور خروجی یولو1(منبع)

یک confidence score میزان احتمالی که درون این bounding box شیئی وجود دارد را مشخص می کند. این امتیاز می تواند توسط رابطه6 محاسبه شود.

شکل6
شکل6

در این رابطه P(objetc) دو مقدار 0 و 1 را می تواند داشته باشد که اگر شیئی موجود باشد مقدار 1 و اگر نباشد مقدار 0 است. در واقع در صورت وجود شی مقدار IoU مقدار امتیاز اطمینان خواهد بود.(این رابطه در زمان train شبکه استفاده می شود.)
مقادیر بعدی در شکل4، x, y, width, height هستند. مقادیر x, y نشان دهنده ی مرکز جعبه در سلولی خاص است که می توانند عددی بین 0و 1 باشند. مقادیر width و height نسبت به کل تصویر پیش بینی می شوند و می توانند مقادیری بزرگتر از 1 داشته باشند.

تابع Loss function

برای تعریف تابع loss باید خطای تک تک مواردی که پیش بینی می شود را با هم جمع کنیم.

شکل7) loss function YOLO(منبع)
شکل7) loss function YOLO(منبع)

توضیح جزئیات این رابطه:

1- اگر جعبه ای با یک شی match باشد قسمت اول میزان خطای مرکز جعبه ی محاطی را به روش Sum-Squared Error (SSE) محاسبه می کند.

2- اگر جعبه ای با یک شی match باشد قسمت دوم میزان خطای طول و عرض جعبه را نسبت به مقدار واقعی آن محاسبه می کند.

3- توضیح بیشتر در شکل 8 آمده است.

شکل8) منبع
شکل8) منبع


منابع

https://pyimagesearch.com/2022/04/11/understanding-a-real-time-object-detection-network-you-only-look-once-yolov1/

https://pyimagesearch.com/2022/04/04/introduction-to-the-yolo-family/

https://www.harrysprojects.com/articles/yolov1.html


شبکه عصبیyoloپیش بینی
https://github.com/sanazkhalili - https://www.kaggle.com/skhalili
شاید از این پست‌ها خوشتان بیاید