متنی که خدمتتان ارائه میشود، در واقع ترجمهای است بر مقالهای که در مدرسهی تابستانهی ولفرم در ارمنستان منتشر کردم. (در نوشتهی قبلی تجربههایی جهت حل مشکلات خروج از کشور نوشته بودم.) متن زبان اصلی این مقاله در کامیونیی ولفرم را در این لینک میتوانید پیدا کنید.
عکس سمت چپ، ورودی برنامه، و عکسهای سمت راست به همراه احساس نوشته شده در ذیل آن، خروجی برنامه میباشد.
هدف پروژهی بنده در مدرسهی تابستانهی ولفرم، تشخیص احساسات از روی تصویر چهرهی افراد، میباشد. روش متداول و قدیمی انجام اینکار، تحلیل حرکت تمامی ماهیچههای صورت و سپس انجام چند محاسبات و قوانین ساده است. اما در این پروژه قصد داریم هوش مصنوعی و شبکههای عصبی را جایگزین روش سنتی کنیم. شبکهی عصبی استفاده شده در این پروژه، شبکهی لِنِت معروف میباشد که برای اولین بار جهت تفهیم اعداد نوشته شده با دست به کامپیوتر استفاده شد. در این مقاله، بنده روشی برای تشخیص احساسات افراد از روی صورت به روشی کاملا خودکار ارائه میکنم. با این که تنها چهار پایگاه داده در این تحقیق استفاده شده، اما با انجام فرایندهایی سعی شده تا میزان دادههای آموزش افزایش یابد.
جمع آوری داده
در این تحقیق ۴ پایگاه داده مختلف استفاده شده بودند:
- Cohn-Kanade AU-Coded Expression Database (+)
- Japanese Female Facial Expression (+)
- FaceTales (+)
- Yale face database (+)
هر پایگاه داده، احساسات مخصوص به خودش را مشخص کرده، در نتیجه نیاز بود تا احساسات مورد نیاز و مورد قبول فیلتر شوند که در نهایت ۷ احساس مختلف، به همراه حالت خنثی انتخاب شدند. سهم هر یک از این ۸ حالت را در ۴۲۱۱ دادهی ابتدایی پروژه مشاهده مینمایید:
- خوشحال (۸۴۴)
- ناراحت (۴۱۲)
- خشمگین (۶۵۹)
- منزجر (۵۹۲)
- ترسیده (۴۰۸)
- خجالتی(۸۱)
- شگفت زده (۷۷۵)
- خنثی (۴۴۰)
تعدادی از احساسات از پایگاه دادههای مختلفی اقتباس شدهاند.
شرایط دشوار
در دنیای واقعی هیچ تضمینی وجود ندارد که افراد دقیقا در مقابل دوربین، با زاویه درست و نور مناسب قرار بگیرند، (شرایطی که افراد پایگاهداده دارند) جهت بهبود عملکرد برنامه در شرایط غیر استاندارد نیاز داشتیم تا دادههای ورودی را به این شرایط نزدیکتر کنیم. بدین منظور تمامی عکس ها را ۵، ۱۰ و ۱۵ در جفت جهت ساعت گرد و پات ساعت گرد گردش دادیم و ضمنا آن را از چپ به راست قرینه نیز کردیم. در نتیجه تعداد دادههای در دسترس ۱۴ برابر بیشتر گردید.
پیش فرایند
قبل از آنکه ورودی به شبکهی عصبی تحویل شود، نیاز است که عملیات مشخصی بر روی آنها انجام شود تا تمامی عکسها از استاندارد مشخص برخوردار باشند. ابتدا تر عکس ها باید صورت افراد تشخیص داده شود. سپس حاشیه اطراف صورت بریده شده، و تصویر باقیمانده به تصویری سیاه و سفید با اندازهی ۱۲۸ در ۱۲۸ تبدیل گردد.
شبکهی عصبی
همانطور که گفته شد ما از شبکه عصبی لنت در این پروژه استفاده کردهایم. این شبکه اولین بار جهت تشخیص اعداد دست نوشته ه کار برده شد. قاعدتا لایههای انکودر و دیکودر این شبکه بسته به نیاز پروژه تغییر کرد. در نتیجه شبکهی نهایی به این شکل میباشد:
آموزش شبکه عصبی
داده ها را به سه قسمت تقسیم کردیم: دادههای تست (۱۰۰۰ تصویر)، دادههای اعتبارسنجی (۳۰۰۰ تصویر)، و دادههای آموزش (۵۴۹۵۴ تصویر).
آموزش این داده ها به شبکه عصبی، تقریبا ۱۴ ساعت در ۱۰ راند، روی پردازشگر Intel Core i5 4210U روی ویندوز ۱۰ ورژن ۶۴ بیتی به طول انجامید. پس از آموزش، برنامه روی داده های تست، ۹۸.۵٪ دقت را نشان میداد
مشکلات و بهبود های بعدی
جهت تشخیص صورت افراد، در مرحلهی پیش فراید، از دستور داخلی زبان ولفرم به نام FindFaces[] استفاده شده است. این دستور هنوز در مرحلهی تکامل قرار دارد و دقت بالایی ندارد. ممکن است قسمت بیمعنیای را به عنوان چهره انتخاب کند یا چهرهای که بیش از ۲۵ درجه انحراف داشته باشد را تشخیص ندهد. برای حل مشکل اول، رابط کاربریای تعبیه شده تا در صورت عدم رضایت از چهرههای پیدا شده، کاربر بتواند با کلیک بر روی تصویر مورد نظر آن را حذف نماید. اما حل مشکل دوم نیازمند تلاش های بسیار بیشتری خواهد بود.
این برنامه را میتوان در حالت پویا بر روی وبکم هم اجرا نمود. در این شرایط، پروسه های قبل بر روی تک تک فریم ها جداگانه انجام میشود. در حالت دینامیک میتوان تدبیری اندیشید تا احتمال وجود هر احساس برای لحظاتی ذخیره گردد و با فریم های بعدی و قبلی مقایسه گردد سپس احساسی به عنوان نمایندهی چند تصویر متوالی انتخاب گردد، در این صورت صحت خروجی برنامه افزایش مییابد.
تجربه نشان داد که بهتر بود تا ابتدا داده ها را به سه بخش تست، اعتبار سنجی و تمرین تقسیم میکردیم، سپس عملیات های چرخش و قرینهکردن رابر روی آن انجام میدادیم. البته احتمالا نتایج نهایی تغییر واضحی نمیکرد اما دقت بدست آمده روی داده های تست میتوانست قابل اعتماد تر باشد.
در تمامی پایگاههای داده، افراد ه صورت مستقیم در مقابل دوربین قرار گرفته بودند و احساسات را با اغراق به نمایش گذاشته بودند که این اتفاق کمتر در دنیای واقعی روی میدهد. داشتن پایگاه داده های مختلف و متنوع تر میتواند به تشخیص دقیق تر در شرایط عملی کمک کند.
نتیجه گیری
در نهایت میتوان اعلام داشت که استفاده از هوش مصنوعی در تشخیص احساسات موفقیت آمیز بوده. نتایج ما هنوز در مرحلهی نمونههای اولیه و نشان دادن چراغ راهی برای دیگران میباشد. برنامه جهت کارکردن در حالت استاندارد (تصویر پایدار، نور کافی، زاویه درست و احساسات واضح) طراحی شده. برای بهبود این عملکرد، داده های بیشتر و شبکهی عصبی پیچیده تری نیاز میباشد تا بتوان آن را در شرایط عملی به کار برد.
در صورت تمایل به آزمایش، افراد میتوانند با دانلود این فایل (لینک بکآپ) و قرار دادن آن در مسیر $HomeDirectory و سپس اجرای دو بخش انتهایی کدها در این فایل، خود نتایج را مشاهده فرمایند. داشتن نرم افزار مثمتیکا جهت اجرای این فایل، ضروری میباشد. (از این لینک نرم افزار مثمتیکا را میتوانید دانلود کنید)
ضمنا در ادامهی مطلب میتوانید نمونه کارهای بیشتری از این برنامه را مشاهده فرمایید.