پردازش اشیاء بصری با مدل‌های مولد

مقدمه

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

ادامه خواندن پردازش اشیاء بصری با مدل‌های مولد

مقدمه ای بر شبکه‌های مولد تخاصمی (Generative Adversarial Networks)

یادگیری بدون نظارت (Unsupervised Learning)
همان‌طور که پیش‌تر بحث شده بود، یکی از حوزه های یادگیری ماشین، یادگیری بدون نظارت است که در آن داده‌ها برچسب ندارند. در یادگیری بدون نظارت هدف اصلی، یادگیری ساختار داده‌ها می‌باشد.

 

ادامه خواندن مقدمه ای بر شبکه‌های مولد تخاصمی (Generative Adversarial Networks)

مقدمه ای بر یادگیری ماشین (Machine Learning)

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

برخی از روش های یادگیری ماشین

الگوریتم های یادگیری ماشین اغلب به عنوان نظارت شده یا نظارت نشده و تقویتی دسته بندی می شوند.

1.یادگیری نظارت شده یا Supervised Learning :

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

 

2.یادگیری بدون نظارت یا Unsupervised Learning :

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

 

 

3.یادگیری تقویتی یا Reinforcement Learning :

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

استفاده از وبکم در OpenCV

 نحوه فعال سازی و استفاده از وبکم در  opencv

به وسیله تابع ()VideoCapture وبکم را راه اندازی می کنیم که خروجی آن یک شی (object)  می باشد که در اینجا آن را در متغیر cap قرار داده ایم.

این شئ یک متد به نام ()read دارد که با فراخوانی آن وبکم فعال می شود و شروع به دریافت فریم ها از وبکم می‌کند.

خروجی تابع ()read نوع داده ای tuple در پایتون است که در اینجا آن را در متغیرهای frame و ret ذخیره کرده ایم.

frame همان تصاویر دریافتی از وبکم است و چیزی که در ret ذخیره شده یک boolean است که نشان می دهد که آیا عملیات موفق آمیز بوده یا نه.

به وسیله تابع ()cap.release هم می توان وبکم را آزاد کرده و در نتیجه وبکم خاموش می‌شود.

به کد زیر دقت کنید:

قاعدتا میتوان روی تصاویری که از وبکم دریافت میکنیم قبل از نمایش تغییراتی ایجاد کنیم. به دو مثال زیر دقت کنید.

مثال 1) نمایش در وبکم به صورت آینه ای یا برعکس (flip)

یادآوری:

تصویر اصلی

چرخش عمودی یا Vertical Flip

چرخش افقی یا Horizontal Flip

برای flip کردن تصاویر دریافتی از وبکم از تابع ()cv2.flip استفاده می کنیم که آرگومان اول تصاویر دریافتی است و آرگومان دوم نوع flip را مشخص می کند به این صورت که:

  • اگر صفر باشد: به صورت عمودی تصاویر را flip می کند.
  • اگر مثبت باشد:به صورت افقی تصاویر را flip می کند.
  • اگر منفی باشد:به صورت هم عمودی و هم افقی تصاویر را flip می کند.

 

مثال 2) نمایش تک کاناله با وبکم

در این کد ابتدا به اندازه طول و عرض فریم یک ماتریس با مقادیر صفر می سازیم سپس هر کانال رنگی که از وبکم دریافت می شود را جدا می کنیم و در نهایت هر کانال را به صورت جداگانه نمایش می دهیم؛ به این صورت که با تابع ()cv2.merge فقط همان کانال رنگی و به جای دو کانال دیگر همان ماتریس صفری که ساخته بودیم را به عنوان ورودی می دهیم.