معرفی انواع کانولوشن‌ها: Conv1D, Conv2D, Conv3D


شاید تا بحال تصاویر و تجسم سازی‌های زیادی از لایه‌های کانولوشنی با ابعاد مختلف دیده باشید و پس از خواندن یک مقاله‌ی کامل هنوز هم درک تصاویر برایتان مشکل بوده باشد. در این مقاله قصد داریم لایه‌های کانولوشنی با ابعاد مختلف را به صورت شهودی و به دور از محاسبات و ریاضیات درک کنیم؛ لایه‌ی کانولوشنی 1 بعدی، لایه‌ی کانولوشنی 2 بعدی، لایه‌ی کانولوشنی 3 بعدی

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

لایه‌ی Conv1D

در کراس، لایه‌ای دقیقاً به همین نام Conv1D وجود دارد که می‌توانید آن را به راحتی به لایه‌های مدل خود اضافه کنید. همانطور که از نام این لایه مشخص است برای دیتاهای یک بعدی کاربرد دارد. مثل سیگنال‌های قلبی (ECG) یا پردازش متن یا پیش بینی سهام.

یکی از همین نوع داده‌ها را فرض کنید اگر به شکل زیر باشد:

و ویژگی (یا فیلتر یا کرنلی) که قرار است از این ورودی استخراج کنیم بردار یک بعدی به صورت زیر باشد:

خروجی به صورت زیر خواهد بود (ابعاد آن از رابطه‌ی (w-F+2p)/s +1 بدست می‌آید. W سایز ورودی، F سایز فیلتر، p ابعاد padding و s همان stride یا گام حرکت است.)

اگر گام حرکت را یک در نظر بگیریم و فیلتر را یکی یکی به صورت زیر جلو ببریم و مقادیر فیلتر را در مقادیر ورودی صرف کنیم:

خروجی به صورت زیر خواهد شد:

حال فرض کنید به جای یک فیلتر، چندین فیلتر داشته باشیم

 

به جای آنکه فیلترها را به این شکل در مقالات نشان دهند، به صورت مکعب نشان می‌دهند که منظور چندین فیلتر است که هر یک روی ورودی یک بعدی اعمال می‌شوند و یک خروجی خواهند داشت پس خروجی نیز مکعب است:

 

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

لایه‌ی Conv2D

اگر دیتای شما چیزی به صورت ماتریس باشد، مثلاً تصویر یا هر ورودی که به صورت ماتریس است، کانولوشن دو بعدی بر خلاف کانولوشن یک بعدی که فقط در سطر اعمال می‌شود، اینجا در سطر و ستون اعمال می‌شود. پس آن stride یا گام حرکت، گام حرکت در سطر و ستون را مشخص می‌کند:

فرض کنید داده تصویر 8 در 8 است به صورت زیر است:

تصویر سه کانال رنگی دارد

و مثلاً بخواهیم لبه‌ها را از این سه کانال رنگی استخراج کنیم، پس روی آن سه فیلتر 5 در 5 اعمال می‌کنیم، توجه داشته باشید که تعداد کانال‌ها و تعداد فیلترها باید یکسان باشد (در اینجا سه کانال رنگی داریم پس سه فیلتر خواهیم داشت)

واگر تصویر ورودی و فیلترها را به شکل مکعب نشان می‌دهیم و عملیات کانولوشن را با هر بار گام حرکت انجام دهیم

هر کدام از این کانولوشن‌ها یک عدد به ما خواهد داد و اعمال کانولوشن هر فیلتر روی ورودی به ما سه خروجی یا feature map خواهد داد. با توجه به رابطه‌ای که در بالا توضیح دادیم و اگر stride=1 باشد سایز خروجی 4 در 4 است. یا بهتر است بگوییم 4*4*1. یعنی تنها یک feature map تولید کرده‌ایم.

لایه‌ی Conv3D

حال فرض کنید ما یک تصویر RGB با سه کانال رنگی داریم که می‌خواهیم از هر کانال ویژگی‌ متفاوتی استخراج کنیم

برای مثال یک ویژگی خاص از کانال قرمزرنگ استخراج کنیم (تعداد فیلتر باید به اندازه ی کانال‌های تصویر ورودی باشد، چون سه کانال ورودی داریم پس سه فیلتر خواهیم داشت)

این ویژگی را از کانال سبز استخراج کنیم:

و این ویژگی‌ از کانال آبی

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

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

که در نهایت می‌توانیم این خروجی را به صورت مکعب نشان دهیم


دیدگاه ها

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

code