پیاده سازی شبکه عصبی عمیق در متلب- قسمت دوم

پیاده سازی شبکه عصبی عمیق در متلب- قسمت دوم

در درسنامه ی قبل، لایه ی اول از شبکه های عصبی عمیق کانولوشن یعنی لایه ی کانولوشن را بررسی کردیم. در این قسمت، سایر لایه های این شبکه را مطالعه خواهیم کرد.
دومین لایه، لایه ی Pooling است. یک لایه pooling معمولا بعد از یک لایه کانولوشن قرار می گیرد و از آن برای کاهش اندازه نقشه های ویژگی و پارامترهای شبکه می توان استفاده کرد. همانند لایه های کانولوشنی, لایه های pooling بخاطر در نظر گرفتن پیکسل های همسایه در محاسبات خود, نسبت به تغییر مکان(translation) بی تغییر (با ثبات) هستند. برای پیاده سازی این لایه دو روش رایج وجود دارد:
1. Max pooling
2. Average pooling
آنچه در این لایه اتفاق می افتد، کاهش ابعاد است. به این صورت که نقشه های ویژگی استخراج شده از لایه ی قبل، به پنجره های مجزا از هم2*2 یا غیره تقسیم می شوند. بسته به نوع روش انتخاب شده، میانگین مقادیر موجود در هرکدام از پنجره ها(Average pooling) یا بیشترین مقدار موجود در این پنجره(Max pooling ) محاسبه شده و بعنوان مقدار در نقشه ویژگی جدید انتخاب می شود.
درشکل زیر نحوه ی اعمال این دو روش نمایش داده شده است:

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

function [I_POOLING] = MyPooling(y)
%%POOLING LAYER
%%y=img_conv
%%I_POOLING=img_conv_pool
L=size(y(:,:,:,1),1)/2;
M=size(y(:,:,:,1),2)/2;
l=1;
m=1;

for k=1:size(y,3)
    m=1;
    for i=1:2:size(y(:,:,1),1)
        l=1;
        for j=1:2:size(y(:,:,1),2)
            A=[y(i,j,k), y(i+1,j,k),y(i,j+1,k), y(i+1,j+1,k)];
            I_POOLING(m,l,k)=max(A);
            
            l=l+1;
        end
        m=m+1;
    end
end

end

(Boureau et al) تحلیل نظری دقیقی از کارایی max pooling و average pooling ارائه داد. (Scherer et al.) هم مقایسه ای بین این دو عملیات انجام داد و فهمید max pooling میتواند باعث همگرایی سریعتر , تعمیم بهتر (بهبود تعمیم دهی) و انتخاب ویژگی های نا متغیر بسیار عالی شود. طی سالهای اخیر پیاده سازی های سریع مختلفی از انواع مختلفی از CNN بر روی GPU انجام شده است که اکثر آنها از عملیات Max pooling استفاده می کنند .
لایه های POOLING از میان سه لایه شبکه های کانولوشن , تنها لایه ای هستند که بیشترین میزان مطالعه روی آنها انجام شده است. سه روش معروف در رابطه با این لایه وجود دارد که هرکدام اهداف متفاوتی را دنبال میکنند.
Stochastic pooling
یک کاستی max pooling این است که نسبت به overfitting مجموعه آموزشی حساس بوده, و تعمیم را سخت میکند. با هدف حل این مشکل, Zeiler et al.(28) روش stochastic pooling را پیشنهاد داد که در آن عملیات قطعی pooling با یک رویه اتفاقی جایگزین میشود. این رویه اتفاقی ,انتخاب تصادفی مقادیر در داخل هر ناحیه Pooling بر اساس یک توزیع چندجمله ای است. این عملیات شبیه max pooling استاندارد با تعداد زیادی کپی از تصویر ورودی که هر کدام تغییرشکل محلی کوچکی دارند است. طبیعت تصادفی (stochastic) بودن برای جلوگیری از مشکل Overfitting مفید بوده و به همین دلیل از آن در این روش استفاده شده است.
(Spatial pyramid pooling (SPP
معمولا روش های مبتنی بر شبکه های عصبی کانولوشن نیازمند یک تصویر ورودی با اندازه ثابت هستند. این محدودیت ممکن است باعث کاهش دقت تشخیص برای تصاویری با اندازه دلخواه شود. به منظور حذف این محدودیت , (He et al) از یک معماری شبکه عصبی کانولوشن معمولی استفاده کرد با این تفاوت که لایه pooling آخر را با یک لایه spatial pyramid pooling جایگزین نمود. این لایه قادر به استخراج نماد ها (تصاویر) با اندازه ثابت از تصاویر (یا نواحی) دلخواه است. این روش باعث ایجاد یک راه حل قابل انعطاف برای مدیریت مقیاس ها, اندازه ها و aspect ratio های مختلف میشود که میتوان از آن در هر ساختار و معماری CNNی استفاده کرده و کارایی آنرا افزایش داد.
Def-pooling
مدیریت و رسیدگی به تغییر شکل یک چالش اساسی در بینایی کامپیوتر است. خصوصا در زمینه های مربوط به تشخیص اشیاء (object recognition) . Max pooling و Average pooling برای مدیریت تغییر شکل (deformation) مفید اند اما قادر به یادگیری محدودیت تغییر شکل (deformation) و مدل هندسی اجزای شئ نیستند. به منظور مقابله بهتر با تغییر شکل ( Ouyang et al. ) یک لایه pooling جدید با تغییر شکل محدود (deformation constrained pooling layer) معرفی کرد. که به def-pooling layer معروف است. تا به این وسیله مدل عمیق (deep model) بدست امده با یادگیری تغیرشکل الگوهای دیداری (deformation of visual patterns.) غنی شود. از این لایه میتوان بجای لایه max pooling در هر سطحی از انتزاع استفاده کرد.
میتوان از ترکیب چندین نوع مختلف لایه pooling که هر کدام با هدف و شیوه متفاوتی توسعه پیدا کرده اند, کارایی یک شبکه عصبی کانولوشن را افزایش داد.

برای مطالعه ی بیشتر به مقاله ی مروری زیر مراجعه نمایید:

Deep learning for visual understanding: A review

۸ دیدگاه
  • ارسال شده در۳:۰۹ ب.ظ,دی ۵, ۱۳۹۶

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

  • ارسال شده در۱۰:۱۱ ب.ظ,دی ۲۲, ۱۳۹۶

    سلام ممنون از مباحث خوب شما
    یه سوال داشتم از این روش برای پیش بینی های عددی هم میشه استفاده کرد یعنی امکان داره ورودی بجای تصویر یه بردار یا ماتریس عددی باشه؟

  • حسن زراعتکاران
    پاسخ
    ارسال شده در۱۰:۳۵ ق.ظ,دی ۳۰, ۱۳۹۶

    سلام و خدا قوت
    جسارتا کدهای شبکه عمیق که شما گذاشتید روی کدوم ورژن متلب اجرا میشن؟؟

  • محمد امیر
    پاسخ
    ارسال شده در۶:۴۸ ب.ظ,بهمن ۹, ۱۳۹۶

    سلام.
    مگر دیپ با پایتون نیست؟
    میشه توضیح بدبد؟
    ممنون

    • ارسال شده در۸:۱۳ ب.ظ,بهمن ۹, ۱۳۹۶

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

ارسال یک نظر

نظر
نام
ایمیل
وبسایت