Ahmadreza Sezavar
Ahmadreza Sezavar
خواندن ۱۵ دقیقه·۳ سال پیش

Mask R-CNN, DeepLab, U-NET

مطالعه ای در مورد معماری و نحوه کارکرد شبکه های Mask R-CNN, DeepLab, U-NET که برای بخش بندی تصویر پیشنهاد شده اند.

مقدمه

در این مطالعه به بررسی مقاله های با موضوعات Mask RCNN، U-Net و DeepLab می پردازیم. زمینه ای که این شبکه های عصبی نام برده شده بکار رفته اند، بخش بندی (قطعه بندی) تصاویر می باشد.

در پردازش تصاویر دیجیتالی، منظور از بخش بندی تصویر (image segmentation)یعنی تخصیص دادن یک لیبل به هر پیکسل در تصویر، به طوری که پیکسل ها با لیبل های یکسان دارای مشخصه های مشابهی باشند.

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

· بخش بندی معنایی (semantic segmentation): تخصیص دادن یک لیبل به هر پیکسل موجود در تصویر، این لیبل ها می تواند شامل شخص، ماشین، چتر، گل و غیره باشند.

· بخش بندی نمونه (instance segmentation): نوعی بخش بندی است که شی هایی که تحت یک لیبل هستند را هر یک را به عنوان یک شی بخصوص و منحصر به فرد تلقی می کند.

· بخش بندی پانوپتیک (Panoptic segmentation): ترکیب بخش بندی معنایی و بخش بندی نمونه است. به هر یک از پیکسل های درون تصویر دو لیبل واگذار می کند که شامل برچسب معنایی و شناسه نمونه می باشد.

شاید این سوال در ذهن خطور کند که چرا تنها از الگوریتم های شناسایی شی (object detection)استفاده نمی کنیم و چه نیازی به الگوریتم های بخش بندی می باشد، جواب این است که در کاربرد هایی مانند خودروهای خودران، وقتی تنها از الگوریتم های شناسایی شی استفاده کنیم، جعبه های محدود کننده (Bounding Box) مختلف ممکن است با هم هم پوشانی داشته باشند و این باعث سردگمی سیستم خودرو می شود در حالیکه استفاده از الگوریتم های بخش بندی چنین ضعفی را از بین می برد.

در ادامه به تحلیل هر یک از شبکه های عصبی معرفی شده می پردازیم.

Mask RCNN

چارچوب Mask R-CNNبه منظور بخش بندی نمونه اشیا به کار می رود. لازم به یادآوری است که در بخش بندی معنایی ماسکی که به شی های تحت یک لیبل می دهیم، یکسان است، مثلا همگی رنگ یکسانی دارند ولی در بخش بندی نمونه شی های تحت یک لیبل، ماسک متفاوتی می گیرند. برای معرفی Mask R-CNN ابتدا لازم است چارچوب ها و الگوریتم های قبلی مرتبط با آن را با هم مرور کنیم.

R-CNN

شناسایی اشیا با کمک R-CNN، در این روش محققان با استفاده از الگوریتمی با نام selective searchبه شناسایی 2000 پیشنهاد ناحیه (Region Proposals)که کادر هایی حاوی شی می باشند، می پرداختند و سپس یک طبقه بند مبتنی بر روش CNN+ SVMرا بر روی این 2000 کادر اعمال می کردند. R-CN دقت بسیار خوبی داشت ولی سرعت آن بسیار پایین بود، برای مثال برای هر تصویر به کمک GPUحدود 18 تا 20 ثانیه زمان برای شناسایی می برد.


Fast R-CNN

شناسایی اشیا با کمک Fast R-CNN: مشکلی روش R-CNN داشت زمان بر بودن آن بود. برای هر پیشنهاد ناحیه، یک فضای ویژگی تولید می شد که با توجه به اینکه روش 2000 پیشنهاد ناحیه از تصویر تولید می کرد، این روند هزینه بر می شد. به همین دلیل در این روش، یک فضای ویژگی واحد برای کل تصویر در ابتدا تولید می کردند، یعنی به جای اینکه CNN را 2000 بار به کار ببریم تنها یکبار روی تصویر ورودی آن را به کار می گیریم و الگوریتم selective search را بعد از آن استفاده می کنیم. پیشنهاد های ناحیه تولید شده توسط selective search برروی فضای ویژگی تولید شده پروجکت شده و این فرآیند را ROI Projection می نامند. در شکل زیر یک نمونه مثال نشان داده شده که چگونه یک ROI Proposal مشخص شده روی تصویر، به روی فضای ویژگی تولید شده، با توجه به نرخ نمونه برداری نگاشت و پروجکت شده است. با توجه به معماری Fast R-CNN که در شکل 3 نشان داده شده، سپس از ROI Pooling استفاده می شود، این لایه ادغامی وظیفه اش این است که ویژگی با سایز مختلف را گرفته و آن را به یک سایز ثابت تبدیل می کند، دلیل استفاده از یک سایز ثابت وجود لایه های کاملا متصل (fully connected layers) می باشد. خروجی لایه ROI Pooling به دو لایه کاملا متصل داده می شود تا عملیات طبقه بندی و تعیین Bounding Box صورت گیرد. در این روش از یک multi task loss function برای آموزش شبکه استفاده می شود.

شکل 2- یک نمونه از پروجکشن ROI Proposal از تصویر به فضای ویژگی
شکل 2- یک نمونه از پروجکشن ROI Proposal از تصویر به فضای ویژگی


شکل 3- معماری Fast R-CNN
شکل 3- معماری Fast R-CNN



Faster R-CNN

شناسایی اشیا با Faster R-CNN: مشکلی که در Fast R-CNN وجود دارد این است که هنوز از روش selective search برای تولید ناحیه های پیشنهادی استفاده می شود که روشی وقت گیر است. در این روش مانند قبل، تصویر ورودی از یک شبکه CNN عبور کرده و فضای ویژگی مرتبط با آن تولید می شود، سپس این فضای ویژگی تولید شده به یک ماژول بنام RPN (Region Proposal Network) داده می شود، RPN در واقع نوآوری Faster R-CNN است که از چندین جعبه های محصورکننده آماده و از پیش تعیین شده بنام anchor استفاده می کند و می آموزد که ناحیه مورد نظر که شی در آن هست را به طور مستقیم پیشنهاد دهد. این anchor ها که هر کدام در اندازه های مختلف می باشند، درکنارشان یک متغیر بنام objectness می باشد که احتمال وجود شی در آن را می گوید. خروجی RPN به همراه فضای ویژگی را به ROI Pooling داده می شود که خروجی اش یک سایز ثابت است و سپس به لایه های کاملا متصل داده می شود و در نهایت عملیات طبقه بندی و تعیین جعبه محدود کننده انجام می شود. مشکلی که این روش دارد، این است که پیشنهاد شی زمان بر هست و سیستم های مختلف یکی پس از دیگری کار میکنند (به صورت توالی) که این باعث میشود کارایی کلی سیستم وابسته به توالی بین لایه ها داشته باشد.

Mask R-CNN

چارچوب Mask R-CNN: یک مدل تعمیم یافته از Faster R-CNN است و در اینجا علاوه بر ارسال فضای ویژگی به RPN و طبقه بند، از آن برای پیش بینی یک ماسک باینری برای شی درون جعبه محصور کننده نیز استفاده می شود. در واقع Mask R-CNN یک نسخه تعمیم یافته از Faster R-CNN است که شامل یک شاخه اضافه برای پیشبینی ماسک های بخش بندی روی ROI ها می باشد. هم چنین به جای استفاده از ROI Pooling از ROI Align استفاده شده تا از اطلاعات spatial که در روش ROI Pool ممکن بود در نظر گرفته نشوند، بهره ببرد. خروجی ROI Align به Mask head داده می شود که شامل دو لایه کانولوشنی برای تولید ماسک برای هریک از ROI ها می باشد. توجه کنید که همانطور که در مقاله اشاره شده، عمل طبقه بندی، به پیشبینی ماسک ها بستگی دارد. تابع خطا نیز مانند قبل یک multi task loss می باشد که در آموزش استفاده می شود (یک تابع خطا مشترک برای طبقه بندی، تعیین جعبه محصور کننده و نیز پیش بینی ماسک). شاخه پیش بینی ماسک، دارای بعد خروجی km^2 برای هر ROI می باشد، که در واقع k ماسک باینری با رزولوشن m*m را انکد می کند.

شکل 4- Mask R-CNN framework
شکل 4- Mask R-CNN framework



U-Net

برای اینکه یک شبکه عصبی عمیق به خوبی آموزش ببیند، نیاز است که هزاران داده آموزشی برچسب گذاری شده وجود داشته باشد. در مقاله U-Net سعی شده راه حلی ارائه شود که استفاده زیادی از افزونگی تصاویر داشته باشد و به کمک آن شبکه عصبی عمیق را به خوبی آموزش دهد. از دلایلی که باعث شده تا الگوریتم U-Netدر سال های اخیر در امر شناسایی اجزای تصویر و بخش بندی کردن آنها بخصوص در زمینه پردازش تصاویر پزشکی، مورد توجه قرار گیرد، می توان به پاسخ دهی با دقت بالا، سرعت بالا فرآیند آموزش و عدم نیاز به مجموعه داده بزرگ و نیز سخت افزار پیچیده و گران قیمت می باشد.

الگوریتم U-Net

الگوریتم U-Netدر سال 2015 در دانشگاه فرایبورگ المان توسط اولاف رنه برگر، فیلیپ فیشر و توماس بروکس برای افزایش دقت و سرعت پردازش و یادگیری، با استفاده از شبکه های کانولوشنی طراحی شد، از نکات قابل توجه در معماری این شبکه، می توان به عدم وجود لایه های کاملا متصل اشاره کرد، که باعث شده میزان پیچیدگی شبکه را کاهش دهد. ایده نهفته در این الگوریتم، ایجاد یک مسیر انقباضی متوالی است که با جایگزین کردن لایه های Pooling به جای لایه های samplingرخ داده است. در ادامه پس از گرد آوری ویژگی های مورد نظر، از یک مسیر انبساطی متوالی استفاده می شود. هدف از به کارگیری چنین مسیری، بازسازی تصویر اولیه و انتشار اطلاعات پس زمینه به درون آن می باشد. به طور خلاصه می توان گفت که شبکه U-Netدارای دومسیر انقباضی و انبساطی متقارن و نظیر هم می باشد که هر آنچه در مسیر انقباضی حذف شده، در مسیر انبساطی بازیابی می شود.

جزئیات معماری U-Net

همان طور که در شکل 5 مشخص است، مسیر انقباضی مانند یک شبکه عصبی کانولوشنی است، لایه کانولوشنی در این شبکه با استفاده از کرنل سایز های فیلتر های مورد نظر را اعمال می کنند. در ادامه از تابع فعال ساز Relu استفاده شده و سپس از لایه MaxPooling با سایز و اندازه گام 2 استفاده می شود. استفاده متوالی این سه لایه در کنار هم، یک نمونه برداری کاهنده (downsampling) ایجاد می کند. هر طبقه نمونه بردار کاهنده، کانال های ویژگی را دوبرابر می کند. حال در مسیر انبساطی ما با یک طبقه نمونه بردار افزاینده (upsampling) طرف هستیم، که یک لایه کانولوشنی با سایز وجود دارد که کانال های ویژگی را کاهش می دهد، هم چنین داده هایی که قرار است به تصویر اضافه شوند را از طبقه نظیر خود در مسیر انقباضی دریافت می کند. سپس یک لایه کانولوشنی با سایز به همراه تابع فعال سایز Reluوجود دارد. در لایه آخر نیز از لایه کانولوشنی استفاده شده که هر 64 بردار ویژگی را به یک طبقه مورد نظر نگاشت می کند. شبکه U-Net دارای 23 لایه کانولوشنی می باشد.

شکل 5- معماری شبکه عصبی U-Net
شکل 5- معماری شبکه عصبی U-Net



آموزش شبکه U-Net

تصویر مورد نظر در مجموعه داده به عنوان ورودی شبکه و طرح بخش بندی شده آنها در فایل های جداگانه قرار گرفته، تابع انرژی شبکه یک تابع Softmax که با تابع هزینه cross-entropy ترکیب شده و به نقشه خروجی اعمال می شود، محاسبه می گردد. هم چنین الگوریتم بهینه سازی، گرادیان کاهشی تصادفی می باشد و اندازه حرکت با مومنتوم اعمال شده به شبکه باید حداکثر و در حدود 0.99 باشد، این عمل باعث می شود شبکه از تصاویری که پیشتر مشاهده کرده در بروزرسانی ها بیشترین استفاده را نماید. نکته مورد توجه بعد، مقدار دهی اولیه به شبکه و لایه ها می باشد، اگر این کار به خوبی انجام نشود، بخش هایی از شبکه بیش از حد فعال می شوند و بخش هایی دیگر غیرفعال شده و اصلا در محاسبات درگیر نمی شوند، برای محاسبه مقدار اولیه هر نورون از فرمول 1 استفاده می شود که در آن N تعداد ورودی های نورون است.

Initial weight = sqrt(2/N) فرمول-1

متد افزونگی داده به کار رفته در U-net

زمانی که برای آموزش شبکه با داده کمی در دسترس است، این روش، متدی بسیار کارآمد برای آموزش شبکه می باشد. توسط افزونگی داده می توانیم تغییرات مختلفی همچون، چرخش، دوران زاویه، روشنایی و تاریکی تصویر، تغییر اندازه، افزودن نویز و محو کردن و غیره را به تصویر اصلی اعمال کنیم و تصاویر جدیدی تولید کرده و برای آموزش استفاده کنیم. برای مثال استفاده از لایه Dropout خود نوعی اعمال تغییر در ورودی است که در آخر مسیر انقباضی اضافه شده است. به طور کلی الگوریتم U-Net از انواع مختلف افزونگی داده استفاده کرده که علاوه بر تامین داده آموزشی بزرگ برای عمل یادگیری، مزیت دیگری همچون: تغییر فرم بافت تصویر را نیز داشته است که رایج ترین نوع تغییر در پزشکی می باشد که با این افزونگی باعث آشنایی بیشتر شبکه با انواع مختلف تغییر فرم بافت می شود.

DeepLab

این مقاله در مورد بخش بندی معنایی است که دارای سه نوآوری اصلی است: اول اینکه از کانولوشن با فیلتر های از نوع up sampled استفاده کرده که آنها را atrous convolution نامیده، این ویژگی برای کنترل رزولوشنی که ویژگی ها از آن تولید می شوند، طراحی شده است. دوم، طراحی atrous spatial pyramid pooling می باشد، تا بخش بندی پایدار تری در مقیاس های مختلف برای اشیا داشته باشد. سوم، ارتقا محلی سازی مرزبندی های اشیا با ترکیب روش های DCNN و مدل های گرافیکی احتمالی می باشد. در ادامه به توضیح روش های اصلی به کار رفته در مقاله می پردازیم.

Atrous Convolution

این نوع از کانولوشن که در برخی از مقالات بنام dilated convolution نیز به کار رفته است، نحوه کارکرد جالبی دارد، برای درک بهتر شکل 6 را مشاهده کنید، در شکل سمت چپ حالت استاندارد استفاده از کانولوشن نشان داده شده که rate = 1 دارد، در حالت atrous مقدار rate افزایش پیدا می کند، همان طور که در شکل میانی و سمت راست نشان داده شده وقتی rate را افزایش می دهیم، میزان گسترش respective field زیاد می شود، منظور از respective field یعنی ناحیه ای از تصویر ورودی که کرنل (فیلتر) کانولوشنی روی آن اعمال می شود، فضای خالی ایجاد شده را نیز با صفر می پوشانند.

شکل 6- atrous (dilated) convolution kernels
شکل 6- atrous (dilated) convolution kernels


مزیتی که این روش ایجاد می کند این است که چون respective field گسترده تری دارد، پس اطلاعات global تری را جمع آوری می کند و میزان context بیشتری را کسب می کند. این روش باعث افزایش دقت در کاربرد هایی مانند بخش بندی ارائه می دهد.

Atrous spatial pyramid pooling (Aspp)

این لایه به این صورت عمل می کند که بر روی فضای ویژگی تولید شده، atrous convolution ها با rate های مختلف و به صورت موازی اعمال می شوند، و در نهایت با هم همجوشی (fuse) پیدا می کنند. به دلیل اینکه اشیا متعلق به یک کلاس، ممکن است مقیاس های متفاوتی داشته باشند، ASPP کمک می کند تا شبکه با مقیاس های مختلف یک شی آشنا شود و دقت نهایی افزایش پیدا کند.

شکل 7- ASPP
شکل 7- ASPP



Fully connected crf

یک میدان تصادفی مشروط (CRF) یک روش مدل سازی آماری است که زمانی مورد استفاده قرار می گیرد که برچسب های کلاس برای ورودی های مختلف مستقل نیستند. برای مثال در زمینه بخش بندی تصویر، برچسب کلاس برای یک پیکسل به برچسب کلاس پیکسل های همسایه اش نیز بستگی دارد. در چنین مواقعی با استفاده از CRF می توان یک پیشبینی برای برای یک پیکسل موجود در تصویر انجام داد به طوری که برچسب کلاس پیکسل های که به پیکسل ما بستگی دارند نیز در نظر گرفته می شود. در CRF هر پیکسل یک نقطه (data point) در نظر گرفته می شود، این نقاط با یک دیگر یک گراف را تشکیل می دهند که توسط یال هایی با یک دیگر مرتبط هستند، اگر بین نقطه i و j یک یال باشد، به این معناست که برچسب کلاس های این دو نقطه به همدیگر وابسته اند. معمولا گراف ایجاد شده یک گراف sparce است و عملیات های محاسباتی با سرعت بالایی انجام می شوند.

وقتی که با یک fully-connected CRF طرف هستیم، هر نود در گراف همسایه نود دیگری است، این باعث می شود که عملیات های محاسباتی با پیچیدگی بیشتر انجام شوند، البته اشاره شده است که بهینه سازی انجام شده با کمک وزن هایی گاوسی می تواند به بهبود آن کمک شایانی کند که اشاره شده که دو کرنل گاوسی استفاده شده، کرنل اولی باعث می شود که پیکسل ها با رنگ ها و مکان مشابه یک برچسب کلاس مشابه داشته باشند و کرنل دوم برای در نظر گیری spatial proximity وقتی که smoothness ایجاد می شود، می باشد. به طور کلی استفاده از این روش باعث تولید لبه های تیزتر و گوشه های با دقت تر در تصویر می شود.

جزئیات معماری Deeplab

به طور خلاصه، همان طور که در شکل 8 نشان داده شده، تصویر ورودی به یک شبکه کانولوشنی عمیق مانند VGG-16 و یا ResNet-101 داده می شود، از atrous convolution جهت کاهش درجه down sampling استفاده شده، سپس از یک bilinear interpolation برای اینکه نقشه ویژگی را به رزولوشن تصویر ورودی ارتقا دهند، استفاده شده و درنهایت به کمک fully-connected CRF برای بهبود نتایج بخش بندی و مرزبندی بهتر کمک گرفته می شود.

شکل 8- ساختار مدل برای بخش بندی تصویر
شکل 8- ساختار مدل برای بخش بندی تصویر


جمع بندی و نتیجه گیری

همان طور که بیان شد، روش Mask RCNN نسبت به روش های پیشین خود که دارای پیشرفت هایی می باشد، از مهم ترین مزیت های آن می توان به موارد رو به رو اشاره کرد: سادگی در آموزش شبکه، برتری در عملکرد نسبت به روش های موجود در زمان ارائه مقاله، بهینه بودن (efficient) و داشتن سربار بسیار کم نسبت به روش قبلی (Faster RCNN)، قابلیت تعمیم بخشی و اینکه به آسانی در کاربرد های دیگر مانند pose estimation, object detection استفاده می شود. از معایب آن می توان به این نکته اشاره کرد که به خوبی جزئیات نمونه (instance details) را پیش بینی نمی کند و شبکه به خوبی ارتباط بین پیکسل ها در لبه ها را درک نمی کند که روش هایی از جمله Mask Refined RCNN برای غلبه براین مشکلات ارائه شده اند.

الگوریتم U-NET که در سال 2015 برای بخش بندی تصاویر پزشکی ارائه شده بود، دارای مشخصه های مفیدی از قبیل: مناسب بودن برای عملیات بخش بندی و تولید خروجی به صورت pixel-wise می باشد، معماری ساده که بلاک هایی ساده در آن تکرار شده بودند، عملکرد خوب و مناسب که در چندین ارزیابی و benchmark برنده شده بود و نیز اینکه با مجموعه داده کوچکی قابلیت کار کردن داشت، می توان اشاره کرد. از نقاط ضعف آن می توان به این نکته اشاره کرد که فرآیند یادگیری در لایه های میانی کند می شود و نیز داشتن redundancy های زیاد به دلیل هم پوشانی patch ها.

روش DeepLab یکی از روش های مطرح در زمینه بخش بندی تصویر می باشد که خصوصیت های اصلی آن از جمله کانولوشن atrous و پولینگ ASPP معرفی شدند که به ترتیب باعث جمع آوری اطلاعات global تر و کسب context بیشتر و آشنایی شبکه با scale های مختلف اشیا موجود در تصویر می شوند. خروجی نیز به کمک fully connected CRF بهتر و با کیفیت تر شده و لبه ها و گوشه ها به خوبی شناسایی می شوند، همگی این موارد دقت نهایی شبکه را افزایش می دهد، در ادامه ورژن های مختلفی از این روش ارائه شدند. برای مثال DeepLab v3 از ماژول parallel atrous convolution استفاده کرد تا بتواند محتوا در scale های مختلف را دریافت کند و نیز اینکه CRF را از شبکه خود کنار گذاشت، نتایج نیز نشان دادند که شبکه نسبت به ورژن های قبلی دارای بهبود هایی شده است. DeepLab v3+ ورژن قبلی خود را بهبود هایی داد، به این صورت که ماژول decoder ای برای بهبود نتایج بخش بندی به شبکه اضافه کرد و نیز از نقشه ویژگی های لایه میانی شبکه برای تولید تصویر خروجی استفاده کرد.


گردآورنده: احمدرضا سزاوار


image segmentationmask rcnndeeplabu net
شاید از این پست‌ها خوشتان بیاید