استفاده از یادگیری عمیق برای بینایی ماشین — به زبان ساده

۶۷۴ بازدید
آخرین به‌روزرسانی: ۲۸ شهریور ۱۴۰۲
زمان مطالعه: ۶ دقیقه
استفاده از یادگیری عمیق برای بینایی ماشین — به زبان ساده

یادگیری عمیق یکی از مباحث داغ این روزها در حوزه علم داده است که برای بینایی ماشین نیز استفاده می‌شود. مجموعه داده‌های بزرگ به همراه توان بازنمایی شبکه‌های عصبی کانولوشن عمیق (CNN) باعث شده که یادگیری عمیق بتواند مدل‌های بسیار دقیق و قدرتمندی بسازد. با این وجود، همچنان یک چالش هنوز حل نشده مانده است و آن چگونگی طراحی مدل است.

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

اینک سؤال این است که چگونه می‌توان مدل‌هایی برای همه این وظایف متفاوت طراحی کرد؟ در این مقاله می‌خواهیم به این سؤال و به طور کلی همه موارد مرتبط با استفاده از یادگیری عمیق برای بینایی ماشین بپردازیم.

تشخیص شی
تشخیص شیء و قطعه‌بندی نمونه‌ها از طریق Mask-RCNN

طبقه‌بندی

شبکه‌های طبقه‌بندی تصویر در میان همه وظایف بینایی ماشین از همه مشهورتر هستند و با یک ورودی اندازه ثابت (fixed size) آغاز می‌شوند. تصویر ورودی می‌تواند هر تعداد از کانال‌ها را داشته باشد، اما به طور معمول تصاویر RGB از 3 کانال تشکیل شده‌اند. زمانی که مشغول طراحی یک شبکه هستیم، وضوح (resolution) تصویر از نظر فنی می‌تواند در هر اندازه‌ای باشد و تنها الزام این است که آن قدر بزرگ باشد که از آن نمونه‌برداری کاهشی (downsampling) که قرار است در شبکه اجرا شود پشتیبانی بکند. برای نمونه اگر بخواهید 4 مرحله درون شبکه نمونه‌برداری کاهشی بکنید، در این صورت ورودی باید دست‌کم $$4 ^ 2 = 16× 16$$ پیکسل اندازه داشته باشد.

زمانی که در شبکه عمیق‌تر می‌شویم، وضوح فضایی افزایش می‌یابد زیرا تلاش می‌کنیم همه آن اطلاعات را فشرده کنیم و به یک بازنمایی بردار 1 بعدی دست یابیم. برای اطمینان از این که شبکه همواره ظرفیت انتقال همه اطلاعات استخراج شده را دارد باید تعداد نگاشت ویژگی‌ها را متناسب با عمق اجرای کاهش وضوح فضایی افزایش دهیم. بدین ترتیب ما اطلاعات فضایی را در فرایند نمونه‌برداری کاهش (downsampling) از دست می‌دهیم و برای جبران زیان، نگاشت‌های ویژگی خود را گسترش می‌دهیم تا اطلاعات معناشناختی را افزایش دهیم.

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

Classification

تشخیص شیء

آشکارسازهای شیء شامل دو نوع تک‌مرحله‌ای و دومرحله‌ای هستند. هر دو این انواع کار خود را با «کادرهای محوری» (anchor box) آغاز می‌کند که همان مستطیل‌های محصورکننده هستند. آشکارساز ما قصد دارد به جای پیش‌بینی مستقیم کادرها، تفاوت‌های بین این کادرها با زمینه را شناسایی کند.

ما در یک آشکارساز دومرحله‌ای به طور طبیعی دو شبکه داریم که یک شبکه پیشنهاد کادر و یک شبکه طبقه‌بندی است شبکه پیشنهاد کادر مختصاتی برای کادرهای محصورکننده ارائه می‌دهد که تصور می‌کند اشیا به احتمال بالا در آن‌ها قرار دارند و در این مورد نیز این کادرها با کادرهای محوری مرتبط هستند. سپس شبکه طبقه‌بندی هر کدام از این کادرهای محصورکننده را انتخاب کرده و شیءهای بالقوه را که در آن قرار دارند طبقه‌بندی می‌کند.

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

Object Detection
معماری تشخیص شیء دومرحله‌ای RCNN سریع‌تر.

 

object detection
معماری تشخیص شیء تک‌مرحله‌ای SSD

قطعه‌بندی

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

این وضعیت منجر به این می‌شود که شبکه‌ها طوری طراحی شوند تا اطلاعات لایه‌های قبلی و با وضوح بالا را با لایه‌های عمیق‌تر و با وضوح کمتر ادغام کنند.

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

معماری قطعه‌بندی GCN
معماری قطعه‌بندی GCN

تخمین Pose

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

  1. ابتدا ویژگی‌ها از تصویر با استفاده از شبکه طبقه‌بندی استاندارد استخراج می‌شوند.
  2. سپس این ویژگی‌ها به شبکه عرضه می‌شود و با آموزش دادن شبکه فرعی برای پیش‌بینی یک مجموعه 2 بعدی از heatmap-ها، هر کدام به یک نقطه کلیدی مرتبط می‌شود که شامل مقادیر اطمینان برای هر پیکسل تصویر است و بدین ترتیب احتمال وجود یک نقطه کلیدی در آن تعیین می‌شود.
  3. در نهایت با فرض وجود ویژگی‌هایی از شبکه طبقه‌بندی، اقدام به آموزش دادن شبکه فرعی برای پیش‌بینی مجموعه‌ای از میدان‌های بُرداری 2 بعدی می‌کند که در آن هر میدان برداری درجه ارتباط بین نقاط کلیدی را کدگذاری می‌کند. سپس نقاط کلیدی که دارای ارتباط با بالا هستد، به صورت متصل به هم تلقی می‌شوند.

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

معماری تخمین Pose به نام OpenPose
معماری تخمین Pose به نام OpenPose

بهبود و بازیابی

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

کار خود را با ارسال بدون تغییر تصویری که قرار است بهبود/بازیابی شود به شبکه آغاز می‌کنیم. این شبکه صرفاً از مجموعه‌ای از کانولوشن-ها و تابع‌های فعالسازی مختلف تشکیل یافته است. این بلوک‌ها به طور معمول از بلوک‌های توسعه یافته ابتدایی برای طبقه‌بندی تصاویر مانند Residual Blocks ،Dense Blocks ،Squeeze Excitation Blocks و غیره الهام گرفته‌اند و یا در مواردی کپی دقیقی از آن‌ها هستند. در لایه آخر هیچ تابع فعالسازی وجود ندارد و حتی از سیگموئید یا softmax نیز استفاده نشده است، زیرا می‌خواهیم پیکسل‌های تصویر را به صورت مستقیم پیش‌بینی کنیم و به هیچ احتمال یا امتیازبندی نیاز نداریم.

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

معماری Super-Resolution به نام EDSR
معماری Super-Resolution به نام EDSR

بازشناسی اعمال

بازشناسی اعمال یکی از کاربردهایی است که به طور خاص نیازمند داده‌های ویدئویی است تا به خوبی اجرا شود. برای طبقه‌بندی یک عمل باید دانشی از تغییراتی که در طی زمان در صحنه رخ می‌دهد، داشته باشیم. این وضعیت به طور طبیعی نیازمند استفاده از ویدئو است. شبکه ما باید طوری آموزش ببیند که در مورد اطلاعات فضایی و زمانی یعنی تغییراتی که در فضا و زمان رخ می‌دهند مواردی را بیاموزد. شبکه کامل به این منظور 3D-CNN است.

یک 3D-CNN همان طور که از نامش مشخص است یک Convolutional Net است که از کانولوشن های 3 بعدی استفاده می‌کند. دقت کنید که این نوع شبکه‌ها از شبکه‌های CNN معمولی متفاوت هستند چون کانولوشن های در 3 بعد یعنی عرض، ارتفاع و زمان اعمال می‌شوند. از این رو هر پیکسل خروجی از روی محاسباتی پیش‌بینی می‌شود که بر مبنای هر دو پیکسل پیرامون خود و پیکسل‌ها در فریم‌های قبلی و بعدی در همان مکان دارد.

ارسال تصویر به صورت مستقیم در یک دسته بزرگ
ارسال تصویر به صورت مستقیم در یک دسته بزرگ

فریم‌های ویدئو می‌توانند به چند روش ارسال شوند؛ فریم‌ها می‌توانند به صورت مستقیم در یک دسته بزرگ مانند تصویر فوق ارسال شوند. از آنجا که یک توالی از فریم‌ها را ارسال می‌کنیم، هر دو اطلاعات فضایی و مکانی در دسترس هستند.

 گردش نوری
فریم منفرد + گردش نوری (سمت چپ). ویدو + گردش نوری (راست)

همچنین می‌توانیم یک فریم تصویر واحد را در یک جریان (اطلاعات فضایی داده‌ها) ارسال کنیم و بازنمایی گردش نوری متناظر آن (اطلاعات زمانی داده‌ها) را نیز از ویدئو استخراج کنیم. ما ویژگی‌ها را از هر دو مورد با استفاده از 2D CNN معمولی پیش از ترکیب کردن آن‌ها برای ارسال به 3D CNN استخراج می‌کنیم و سپس هر دو نوع اطلاعات را با هم ترکیب می‌کنیم.

توالی فریم‌های خود را به یک 3D CNN ارسال می‌کنیم و بازنمایی گردش نوری ویدیو را نیز به 3D CNN دیگر می‌فرستیم. هر دو جریان داده در خود اطلاعات فضایی و زمانی را دارند. این وضعیت ممکن است کندترین گزینه باشد؛ اما دقیق‌ترین انتخاب نیز محسوب می‌شود، چون ما روی بازنمایی‌های متفاوتی از ویدئوی خود پردازش‌های مختلفی اجرا می‌کنیم که هر دو شامل همه اطلاعات مورد نیاز ما هستند. همه این شبکه‌ها، به طبقه‌بندی عمل‌های صورت گرفته در ویدئو می‌پردازند.

اگر این مطلب برای شما مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

==

بر اساس رای ۲ نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع:
towardsdatascience
نظر شما چیست؟

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