FER: Facial Expression Recognition

الگوریتمSURF(Speed Up Robust Feature)

استفاده از ویژگی های SIFT زمانبر بوده و پیچیدگی  محاسباتی بالایی را در بر داشت از این رو محققان روش دیگری به اسم SURF (Speed Up Robust Feature) ارائه نمودند. در این روش به جای استفاده از DOG یا تفاضل گوسی از باکسی استفاده می شود که با تصویر کاتوایلو می شود و برای محاسبه ی حاصل کانولوشن از تصویر انتگرالی که یک بار در ابتدا محاسبه شده است استفاده می شود. نکته حائز اهمیت در این روش امکان محاسبه حاصل کانولوشن باکس ها با ابعاد مختلف به صورت موازی می باشد.

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

به طور مثال در تصویر زیر سمت چپ تصویر ورودی و در سمت راست 10 نقطه توسط SURF به دست آمده مشخص شده است.




I = imread('cameraman.tif');
points = detectSURFFeatures(I);
%Display locations of interest in image.

imshow(I); hold on;
plot(points.selectStrongest(10));

ماشین بردار پشتیبان(SVM)

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

برای استفاده از SVM به صورت چند کلاسه از تعدادی SVM دو کلاس استفاده می شود. به طور مثال در تابع fitcecoc به ازای k کلاس خروجی، از k(k-1)/2  ماشین بردار پشتیبان استفاده می شود. استفاده از این تابع کار با SVM را در حالت چند کلاسه آسان می نماید. در ادامه مثالی از استفاده از SVM در حالت چند کلاسه بیان می شود.

 load fisheriris

X = meas

Y = species

 Mdl = fitcecoc(X,Y)

 

Mdl =

  ClassificationECOC

             ResponseName: 'Y'

    CategoricalPredictors: []

               ClassNames: {'setosa'  'versicolor'  'virginica'}

           ScoreTransform: 'none'

           BinaryLearners: {3×1 cell}

               CodingName: 'onevsone'

  Properties, Methods


چنانچه ملاحضه می شود در این قطعه کد دیتاست گل زنبق از دیتاست های موجود در متلب فراخوانی شده و مقادیر ورودی ها و خروجی های مطلوب به مدل داده شده تا مد مناسب ایجاد شود در ادامه حاصل اجرای کد ملاحضه می شود که یک مدل تحت عنوان MDL ساخته شده که دارای 3 کلاس خروجی دارد و برچسب کلاس های خروجی مشخص است. برای استفاده از مدل ساخته شده به راحتی می توان از دستور predict استفاده کرد.

>> output=predict(Mdl,X(90,:))

output =

  cell

    'versicolor'


شبکه عصبی مصنوعی (ANN)

شبکه های عصبی مصنوعی ( ANN) ابزار بسیار قوی در زمینه ی هوش مصنوعی است که در طبقه بندی، درون یابی (پیش بینی) کاربرد فراوانی دارد.

بنا بر کاربردهای مختلف، انواع مختلفی از شبکه های عصبی معرفی شده است که شبکه عصبی پرسپترون چند لایه (mlp) شبکه بسیار قوی از دسته شبکه های عصبی پیش خور (feed forward) است که سال هاست در زمینه طبقه بندی مورد استفاده قرار می گیرد. این شبکه عصبی معمولا با استفاده از یک لایه یا دو لایه از نرون های مخفی با توابع فعالیت غیر خطی، قادر به طبقه بندی مسائل غیر خطی با دقت بالایی است. تعداد نرون ها در لایه های مخفی بسته به پیچیدگی مسئله و ورودی های شبکه های عصبی دارد و معمولا از یک یا دو لایه مخفی استفاده می شود و استفاده از لایه های بیشتر در مبحث یادگیری عمیق و معماری های مرتب جای می گیرند.

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

>> [input,target] = simplefit_dataset;

>> net=newff(input,target,10,{'tansig','purelin'},'trainlm');

>> net=train(net,input,target);

پس از اجرای دستورات بالا پنجره آموزش شبکه عصبی باز شده و مولفه های آموزش چنانچه در شکل زیر مشخص است مشاهده می شود که برای مثال بالا شبکه به دقت 4.34e-4 یا حدود چهار ده هزارم در مقیاس mse یا میانگین مربعات خطا دست یافته است.



پس از آموزش شبکه عصبی برای استفاده می توان شبکه و ورودی را به تابع sim ارائه کرد و خروجی شبکه عصبی را به دست آورد. چنانچه مشاهده می شود به طور مثال برای 14 نمونه شبکه دقیقا مقدار هدف ایده آل را بدست می آورد.

((output=sim(net,input(14

=output 

    9.1432

( target(14

=ans 

    9.1432

1 2 >>