تشخیص احساسات با هوش مصنوعی

متنی که خدمتتان ارائه می‌شود، در واقع ترجمه‌ای است بر مقاله‌ای که در مدرسه‌ی تابستانه‌ی ولفرم در ارمنستان منتشر کردم. (در نوشته‌ی قبلی تجربه‌هایی جهت حل مشکلات خروج از کشور نوشته‌ بودم.) متن زبان اصلی این مقاله در کامیونیی ولفرم را در این لینک می‌توانید پیدا کنید.

The big image on the left side is the Input, and on the right side is the Output

عکس سمت چپ، ورودی برنامه، و عکس‌های سمت راست به همراه احساس نوشته شده در ذیل آن، خروجی برنامه می‌باشد.

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

The big image on the left side is the Input, and on the right side is the Output

جمع آوری داده

در این تحقیق ۴ پایگاه داده مختلف استفاده شده بودند:

  1. Cohn-Kanade AU-Coded Expression Database (+)
  2. Japanese Female Facial Expression (+)
  3. FaceTales (+)
  4. Yale face database (+)

هر پایگاه داده، احساسات مخصوص به خودش را مشخص کرده، در نتیجه نیاز بود تا احساسات مورد نیاز و مورد قبول فیلتر شوند که در نهایت ۷ احساس مختلف، به همراه حالت خنثی انتخاب شدند. سهم هر یک از این ۸ حالت را در ۴۲۱۱ داده‌ی ابتدایی پروژه مشاهده می‌نمایید:

  1. خوشحال (۸۴۴)
  2. ناراحت (۴۱۲)
  3. خشمگین (۶۵۹)
  4. منزجر (۵۹۲)
  5. ترسیده (۴۰۸)
  6. خجالتی(۸۱)
  7. شگفت زده (۷۷۵)
  8. خنثی (۴۴۰)

Samples

تعدادی از احساسات از پایگاه داده‌های مختلفی اقتباس شده‌اند.

شرایط دشوار

در دنیای واقعی هیچ تضمینی وجود ندارد که افراد دقیقا در مقابل دوربین، با زاویه درست و نور مناسب قرار بگیرند، (شرایطی که افراد پایگاه‌داده دارند) جهت بهبود عملکرد برنامه در شرایط غیر استاندارد نیاز داشتیم تا داده‌های ورودی را به این شرایط نزدیک‌تر کنیم. بدین منظور تمامی عکس ها را ۵، ۱۰ و ۱۵ در جفت جهت ساعت گرد و پات ساعت گرد گردش دادیم و ضمنا آن را از چپ به راست قرینه نیز کردیم. در نتیجه تعداد داده‌های در دسترس ۱۴ برابر بیشتر گردید.

پیش فرایند

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

The big image on the left side is the Input, and on the right side is the Output

شبکه‌ی عصبی

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

LeNet Neural Network

The big image on the left side is the Input, and on the right side is the Output

آموزش شبکه عصبی

داده ها را به سه قسمت تقسیم کردیم: داده‌های تست (۱۰۰۰ تصویر)، داده‌های اعتبارسنجی (۳۰۰۰ تصویر)، و داده‌های آموزش (۵۴۹۵۴ تصویر).

آموزش این داده ها به شبکه عصبی، تقریبا ۱۴ ساعت در ۱۰ راند، روی پردازشگر Intel Core i5 4210U روی ویندوز ۱۰ ورژن ۶۴ بیتی به طول انجامید. پس از آموزش، برنامه روی داده های تست، ۹۸.۵٪ دقت را نشان می‌داد

The big image on the left side is the Input, and on the right side is the Output

مشکلات و بهبود های بعدی

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

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

تجربه نشان داد که بهتر بود تا ابتدا داده ها را به سه بخش تست، اعتبار سنجی و تمرین تقسیم می‌کردیم، سپس عملیات های چرخش و قرینه‌کردن رابر روی آن انجام میدادیم. البته احتمالا نتایج نهایی تغییر واضحی نمی‌کرد اما دقت بدست آمده روی داده های تست می‌توانست قابل اعتماد تر باشد.

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

Iman Nazari And Mikayel Egibyan

 نتیجه گیری

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

در صورت تمایل به آزمایش، افراد می‌توانند با دانلود این فایل (لینک بک‌آپ) و قرار دادن آن در مسیر  $HomeDirectory و سپس اجرای دو بخش انتهایی کدها در این فایل، خود نتایج را مشاهده فرمایند. داشتن نرم افزار مثمتیکا جهت اجرای این فایل، ضروری می‌باشد. (از این لینک نرم افزار مثمتیکا را می‌توانید دانلود کنید)

ضمنا در ادامه‌ی مطلب می‌توانید نمونه کارهای بیشتری از این برنامه را مشاهده فرمایید.

Iman Nazari is testing his project

The big image on the left side is the Input, and on the right side is the Output

The big image on the left side is the Input, and on the right side is the Output

The big image on the left side is the Input, and on the right side is the Output

The big image on the left side is the Input, and on the right side is the Output

The big image on the left side is the Input, and on the right side is the Output

The big image on the left side is the Input, and on the right side is the Output

(With some special thanks to Brad Pitt, Natalie Portman, Marlon Brando, Edward Norton, Shrek and others for all special things they have done.)

امتیاز دهید

یدگاه‌های “تشخیص احساسات با هوش مصنوعی

  1. سلام ایمان جان
    خوبی
    علی کریمی‌ام. از دوستان متممی
    اونجا هم کامنت‌تاتو می‌خونم
    یک سوالی ازت داشتم
    تو این مقاله شما سعی می‌کنید از روی “ویدیو” به احساسات فرد می برید؟ اگر درست بگم
    سوالی که داشتم اینه:
    از روی فقط یک تصویر هم میشه؟
    و اصلاْ این اتفاق “تشخصیص احساسات از روی تصویر” کشف عجیبی یا نه؟
    یعنی این حوزه الان در چه وضعیت‌یه؟ اصلا در علوم کامپیوتر جایگاهی داره؟
    یا مسئله‌ای که حل شده است و کسی براش تره خورد نمی‌کنه. چیزی که خیلی وقته اتفاق افتاده و من کم سواد ازش خبر ندارم
    و یک سوال جنبی:
    اینکه آیا گوگل به توانایی جستجو براساس احساسات (از میان تصاویر یک فرد مشخص) رسیده؟
    من که حدس می‌زنم رسیده
    وقتی zarif sad را سرچ می‌کنی
    تقریبا مشهوده که هوش مصنوعی گوگل می‌تونه از بین عکس مردی همیشه خندان یک چند تا عکس غیرخندان هم پیدا کنه.
    اینارو ازت پرسیدم و مزاحمت شدم
    چون می خواستم یک نوشته تو وبلاگم یا متمم زیر مطلب مهارت جستجو بگذرام
    چون شماها سوادتان خیلی بیشتر از ما که کد را با کت اشتباه می گیریم است
    خواستم سوتی ندم
    و چیزی را ننویسم که قبلا به اصطلاح کشف شده و دربارش دهها مطلب است
    باز ممنون
    نوشته‌هاتو دوست دارم

    • سلام علی جان.
      تعارف الکی نمی‌کنم، منم حواسم به نوشته‌هات هست و دنبالشون می‌کنم.
      توی این پروژه سعی کردیم از روی یک تک عکس احساسات رو تشخیص بدیم، اما راه حل ما برای تشخیص احساسات از روی ویدئو این بود که اون رو به عکس‌های جداگانه تقسیم کنیم و هر کدوم رو جداگانه بررسی کنیم. پس عملا این تکنولوژی برای عکس بوده.
      به نظر من که یه تازه کار در این زمینه هستم، نمی‌شه گفت یک تکنولوژی تماما حل شده مگر زمانی که کامل‌ترین کدها و اسرار انجام اون‌ها اوپن-سورس بشه. که این اتفاق حداقل فعلا تو این زمینه رخ نداده. شرکت‌های مختلف به صورت محرمانه تونستند بسته به نیاز خودشون، تکنولوژی‌های خیلی قوی‌ای رو توسعه بدند. نمونه‌ی گوگل رو هم که خودت به بهترین شکل گفتی. البته حتما خودت هم میدونی که ویژگی سیستم‌های هوش مصنوعی، پیشرفت با استفاده‌ی بیشتر هستش. پس این دقت پایانی نداره و همواره در حال بهتر شدن هستن.
      ولی شاید به دلایلی شرکت‌ها بیشتر به سمت شناخت همه‌چیز، در عوض شناخت احساسات رفتند. و به شدت در این حوزه دارن با هم رقابت می‌کنند. شاید این نمونه ، گل سرسبد این قضیه باشه. البته در همین پروسه، پروژه تشخیص احساسات هم به عنوان یکی از قابلیت‌های این تکنولوژی رشد می‌کنه.
      در مورد سوال دومت هم باید بگم اگه به جای ظریف، Sad Obama رو سرچ کنی، نه تنها عکس‌های ناراحت اوباما رو نشون میده، حتی احساسات دیگه‌ای رو هم بهت پیشنهاد میده. البته دقت این جستجو با تعداد تصاویر شخص در اینترنت، رابطه‌ی مستقیمی داره. نمی‌دونم تشخیص احساسات با چه دقتی مد نظرت بوده، ولی این نتایج نشون میده که گوگل حواسش به این موضوع هست و میشه جستجوهای خیلی قوی‌تر رو هم ازش انتظار داشت.
      امیدوارم تونسته باشم سوالی که مد نظرت بود رو جواب بدم. من همیشه در خدمتت هستم.
      سربلند باشی 😉

  2. سلام ایمان عزیز . بهت تبریک میگم بابت این پست جامع و قبل از اون بخاطر سایتت 🙂
    من سالها پیش راجع به هوش مصنوعی و نورون ها بسیار درگیر بودم و پژوهش میکردم بخاطر همین خیلی از این نوشته لذت بردم .
    امیدوارم حال خوب ، دستاورد اصلیت از این مدرسه ی تابستانی بوده باشه .

    • سلام شهلا جان
      خیلی خوشحالم که به اینجا سر زدی.
      آره. واقعا حال خوب، دستاورد خیلی مهمی از اونجا بود. شاید یه دستاورد مهم دیگه، رویاهای جدید بود. پیدا کردن رویای جدید، واسه من، مثل پیدا کردن یه زندگی جدید میمونه 🙂
      راستی خوشحالم که سایتت رو پیدا کردم. در موردش همونجا کامنت میزارم 😉

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

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