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

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

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

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

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

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

طبقه‌بندی

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

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

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

Classification

تشخیص شیء

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

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

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

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

قطعه‌بندی

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

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

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

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

تخمین Pose

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

استخراج ویژگی‌ها از تصویر با استفاده از شبکه طبقه‌بندی استاندارد

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

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

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

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

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

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

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

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

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

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

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

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

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

فریم‌های ویدئو می‌توانند به چند روش ارسال شوند.

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

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

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

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

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

  • مجموعه آموزش‌های پردازش تصویر و پردازش سیگنال
  • آموزش پردازش تصویر با OpenCV
  • مجموعه آموزش‌های آمار، احتمالات و داده‌کاوی
  • آموزش تبدیل تصاویر با عملگرهای ریخت شناسی در OpenCV
  • بازشناسی چهره (Face Recognition) پیشرفته با استفاده از اکسل — به زبان ساده
  • ده معماری پیشرفته‌ یادگیری عمیق

==

بلی خیر

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

درباره ی admin

مطلب پیشنهادی

جستجوی تمام متن در لاراول با استفاده از Scout — به زبان ساده

جستجوی تمام متن یک قابلیت ضروری جهت فراهم ساختن امکان حرکت در میان صفحه‌های وب‌سایت‌های با محتوای گسترده است. در این مقاله، شیوه پیاده‌سازی امکان جستجوی تمام متن را برای یک اپلیکیشن لاراول بررسی می‌کنیم. در واقع ما از کتابخانه Scout لاراول استفاده می‌کنیم که پیاده‌سازی جستجوی تمام متن را به امری ساده و جذاب تبدیل کرده است. مستندات رسمی، کتابخانه Scout لاراول را به صورت زیر توصیف می‌کنند: کتابخانه Scout لاراول یک راه‌حل ساده و مبتنی بر درایور برای افزودن امکان جستجوی تمام متن به مدل‌های Eloquent ارائه می‌کند. Scout با استفاده از «مشاهده‌گرهای مدل» (model observers) به طور خودکار اندیس‌های جستجو را در وضعیتی همگام‌سازی شده با رکوردهای Eloquent حفظ می‌کند. کتابخانه Scout لاراول به مدیریت دستکاری اندیس‌ها در زمان بروز تغییراتی در داده‌های مدل می‌پردازد. جایی که داده‌های اندیس می‌شوند به درایوری وابسته است که برای کتابخانه Scout پیکربندی‌شده است. در حال حاضر کتابخانه Scout از Algolia پشتیبانی می‌کند که یک API موتور جستجوی مبتنی بر کلود است و ما نیز در این مقاله از آن برای نمایش پیاده‌سا..

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

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