اطلاعیه

Collapse
No announcement yet.

شناسایی چهره در یک تصویر

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    #46
    پاسخ : شناسایی چهره در یک تصویر

    سلام ..................

    خب حالا فرض کنیم یک weak classifier بر حسب تقارن چهره و چند feature دیگه درست کردیم .حالا در مرحله classify کردن در
    adaboost اگر خروجی weak classifier بروی postive sample ها صحیح بود به اون وزن بیشتری داده میشه در غیر این صورت وزن کمتری و
    در مورد negative sample ها بر عکس(البته اگه درست متوجه شده باشم)
    با احتساب یک مقدار مطالب جانبی تر بــلــه .. شما علاوه بر اینکه باید به سمپل های Positive نگاه کنید؛ باید به True Negative هم نگاه کنید و این دو رو با Ground Truth داده هاتون مقایسه کنید و بعد هم که وزن دادن ..

    بعضی مواقع یه تصویر میتونه جای چندین صفحه مطلب به آدم دید بده .. من خودم به تصویر زیر خیلی اعتقاده دارم .. کل متد AdaBoost رو توی یه تصویر؛ آقای Freund آورده .. گفتم اون رو براتون بذارم شاید برای شما هم مفید بود ..



    مثلا در هنگام detect یک فرم از ویدئو باید تک تک sub windows ها در adaboost چک بشه و adaboost ناحیه ی صورت رو پیدا کنه؟(منظورم همون sub windows که کمترین error rate رو داره)
    من یه توضیح در مورد Feature ها بدم امــا دیدم تصویر زیر گویا تره .. یه نگاه به تصویر زیر بکنید ....



    نمیدونم متوجه منظورم شدید یا نه؟ اولا اینجا بحث تقارن و ..... مطرح نیست .. میدونید اون ذهنیت تقارن از کجا با شما هست؟ از اینجا که ما چندین تا Branch کلی برای متدهای Face detection داریم .. یکی از این Branch ها Feature-Based Method هست .. حالا توی اینا چه اتفاقی میوفته؟ بیشتر تلاش میشه تا یه Feature هندسی یا قابل توجیه از طریق متدهای Geometric برای صورت تعریف بشه .. مثلا میان و روی فاصله ها و یا تقارن های نسبی شکل های خاص هندسی مثل بیضوی ها و دایره ها تمرکز میکنن .. این دسته از Feature ها جزو خانواده ی Dependence Graph based Feature ها قرار میگیرن و اگه بریم و متد Feature-Based Method ها رو بررسی کنیم؛ میبینیم که از توپولوژی های Graph Matching در اونها استفاده میشه و بعد از طریق MLP (برای مثال..) عملیات Classification رو انجام میدن ..

    امــا یه Branch دیگه، Appearance-Based Method ها هستن که کلا دیدگاهشون نسبت به توجیه تصویر فرق میکنه .. AdaBoost زیر مجموعه ای از این Branch هست و از این جهته که من میگم تقارن صورت و .... نمیتونه توی این متد تاثیر یا تعریفی داشته باشه .. اون Rectangle هایی که ما تعریف میکنیم؛ دقیقا میان که توصیفAppearance یه اسلاید Face رو ممکن کنن .. در مورد ادامه ی سوالتون هم جواب مثبته .. Classifier میگرده تا اون چیزهایی که براش Train شده پیدا کنه و روی اونها قضاوت ..

    یه نکته ی جالب : اینی که ما گفتیم که Rectangle ها روی Appearance متمرکز میشن به نظر خیلی مطمئن میاد؛ امــا شاید هم یه جا به مشکل بخوره! تصویر زیر رو ببینید ....



    به نظرتون چندتا Face؛ توی تصویر بالا وجود داره؟!!

    پـــاســــخ:
    http://xs539.xs.to/xs539/09203/false_ii438.png

    موفق باشید ..
    دوستان! مدتی کمتر به سایت میام ..

    دیدگاه


      #47
      پاسخ : شناسایی چهره در یک تصویر

      سلام...
      من در مورد machine learning و مخصوصا boosting تجربه ی چندانی ندارم و اگر گاهی چیزهایی میگم که به نظر منطقی نمیاد شما به بزرگی خودتون ببخشید؟!!.
      باز هم مطالبتون مبحث رو باز تر کرد.ممنون
      در مورد عکسی که لطف کردید در مورد rectangle feture ها گذاشتید بگم که من هم از همین feature ها استفاده کرد مثلا در مورد feature a :
      ََA1<A2 استفاده کرم (منظورم از تقارن در مورد geometry نبود منظورم در مورد Appearance بود ).

      خب threshold بهینه ای که adaboost پیدا میکنه باید در weak classifer ها استفاده بشه ؟ یعنی خروجی اون ها بر حسب threshold شون هست؟ و خروجی adaboost همین threshold
      های بهینه است؟

      دیدگاه


        #48
        پاسخ : شناسایی چهره در یک تصویر

        سلام ........................

        به اون تصویری که برای الکوریتم AdaBoost گذاشتم دوباره نگاه کنید .. خروجی ها چیا هستن؟ Hypothesis و Weight .. یعنی یه Classification Result با یه وزن متناظر شده بهشون .. بحث Threshold میدونید کجا مطرح میشه؟ جایی که داریم تابع h رو تعریف میکنیم .. تابع h چی داره؟ یه fh که همون Featureمونه .. یه Theta که همون Threshold مونه .. یه Pi که همون Parity مونه .. پــــس خروجی هر Weak Classifier یه Classification Hypothesis هست با یه Error Rate قابل محاسبه (معمولا کمتر از 0.5%..) یعنی یه Misclassification هم داریم در هر Iteration .. حالا خروجی خود AdaBoost چیه؟ Strong Classifier .. یعنی چی؟ از Vote هر Weak Classifier استفاده میکنه و به صورت یه ترکیب خطی این Vote هارو با وزن های مشخص باهم جمع میکنه تا بتونه یه Hyperplane مناسب برای Classification روی فضای دیتا پیدا کنه .. موفق باشید ..
        دوستان! مدتی کمتر به سایت میام ..

        دیدگاه


          #49
          پاسخ : شناسایی چهره در یک تصویر


          سلام...
          یک weak learner از یک feature و یک بیت توازن و یک threshold تشکیل میشه دیگه
          حالا مثلا در مورد feature a عکسی که گذاشتید ما باید برای feature ای که در

          weak learner استفاده میشه مثلا اگر A2>A1 بود ما باید value ی اون feature رو 1 قرار بدیم و در

          غیر این صورت یک یا مجموع pixel های A1 رو به عنوان یک value و A2 رو به عنوان یکی دیگه واسه weak مlearner به کار ببریم؟

          فکر کنم تقریبا همین مشکل رو فقط دارم که اگه حل بشه الگوریتمش رو مینویسم و اگه شکا چک کردین و مشکلی نداشت تو تاپیک میزارم

          دیدگاه


            #50
            پاسخ : شناسایی چهره در یک تصویر

            سلام ..................

            منظور از Parity اون توازنی که ما توی Logic و Digital Communication بحثش رو میکنیم نیستا! یه موقع با اون موضوع رو اشتباه نگیرید ..

            ببینید من توی اون میل تقریبا همه ی اینهارو توضیح دادم .. کاری که Viola & Jones کردن اومدن گفتن چی؟ اومدن گفتن Banding Box های Face رو میگیریم Box های 24*24 .. حالا روی اینا میان و اون Rectangle هارو تعریف میکنن .. میدونید روی هر Bounding Box میشه چندتا Feature تعریف کرد؟ یه جایگشت ترکیبیاتی میتونه جواب رو به ما بده .. 45396 .. خب حالا نظرتون چیه؟ حالا کار AdaBoost توی اون قسمتی که گفتیم Feature Selection انجام میده اینه که از بین این همه Feature تعدادی Feature خوب که تونستن Face هارو بهتر Fire کنن انتخاب کنه ..

            سوال شما: این Feature ها یه Value دارن؟ بله .. گفتیم که Summation سیاه ها منهای Summation سفید ها میشه Value ای که میتونه بره و بشینه توی Feature Vector .. حالا ارزش این Feature ها به چه ترتیبی مشخص میشه؟ اینکه در نتیجه ی Classification ما Misclassification های کمتری داشته باشیم .. تا یادم نرفته این رو هم بگم که اگه میخواید کد بنویسید؛ فایل زیر خیلی میتونه بهتون دید بده .. موفق باشید ..
            فایل های پیوست شده
            دوستان! مدتی کمتر به سایت میام ..

            دیدگاه


              #51
              پاسخ : شناسایی چهره در یک تصویر


              سلام.
              دو تا سوال برا پیش اومده...
              فرض کنیم ما 100 تا rectangle feature تعریف کردیم و همون طو که گفتید به vector تبدیل کردیم.خب ما در هر مرحله از adaboost یکی یکی

              feature ها رو روی sample ها بررسی میکنیم؟ و مثلا در یک تصویر 320 در 240 مثلا اگه 5000 تا sub windows داشته باشیم کل feature هامون

              میشه 5000*100؟ یا در هر sub windows ما مقدار زیادی feature باید تعریف کنیم؟ منظورم اینه که feature vector رمون برای هر sample با ابعاد 20*20 چند element داره ؟ به اندازه ی این 100 تایی که تعریف کردیم یا 100 تا برای هر pixel ؟
              اگه میشه در مورد این که feature vector و ابعاد اون و تعداد feature های کاربری مورد استفاده در adaboost کمی توضیح بفرمایید.

              دوم این که در الگوریتم adaboost اون T همون weak learner ( تعداد sample ها * feature ها ) است؟

              دیدگاه


                #52
                پاسخ : شناسایی چهره در یک تصویر

                سلام ..................

                شرمنده بابت تاخیر ..


                من مطالب رو یک بار از ابتدای بحثمون تا پست قبل، خوندم و دیدم برخی جاها سوالاتی پرسیده شده که به تناسب اونها روی مواردی بحث کردیم که ناخواسته جزو دسته بندی متد AdaBoost قرار گرفتن .. مثلا اون بحث Feature Vector ای که شما توی پست قبل مطرح کردید؛ اصلا مربوط به متد AdaBoost نمیشه؛ امــا چون من توی پست چندتا قبل! به عنوان یه مثال شهودی این مطلب رو عنوان کردم؛ این ذهنیت نادرست به وجود اومده .. برای همین دیدم اگه بخوایم بحث رو اینطوری ادامه بدیم؛ شاید به نتیجه ی مطلوب نرسیم در نتیجه سعی کردم تا بتونم یه زمانی رو خالی کنم و یه جمعبندی کلی از این متد رو براتون مطرح کنم تا بتونیم روی این Base با هم صحبت کنیم ..

                اول از همه باید در مورد خود ماهیت AdaBoost بدونیم .. سوال اول: AdaBoost ماهیتا چه موجودیه؟ یه Classifier .. طبیعتا نقشی که روی فضای دیتای ما داره اینه که فضای دیتامون رو بر حسب تعریف یه Hyperplane به دو بخش تقسیم میکنه .. یعنی چی دو بخش؟ یعنی اینکه میتونیم دیتاهامون رو صرفا با دو Label از هم مجزا کنیم .. چرا برای این Classification دو تا label تعریف میکنیم؟ برای اینکه AdaBoost (مدل معمولش..) یه Classifier باینریه؛ به این معنا که فضای دیتا رو با دو لیبل 1 و -1 ارزیابی میکنه ..

                نکته ای که توی هر فرآیند Classification وجود داره چیه؟ اینه که بتونیم بر حسب یه Rule خاص روی فضای داده هامون قضاوت انجام بدیم .. اون Rule ای که ما ازش صحبت میکنیم میتونه مثل متد SVM باشه؛ میتونه مثل ترکیب خطی فانکشن های هر Node در یه شبکه ی عصبی باشه و ..... حالا اتفاقی که اینجا میوفته چیه؟ اینه که بر حسب اطلاعاتی که هر Feature به ما میده؛ میتونیم یه قضاوت نسبت به فضای Data مون داشته باشیم .. سوال دوم: این Feature ها چی هستن؟ برای اینکه بتونیم به خود متد AdaBoost بپردازیم؛ از این سوال میگذرم تا نشون بدیم که AdaBoost مستقل از بحث Feature اش هست ..

                AdaBoost برای خودش چیا داره؟ تعداد زیادی Weak Classifier که هر کدوم برای خودشون یه Binary Classifier هستن .. یعنی چی؟ یعنی اینکه هر کدوم بر حسب یه Feature تعریفی؛ روی فضای Data مون قضاوت باینری انجام میدن .. اصلا تمام دارایی AdaBoost اینه که با یه سری Simple Weak Classifier میتونه نتیجه ای رو بگیره که به Classification خوب منجر میشه .. مطلبی که مسلمه اینه که این Classification ها با Error های متفاوتی همراهن و همین Error ها هستن که به عنوان به Evaluation Factor میتونن به استفاده ی AdaBoost از اونها کمک کنن .. پـــس؛ تا الان چی گفتیم؟ اینکه تعداد زیادی Weak Classifier داریم و بر حسب اونها؛ تعداد زیادی Classification Result .. این بحث رو همین جا نگه دارید تا یک Break بزنیم و دوباره برگردیم ..

                در بالا گفتیم که تعریف Feature به خود متد AdaBoost ارتباطی پیدا نمیکنه .. این حرف کاملا درسته؛ امــا چرا الان میخوایم بحث Feature رو باز کنیم؟ ببینید؛ مگه غیر از اینه که weak classifier های ما باید بر حسب یه مشخصه ای، فضای Data مون رو Classify کنن؟ مگه غیر از اینه که AdaBoost ادعا کرده که از مزیت هاش اینه که به آسودگی Learn میشه؟ خــب این دو تا سوال به تعریف Feature چه ارتباطی پیدا میکنه؟ عــــرض میکنم .. Weak Classifier های شما قراره بر حسب Feature که براشون تعریف میشه، به نوبه ی خودشون؛ فضای Data رو Classify کنن؛ یعنی نمونه های + رو از نمونه های - تمییز بدن اون هم با یه Error Rate مشخص ..

                AdaBoost از این Weak Classifier ها چه استفاده ای میکنه؟ اونهایی که Classification شون بهتر بوده رو بهشون Reward میده (وزن بیشتری بهشون میده..) و اونهایی که Classification شون بدتره؛ Punish میکنه (یعنی بهشون وزن کمتری میده..) .. پس اون چیزی که مسلمه اینه که ترکیبی از Weak Classifier ها هستن که Strong Classifier نهایی رو میسازن .. اگه به خود فرمول AdaBoost نگاه کنید؛ متوجه منظور من میشید .. اونجا بیان شده که H برابر است با یه سیگمایی از h (اینا همون Weak Classifier های ما هستن..) که یه ضریب آلفا یی هم با خودشون دارن که همون وزنیه که بهشون اطلاق شده ..

                سوال سوم: فرق Weak Classifier ها با Feature های ما چیه؟ یه بار کل داستان رو مرور کنید .. اگه Feature ها نباشن؛ Weak Classifier ها هم معنایی ندارن و Hypotheses ای هم در کار نخواهد بود .. پـــس میتونیم این سه اصطلاح رو در ادبیات Boosting به یک تعبیر قلمداد کنیم .. حالا مساله روشن تر شد؛ درسته؟ ما تعداد زیادی Weak Classifier داریم؛ چرا که تعداد زیادی Feature داریم .. بنا به همین استدلال هم تعداد زیادی Distribution داریم که برای مرحله ی Feature Selection به کمک ما میان .. در نتیجه اگه توی رابطه ی AdaBoost بعضا به جای Weak Classifier از Feature هم استفاده شده بود؛ نباید گمراه بشیم یا اینکه به مشکل بخوریم؛ چرا که این دوتا زاییده ی همدیگه هستن ..

                سوال چهارم: اون Distribution که در بالا تعریف کردیم؛ به چه دردی میخوره؟ برای جواب دادن به این سوال یه بحث دیگه رو هم باید توضیح بدیم و اون Feature Selection هست .. یادتونه گفتیم یکی از ویژگی های AdaBoost اینه که ادعا میکنه که عمل Feature Selection رو انجام میده؟ الان میخوایم ببینیم داستان این Feature Selection چیه؟ داشته هامون چیا هستن؟ تعداد زیادی Weak Classifier؛ به همون تعداد Feature و به تعداد این دوتا Classification Result .. به الگوریتم خود AdaBoost توی دو صفحه ی قبل نگاه کنید .. اون ابتدا یه Initialization انجام داده برای وزن ها روی Distribution اول .. وزنی که داده هم یه وزن معمولیه؛ 1 بر روی تعداد نمونه ها .. این Initial Weight یه وزن خنثی برای بالانس کردن فضای دیتامونه و اگه توی مثال Toy Example بهش نگاه کنید؛ میبینید که چگالی مقداری دیتاها تغییری نکرده ..

                Step اول توی این فرآیند چیه؟ اینه که یه Weak Classifier رو انتخاب کنیم /یا اینکه یه Feature رو بر حسب Classification ای که بر مبنای اون انجام شده انتخاب کنیم .. (این دو عبارت هم ارز همدیگه هستن و هیچ فرقی باهم ندارن..) حالا سوال اینه که توی ایــــن هــــمـــه Weak Classifier کدوم یکیشون رو باید انتخاب کنیم؟ سوال خیلی خوبیه امــا جواب ... یادتونه اون بالا گفتیم که هر Weak Classifier بر حسب Classification ای که انجام میده؛ برای خودش یه Error Rate میخره؟ اینجا وقتشه که ما از اون Error Rate ها استفاده کنیم .. یعنی چی؟ یعنی اینکه انتخاب اول؛ اون Weak Classifier ایه که از همه Error اش کمتره یا به عبارت بهتر؛ Misclassification اش از اونای دیگه کمتره .. حالا چی داریم؟ یه Weak Classifier که به عنوان Step اول توی اون سیگمای Feature Selection انتخاب شده .. مرحله ی بعدی چیه؟

                دوباره بر گردیم به مطالبی که گفتیم .. هر Weak Classifier فضای دیتا رو از زاویه ی خودش میدید و بر حسب Feature ای که به واسطه ی اون؛ هویت پیدا کرده بود، دیتاهامون رو دسته بندی میکرد؛ یعنی یه Hyperplane مینداخت روی دیتاها .. طبیعتا یه سری دیتا داریم که شامل Misclassification شدن؛ با اینها باید چیکار کرد؟ اگه مساله ی Toy Example رو ببینید متوجه ادامه ی داستان میشید .. ادامه ی ماجرا اینطوریه که به نمونه های غلط؛ وزن بیشتری داده میشه! حالا این ذهنیت جدیدی که برای فضای دیتا ایجاد شده؛ میشه Distribution جدید برای انتخاب یه Weak Classifier جدید .. شکل زیر رو ببینید تا مطالب رو دنبال کنیم ..



                الان h1 چیه؟ Weak Classifier اولی که گفتیم بر حسب اون Error Rate انتخاب شده .. حالا D2 چیه؟ فضای جدیدیه که بر حسب Classification مرحله ی قبل (h1..) تولید شده .. همونطور که میبینید؛ False Positive ها وزن بیشتری گرفتن .. حالا این Distribution به چه دردی میخوره؟ یه مشی جدید تعریف میکنه برای انتخاب Weak Classifier جدید .. الان اگه بخوایم یه Weak Classifier جدید تعریف کنیم باید D2 رو در نظر داشته باشیم و از روی اون تصمیم گیری کنیم .. این فرآیند تا زمانی ادامه داره که ما بتونیم ادعا کنیم Classification مون خاتمه پذیرفته .. تصاویر زیر فکر کنم الان جایگاه دیگه ای داشته باشه ...







                این از بحثFeature Selection .. حتما متوجه شدید که این روند selection به نوعی Train شدن خود Classifier هم هست .. وقتی به هر Weak Classifier یه وزن اختصا داده ممیشه؛ در واقع Feature اون هست که با وزن گرفتن بالا صاحب ارزش میشه یا بر عکس؛ با وزن گرفتن پایین؛ کشته میشه و از بین میره .. یه نکته ای که وجود داره اینه که ممکنه Feature ای که در یه مرحله انتخاب میشه؛ شاید از اون اول به هیچ عنوان اونقدر ارزش نداشته (یعنی به هیچ وجه نمیتونستیم برای Classification دیتاهامون بهش نگاه کنیم..) امــا با تغییر فضا و تعریف Distribution های پی در پی؛ هر Feature شانس برابری داره و اینجاست که میگن هر Feature به یک میزان حق صحبت کردن و نظر دادن داره .. نکته ی آخر در این بخش هم اینکه اگه ما از اون اول یه Weak Classifier خوب انتخاب نکنیم؛ صد در صد مطمئن باشید الگوریتم واگرا خواهد بود .. این تضمین؛ کجا لحاظ میشه؟ اونجاییکه ما میگیم Step اول باید Weak Classifier ای باشه که Error Rate اش از همه کمتره (زیر 0.5% ..) ..

                سوال پنجم: اون Rectangle ها کجای ماجرا هستن؟ اونها هم یک نوع Feature هستن که در کار Viola & Jones به عنوان تنها Feature های به کار رفته؛ ایفای نقش میکنن .. توضیحش رو در اون میل خیلی کامل گفتم فقط اینجا یه نکته رو بگم که شاید جواب سوال قبلیتون باشه .. ما از Feature ها چه انتظاری داریم؟ اینکه به عنوان یه معیار برای Classification به Weak Classifier ها هویت ببخشن .. حالا از Rectangle ها انتظار دیگه ای دارید؟ اینها هم دقیقا اومدن تا همین کار رو بکنن با این تفاوت که انواع متفاوت تری دارن .. نکته ای که شاید یک مقدار مبهم باشه اینه که ما با این Rectangle ها باید چیکار کنیم؟ ببینید شما یه Two-Rectangle رو در نظر بگیرید که بر حسب اندازه ی تعریف شده ای که داره (دست خودتونه .. میتونه 1*1 باشه و میتونه به اندازه ی کل Bonding Box تون باشه .. همین تنوع سایز هست که تعداد این Feature هارو زیاد میکنه .. OK؟) روی فضای دیتای شما تعریف میشه تا بر حسب اون متدی که داره؛ یه Classification داشته باشه از Face ها و Non-Face ها .. حالا یه Rectangle دیگه بردارید و در قالب یه Weak Classifier جدید، روی دیتاهاتون تستش کنید و یه Classification Result هم از اون به دست بیارید .. دوباره یه Rectangle دیگه و .... تا آخر .. دقیقا اتفاقی که بالا افتاد ..

                حالا AdaBoost کاری که میکنه اینه که میاد و از بین ایـــن هـــمـــه Weak Classifier ؛ مثلا 1000 تای بهترین رو انتخاب میکنه و با ترکیب خطی اونها با هم (بر حسب وزن * Weak Classifier ها..) اون نتیجه ی مطلوب رو که Strong Classifier هست؛ میسازه .. این کل داستانیه که برای AdaBoost میشه تصور کرد .. امیدوارم مطالب براتون مفید بوده باشه .. تصویر زیر هم یه فرآیند وزن دادن رو با فرمی واضحتر نشون داده .. موفق باشید ..



                دوستان! مدتی کمتر به سایت میام ..

                دیدگاه


                  #53
                  پاسخ : شناسایی چهره در یک تصویر


                  واقعا عالی بود.این بهترین مطلبی بود که تا به حال در رابطه با adaboost خونده بودم.واقعا ممنونم.دیگه فکر نکنم سوالی واسم

                  مونده باشه که جوابش رو نگرفته باشم.پس با توجه به این تعبیری که من از adaboost پیدا کردم:
                  1.adaboost الگوریتمی است که همزمان هم feature selection و هم training رو واسمون

                  انجام میده که این عالیه
                  2.خروجیش یک strong classifier است که از ترکیب شدن weak learner هایی که کمترین

                  error رو دارند تشکیل میشه که با این strong claasifier میشه در مورد sub windows هامون قضاوت کرد.که با این وظع سرعتش عالیست

                  3.یک classifier بانیری است.
                  4.هر weak learner میتونه بر روی یک feature که در بحث ما rectangle feature ها است بشینه

                  با این تفسیر پس مشکلش این است که خروجیش خیلی به data set و feature هامون وابسته است که البته نسبت به مزایای

                  دیگش هیچه!!

                  دیدگاه


                    #54
                    پاسخ : شناسایی چهره در یک تصویر

                    سلام ........................

                    1.adaboost الگوریتمی است که همزمان هم feature selection و هم training رو واسمون انجام میده که این عالیه
                    درسته ..

                    2.خروجیش یک strong classifier است که از ترکیب شدن weak learner هایی که کمترین error رو دارند تشکیل میشه که با این strong claasifier میشه در مورد sub windows هامون قضاوت کرد.که با این وظع سرعتش عالیست
                    درسته ..

                    3.یک classifier بانیری است.
                    با یه مقدار مطالب جانبی تر؛ درسته .. این نوعی که ما روش صحبت کردیم؛ نویع معمول AdaBoost هست .. سال 97 آقایون Schapire و Freund یه نوع دیگه هم از این Classifier رو ساختن و اسمش رو گذاشتن Multi Class AdaBoost .. اونجا هم بحث با همین بیس ایده میره جلو منتهی لیبل هامون به N تغییر پیدا کرده ..

                    4.هر weak learner میتونه بر روی یک feature که در بحث ما rectangle feature ها است بشینه با این تفسیر پس مشکلش این است که خروجیش خیلی به data set و feature هامون وابسته است که البته نسبت به مزایای دیگش هیچه!!
                    این وابستگی به اون معنایی که در سطح معمول ازش تعبیر میشه؛ نیست .. در واقع Dataset خیلی میتونه تعیین کننده باشه ولی به هر حال نوع Feature شاید فقط روند Training مون رو کندتر کنه .. مثلا یه Feature دیگه ای که با AdaBoost کوپل شده؛ Haar Like Wavelet هست .. اونجا هم بحث Training به تناسبی تغییر مسیر داده (از نظر سرعت..) .. موفق باشید ..
                    دوستان! مدتی کمتر به سایت میام ..

                    دیدگاه


                      #55
                      پاسخ : شناسایی چهره در یک تصویر

                      سلام...
                      یک مشکل...
                      در مورد تعیین error در weak learner طبق فرمول من اومدم مجموع وزن های مثبت T+ و -T مجمموع وزن های منفی رو طبق قطعه کد زیر محاسبه کردم:
                      For i = 1 To pos_count
                      Tp = Tp + w(i)
                      Next
                      For i = pos_count + 1 To img_count
                      Tn = Tn + w(i)
                      Next

                      و در ادامه : (fvalindex همون index مرتب شده بر حسب خروجی feature هاست)

                      e1 = 0
                      e2 = 1 - e1

                      min1 = e1
                      min2 = e2
                      min1Idx = 1

                      Sn = 0#
                      Sp = 0#
                      For i = 1 To img_count - 1

                      If (labels(i) = 1) Then
                      Sp = Sp + w(fvalindex(i))
                      Else
                      Sn = Sn + w(fvalindex(i))
                      End If

                      e1 = Sp + (Tn - Sn)
                      e2 = Sn + (Tp - Sp)

                      خب حالا فرض کنیم 6 تا postive sample و بقیه negative هستند خب در مرحله ی اول adaboost که همه یک وزن دارند همیشه در i=6 .

                      Sp=Tp میشه و Sn=0 پس error=0 میشه! (یعنی همیشه در i=6 , ا error=0 میشه). به نظر شما مشکل از کجاست؟
                      این هم کد کامل adaboost )که ا لبته با زبان vb نوشتم):




                      Public Function adaboost(sc As StrongClassifier2)
                      If initial_flag <> 1 Then
                      MsgBox "You MUST initial Adaboost frist!"
                      Exit Function
                      End If

                      Dim cs As StrongClassifier
                      Dim i, j, T As Integer
                      Dim beta As Double
                      Dim alfa() As Double
                      Dim fxIdx() As Double
                      T = feat_count - 10 'maximum number of weak classifiers in a strong one
                      ReDim alfa(T)
                      ' If (T > MAX_CLS_IN_STAGE) Then
                      ' AdaBoost = -1
                      ' Exit Function
                      ' End If
                      img_count = pos_count + neg_count

                      For i = 1 To pos_count
                      labels(i) = 1
                      Next
                      For i = pos_count + 1 To img_count - 1
                      labels(i) = -1
                      Next
                      For i = 1 To img_count - 1
                      If (labels(i) = 1) Then
                      w(i) = 0.5 * (1 / pos_count)
                      Else
                      w(i) = 0.5 * (1 / neg_count)
                      End If
                      Next


                      ' /// proceed to boosting round ti of T
                      For ti = 1 To T

                      Dim min_error As Double
                      Dim min_idx As Integer
                      min_error = 1
                      ' /// 1. normalize the weights
                      w_sum = sumW(w, img_count)

                      For i = 1 To img_count - 5
                      w(i) = w(i) / w_sum
                      Next
                      ' // end normalize
                      Dim cls() As WeakClassifier

                      ReDim cls(feat_count)
                      ' /// 2. For each feature train a classifier h_j which is restricted to using a single feature
                      ' /// The error is evaluated with respect to wt, ej = S_i w_i |h_j(x_i) - y_i|.

                      ' /// Calculate the features and sort by values
                      ' Dim x() As images ' // the images
                      ' ReDim x(img_count)
                      For j = 1 To (feat_count - 2)

                      If (used(j)) <> 1 Then
                      'continue;
                      'Exit For
                      'End If
                      Dim values() As Double
                      ReDim values(img_count)
                      Dim valindex() As Double
                      ReDim valindex(img_count)

                      For i = 1 To (img_count - 1)
                      values(i) = ApplyFeature(features(j), x(i))
                      valindex(i) = i
                      Next
                      fxIdx = bublesort(values, img_count - 1, valindex)

                      cls(j) = findWeakClassifier(features(j), fxIdx)

                      If (cls(j).Error < min_error) Then
                      min_error = cls(j).Error
                      min_idx = j

                      End If

                      End If
                      Next




                      beta = min_error / (1 - min_error)
                      alfa(ti) = Log(1 / beta)
                      cls(min_idx).alpha = alfa(ti)
                      ' /// 3. Choose the classifier, h_t, with the lowest eror e_t.
                      AddClassifier sc, cls(min_idx)
                      used(min_idx) = 1
                      '/// 4. Update the weights
                      For i = 1 To img_count - 1

                      w(i) = w(i) * (beta ^ (1 - Abs(ApplyClassifier(cls(min_idx), x(i)))))

                      Next
                      sc.theta = sc.theta + 0.5 * alfa(ti)
                      ' /// proceed to the next round

                      Next

                      End Function



                      Private Function findWeakClassifier(feature As feature2, fvalindex() As Double) As WeakClassifier

                      Dim e1 As Double
                      Dim e2 As Double
                      Dim min1 As Double
                      Dim min2 As Double
                      Dim min1Idx As Double
                      Dim min2Idx As Integer
                      Dim cls As WeakClassifier
                      Dim Tp As Double
                      Dim Tn As Double
                      Dim Sp As Double
                      Dim Sn As Double

                      For i = 1 To pos_count
                      Tp = Tp + w(i)
                      Next
                      For i = pos_count + 1 To img_count - 1
                      Tn = Tn + w(i)
                      Next

                      Sp = 0
                      Sn = 0
                      e1 = 0
                      e2 = 1 - e1

                      min1 = e1
                      min2 = e2
                      min1Idx = 1

                      Sn = 0#
                      Sp = 0#
                      For i = 1 To img_count - 1

                      If (labels(i) = 1) Then
                      Sp = Sp + w(fvalindex(i))
                      Else
                      Sn = Sn + w(fvalindex(i))
                      End If

                      e1 = Sp + (Tn - Sn)
                      e2 = Sn + (Tp - Sp)
                      If (e2 = 0#) Then
                      MsgBox "yes and yes"
                      End If

                      If (e1 < min1) Then

                      min1 = e1
                      min1Idx = i
                      End If

                      If (e2 < min2) Then
                      min2 = e2
                      min44 = min2
                      min2Idx = i
                      End If


                      If (min1 < min2) Then
                      cls.parity = 1
                      cls.theta = ApplyFeature(feature, x(fvalindex(min1Idx)))
                      cls.Error = min1
                      cls.feature = feature
                      Else
                      If min2Idx = 0 Then
                      hhh = 1
                      End If
                      cls.parity = -1
                      cls.theta = ApplyFeature(feature, x(fvalindex(min2Idx)))
                      cls.Error = min2
                      cls.feature = feature

                      End If
                      findWeakClassifier = cls

                      End Function



                      دیدگاه


                        #56
                        پاسخ : شناسایی چهره در یک تصویر

                        سلام ....................

                        یه نکته ای رو شما بهش اشاره کردید که یه مقدار صحبت داره .. تصویر زیر رو ببینید ....



                        وزن ابتدایی به تعدا نمونه های کل بستگی داره .. نکته ی دیگه اینکه من بیسیک اصلا کار نکردم .. اون نمونه کدی که توی پست #49 اگه اشتباه نکنم؛ براتون گذاشتم خیلی میتونه توی این موارد کمکتون کنه .. موفق باشید ..
                        دوستان! مدتی کمتر به سایت میام ..

                        دیدگاه


                          #57
                          پاسخ : شناسایی چهره در یک تصویر


                          سلام ....
                          ممنون .مشکلش رو فهمیدم از کجا بود.حل شد.(از matlab استفاده نمیکنم چون میخام از ابتدایی ترین الگوریتم های پردازش تصویر رو خودم بنویسم وگرنه متلب حتی الگوریتم adaboost رو تو toolbox سش داره ! ) فقط اگه اطلاعاتی در مورد multi class Adabost مثل joint boostدارید کمی راهنماییم کنید که چه تفاوتی با adaboost در الگوریتمش داره؟
                          و این که آیا کارایی binary Adaboost بیشتر است یا multi class ؟
                          مثلا تصور کنید که ما می خواهیم موز و پرتغال و خربزه رو classify کنیم بهتره که از multi class استفاده کنیم یا اینکه برای هر کدوم جداکانه از binary استفاده کنیم؟
                          ممنون واسه کمک هاتون که واقعا کمکم کرد تا کدش رو بنویسم و طرز کارش رو متوجه بشم.

                          دیدگاه


                            #58
                            پاسخ : شناسایی چهره در یک تصویر

                            سلام ....................

                            فقط اگه اطلاعاتی در مورد multi class Adabost مثل joint boostدارید کمی راهنماییم کنید که چه تفاوتی با adaboost در الگوریتمش داره؟ و این که آیا کارایی binary Adaboost بیشتر است یا multi class ؟
                            اون روزی که Freund و Schapire به این فکر افتادن که روی Multi-Class AdaBoost کار کنن؛ یه دلیل برای کارشون داشتن و اون اینکه بتونن تعمیمی داشته باشن از فضای Binary به فضای N Different Classes .. یعنی میخواستن بگن که میشه از این متد توی Classification های Multi Modal هم استفاده کرد .. یه Paper هم توی این زمینه ارائه شده که فکر کنم خیلی به این ذهنیت شما کمک کنه .. Text Categorization with Boosting .. این Paper رو بگیرید و بخونید .. متدش و نوع نگاهش خیلی جالبه .. یه فاکتور دیگه هم توش تعریف شده به نام LSA .. اون هم واقعا داستان داره .. امــا در مورد قالب متد Multi-Class AB باید بگم که هیچ فرقی با Binary AB نداره .. فقط همونطور که گفتم لیبل Y این بار به فضای تعمیم یافته ی N تغییر پیدا کرده .. یه مطلب دیگه ای هم که باید بگم اینه که Performance متد AdaBoost برای Multi-Class زیاد بالا نیست و نمیشه اونطوری کلی بهش نگاه کرد .. یه کاری که میتونه خیلی بهتون دید بده اینه که برید و homepage دوستمون Schapire رو ببینید؛ اونموقع متوجه خیلی مسائل میشید ..

                            مثلا تصور کنید که ما می خواهیم موز و پرتغال و خربزه رو classify کنیم بهتره که از multi class استفاده کنیم یا اینکه برای هر کدوم جداکانه از binary استفاده کنیم؟
                            این مطلب رو من فقط با یه Hint براتون توضیح میدم .. دنبال واژه ی MultiClass Object Recognition توی گوگل بگردید .. من میتونم بحثش رو باز کنم؛ امــا اگه بخوایم ازش نتیجه بگیریم باید خیلی وقت بذارم .. (اینجا دیگه واقعا نمیتونم زمان خالی کنم..) .. برای همین شما دنبال متدهاش برید و در آخر روی جمعبندیش باهم به توافق میرسیم .. احتمالا با دیتابیس های PACAL و CalTech هم برخورد خواهید کرد .. موفق باشید ..
                            دوستان! مدتی کمتر به سایت میام ..

                            دیدگاه


                              #59
                              پاسخ : شناسایی چهره در یک تصویر

                              نوشته اصلی توسط milad_1987

                              سلام ....
                              ممنون .مشکلش رو فهمیدم از کجا بود.حل شد.(از matlab استفاده نمیکنم چون میخام از ابتدایی ترین الگوریتم های پردازش تصویر رو خودم بنویسم وگرنه متلب حتی الگوریتم adaboost رو تو toolbox سش داره ! ) فقط اگه اطلاعاتی در مورد multi class Adabost مثل joint boostدارید کمی راهنماییم کنید که چه تفاوتی با adaboost در الگوریتمش داره؟
                              و این که آیا کارایی binary Adaboost بیشتر است یا multi class ؟
                              مثلا تصور کنید که ما می خواهیم موز و پرتغال و خربزه رو classify کنیم بهتره که از multi class استفاده کنیم یا اینکه برای هر کدوم جداکانه از binary استفاده کنیم؟
                              ممنون واسه کمک هاتون که واقعا کمکم کرد تا کدش رو بنویسم و طرز کارش رو متوجه بشم.
                              سلام ، منم یه همچین پروژه ای داریم. میخوام پردازش تصویر یاد بگیرم. تمام مطالب این موضوع ( این چهار صفحه ) را هم زیر و رو کردم. اما چیزی دستگیرم نشد!!! البته بیس کار را فهمیدم ولی نمی دونم چطوری کدش بنویسیم . میشه شما راهنمایی کنید و بگید چطوری کد اونو بنویسم؟ ( من بیسیک بلدم.)
                              پروژه من اینطور ی ابتدا چهره را تشخیص میده بعدش با استفاده ار feature ها چشمها و دهان و بینی را هم جدا میکنه)
                              ممنون میشم اگه کمک کنید.

                              دیدگاه


                                #60
                                پاسخ : شناسایی چهره در یک تصویر

                                سلام ......................

                                سلام ، منم یه همچین پروژه ای داریم. میخوام پردازش تصویر یاد بگیرم. تمام مطالب این موضوع ( این چهار صفحه ) را هم زیر و رو کردم. اما چیزی دستگیرم نشد!!! البته بیس کار را فهمیدم ولی نمی دونم چطوری کدش بنویسیم . میشه شما راهنمایی کنید و بگید چطوری کد اونو بنویسم؟ ( من بیسیک بلدم.)
                                پروژه من اینطور ی ابتدا چهره را تشخیص میده بعدش با استفاده ار feature ها چشمها و دهان و بینی را هم جدا میکنه)
                                ممنون میشم اگه کمک کنید.
                                نمیدونم شما دنبال چه موردی بودین که دستگیرتون بشه و نشده! یه مانوآل خیلی خوب هست از Viola & Jones .. اون تمام کاریه که باید بکنید .. امــا در مورد قسمت آخر سوالتون .. پروژه ی شما برخلاف اونچیزی که فکر میکنید؛ شامل دو بخش مجزا هست ..

                                -- اول اینکه بتونید Face رو از Non-Face تشخیص بدید ..
                                -- دوم اینکه بتونید Part Localization برای بخش های صورت قائل بشید ..

                                مورد اول زیر مجموع ی یه Branch هست که در Paper آقایون Viola & Jones استفاده شده .. اون Branch هم Appearance Based Algorithm هست .. امــا مورد دوم زیر مجموعه ی Branch دیگه ایه تحت عنون Feature based Algorithm .. اینا میان به Part Localization شما کمک میکنن .. همون تعریف Ellipse یا Circle یا Geometric Distance همه از بحث ها ایه که توی این شاخه مطرح میشه .. معمولا برای این کار میان و یه مدل Top- down میسازن و بعد با یه متد Graph Matching از تعریف Localization به Detection میرسن .. پس شما باید از دو View مختلف به پروژتون نگاه کنید .. موفق باشید ..
                                دوستان! مدتی کمتر به سایت میام ..

                                دیدگاه

                                لطفا صبر کنید...
                                X