الگوریتم یادگیری خودنظارتی: اختلاف بردار و مجموع بردار با IOU ها (VDVS)

منتشر‌شده در towardsdatascience به تاریخ ۱ سپتامپر ۲۰۲۱
لینک منبع Self-supervised Learning Algorithm: Vector Difference and Vector Sum with IOUs (VDVS)

پیوند به مخزن در گیت‌هاب https://github.com/evrimozmermer/vectorsum_vectordifference

مقدمه

یادگیری خودنظارتی، روش یادگیری برای مدل‌های یادگیری عمیق است که تلاش می‌کند ویژگی‌های معنادار را بدون نظارت انسان به دست آورد که این مدل را مجبور می‌کند تا داده‌های ورودی را به برچسب‌های خاص نگاشت کند. چندین روش یادگیری خودنظارتی وجود دارد.

در این مقاله، من یک روش را به اشتراک می‌گذارم (تا جایی که می‌دانم).

روش پیشنهادی

روش پیشنهادی از منطق مجموع برداری استفاده می‌کند.

شکل ۱: نمودار روش پیشنهادی
شکل ۱: نمودار روش پیشنهادی

گام‌ها:

۱. مختصات تصادفی را در ربع بالای سمت چپ تصویر تعریف کنید.

۲. بخش‌های تصادفی را با مختصات تصادفی تعریف‌شده و نصف اندازه تصویر ورودی قطع کنید. اندازه تصاویر کراپ شده را به اندازه تصویر ورودی تغییر دهید. فصل مشترک ترکیب تصاویر کراپ شده (IOU) را محاسبه کنید.

۳. تصاویر کراپ شده را به مدل اضافه کرده و بردارهای جایگزاری را ایجاد کنید. (Ic: تصاویر برش خورده، Ec: بردارهای جایگزاری تصاویر برش خورده)

۴. شباهت‌های کسینوسی ترکیبات بردار جایگزاری (Ec) را محاسبه کنید. (C: ترکیبات مانند [ (۰، ۱) ، (۰، ۲) ، (۱، ۲) ]).

۵. اتلاف ۱ را محاسبه کنید که در آن پارامتر as-is برابر با Ec و پارامتر to-be برابر با IOU است.

۶. تصویر ورودی را به مدل اضافه کنید و یک بردار جایگزاری ایجاد کنید. (Ei: بردار جایگزاری تصویر ورودی)

۷. بردارهای تعبیه تصاویر کراپ شده را پاک کرده و شباهت کسینوسی بین Ei و Sum (Ec) را محاسبه کنید.

۸. سپس IOU را با توجه به مجموع ماسک‌های تصاویر کراپ شده بر روی تصویر ورودی محاسبه کنید.

۹. اتلاف ۲ را محاسبه کنید که در آن پارامتر as-is، IOU از مرحله قبل و پارامتر to-be، شباهت کسینوسی بین Ei و Sum (Ec) است.

۱۰. تلفات را جمع کرده و تلفات را پس انتشار دهید.

تابع زیان

برای محاسبه تلفات، من از عدد اویلر به دلیل گراف آن استفاده کردم. هنگام محاسبه تلفات، من پارامترهای (D) to-be را از as-is را کاهش می‌دهم. سپس، D را به توان عدد اویلر با یک ضریب اضافه می‌کنم. سپس، ۱ را از تابع کلی کم می‌کنم تا گراف را به سمت پایین تغییر دهم. خط قرمز برای تلفات مثبت استفاده می‌شود، خط آبی برای تلفات منفی استفاده می‌شود.

تلفات در پایتون

def criterion(to_be, as_is):
diff = as_is-to_be
res = torch.where(diff>0,
torch.abs((torch.exp(4*(diff))-1)).sum(),
torch.abs((torch.exp(4*(-diff))-1)).sum())
return res.sum()

شکل ۲: نمودار تابع اتلاف (مساحت بالای محور x)
شکل ۲: نمودار تابع اتلاف (مساحت بالای محور x)

آزمایش‌ها و نتایج

من از مجموعه داده ShakeNet استفاده کردم. برای مدل، من از یک از پیش آموزش‌دیده (با مجموعه داده ImageNet) ResNet-۳۴ استفاده کردم. من یک لایه جاسازی در انتهای مدل اضافه کردم.

اول، من مدل را بدون هیچ آموزشی تست کردم. دقت آن ۹۶ / ۷۴٪ بود. سپس، مدل را برای ۱۵ دوره آموزش دادم. دقت به ۹۰.۶۹٪ افزایش یافت. این نشان می‌دهد که این روش به مدل کمک می‌کند تا ویژگی‌های معنادار و بهتری را استخراج کند.

این متن با استفاده از ربات ترجمه مقاله دیتاساینس ترجمه شده و به صورت محدود مورد بازبینی انسانی قرار گرفته است.در نتیجه می‌تواند دارای برخی اشکالات ترجمه باشد.
مقالات لینک‌شده در این متن می‌توانند به صورت رایگان با استفاده از مقاله‌خوان ترجمیار به فارسی مطالعه شوند.