آموزش فیلتر ذره particle filter

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

particle-filter-matlab

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

روش فیلتر ذره یک روش عددی است که اجازه می دهد یک راه حل تقریبی جهت تخمین پی در پی پیدا شود و برای مسائل غیرگوسین و غیرخطی می تواند بسیار موفق باشد. ایده اولیه فیلتر ذره در سال 1949 توسط آقای متروپلیس مطرح شد که بررسی جزییات مجموعه ای از ذره ها را به جای یک ذره را مورد مطالعه قرار داد[4]. اما در سال 1945 یکی از اولین ایده های اصلی تر و پایه و اساس فیلتر ذره با محاسبه و بکارگیری الگوریتم مونت کارلو توسط آقایان همرسلی و مورتون ارائه گردید. فیلتر ذره یک مبحث کاملا آماری می باشد و دلیل مطرح شدن آن این است که بتواند برای مسائلی به کار گرفته شود که تخمین آنها توسط فیلتر کالمن مشکل باشد.

[1] Deterministic method

[2] Scholastic method

[3] Model based tracking

[4] Metropolis, Nicholas, and Stanislaw Ulam. “The monte carlo method.” Journal of the American statistical association 44.247 (1949): 335-341.

لینک دانلود فیلم آموزشی کامل فیلتر ذره

در چند قسمت اول این فیلم آموزشی تئوری فیلتر ذره توضیح داده می شود. اسلایدهای استفاده شده در این آموزش از سیمنار پیاده سازی الگوریتم های مختلف توسط شرکت mathworks در ژاپن استخراج شده اند.

قسمت های پایانی اختصاص به برنامه نویسی متلب فیلتر ذره دارد و چندین مثال از ردیابی شی در ویدئو آورده می شود.

سرفصل مطالب :

حلقه بزرگ در پیاده سازی الگوریتم

فیلتر ذره چیست ؟

چگونه یک شی را در ویدئو ردیابی کنم ؟

چگونه کد فیلتر ذره particle filter را در متلب پیاده سازی کنیم ؟

چرا از معادلات دیفرانسیل برای پیش بینی مکان بعدی شی استفاده نکنیم و از فیلتر ذره استفاده می کنیم ؟

مدل فضای حالت فیلتر ذره

مدل سیستم system

مدل مشاهده observation

هدف از فیلتر ذره چیست؟

تعداد ذرات فیلتر کم یا زیاد خوب است ؟

الگوریتم فیلتر ذره

پیش بینی prediction

فیلتر filtering

میعار انتخاب ذرات چیست؟

شباهت فیلتر ذره و الگوریتم بهینه سازی تجمعی ذرات PSO

معرفی سمبل های مورد استفاده در تئوری فیلتر ذره

میعار likelihood

نحوه تغییر شش ذره در فیلتر ذره به صورت نموداری

رابطه محاسبه موقعیت و سرعت جدید ذرات

فرق بین متغییر state و متغییر observable

برنامه نویسی متلب فیلتر ذره

توضیح خط به خط کد

معرفی پارامترهای خروجی دستور خواندن ویدئو

فرمول update ذرات

تاثیر فاصله دوربین

تاثیر محو شدن هدف در تصویر

تاثیر تعداد ذرات در نتیجه فیلتر ذره

تاثیر انحراف معیار موقعیت و سرعت


پیش نمایش 1 :

لینک دانلود پیش نمایش 1 (کیفیت اصلی)

لینک مشاهده در آپارات

لینک تخته سفید

لینک یوتیوب youtube


پیش نمایش 2 :

لینک دانلود پیش نمایش 2 (کیفیت اصلی)

لینک مشاهده در آپارات

لینک تخته سفید

لینک یوتیوب youtube

5 دیدگاه دربارهٔ «آموزش فیلتر ذره particle filter»

  1. در این فیلم آموزشی متاسفانه مفهوم دقیق معیار likelihood گفته نشده اگر امکانش هست می شه معیار likelihood رو توضیح بدید که دقیقا چی هست؟

  2. blank

    سپاس فروان از پکیج های خوبتون.

    من باید یک جسم متحرک رو در ویدِیو با فیلتر ذره ردیابی کنم. فیلم فیلتر ذره و تشخیص جسم رو دیدم. سوالی .که دارم اینه که چطوری یک جسم رو در ویدیو تشخیص بدم بعد به ورودی فیلتر ذره اعمال کنم.

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

    ممنون

    1. blank

      سلام
      اگر به نمونه کدها توجه بفرمایید شما باید ویژگی در جسم را مشخص کنید. مثلا اگر جسم قرمز رنگ است باید مقدار
      [255 0 0]
      را به عنوان مقدار هدف تعیین کنید
      خلاصه اینکه ببینید چه ویژگی متمایزی جسم دارد می تواند رنگ باشد
      می تواند مساحت بیشتر
      در برخی اوقات لازم است تصویر را مورد پردازش قرار دهید تا جسم متمایز تر شود و سپس از فیلتر ذره استفاده کنید

  3. blank

    با سلام
    من باید یک جسم رو در فریم ویدئو تشخیص بدم بعد با فیلتر ذره ردیابی کنم. طبق ویدئو های تشخیص اجسام در این سایت تونستم جسم رو در فریم اول منطبق کنم. سوال من هم در مورد قسمت likelihood هست که چطوری تعریف شه و اینکه تشخیص جسم رو قبل از اعمال فیلتر انجام بدم یا اینکه در قسمت فیلتر.
    ممنون میشم راهنمایی کنین یا اینکه فیلمی در این رابطه در سایت قرار دهید.

    1. blank

      سلام

      در تعریف فیلتر ذره شما باید پارامتری به نام MeasurementLikelihoodFcn را تعریف کنید که اشاره به یک تابع دارد. مثلا
      pf.MeasurementLikelihoodFcn = @exampleHelperCarBotMeasurementLikelihood;

      خوب این تابع exampleHelperCarBotMeasurementLikelihood تعریف likelihood می باشد. اگر داخل این تابع را مشاهده کنید :

      function likelihood = exampleHelperCarBotMeasurementLikelihood(pf, predictParticles, measurement)
      % The measurement contains all state variables
      predictMeasurement = predictParticles;
      % Calculate observed error between predicted and actual measurement
      % NOTE in this example, we don’t have full state observation, but only
      % the measurement of current pose, therefore the measurementErrorNorm
      % is only based on the pose error.
      measurementError = bsxfun(@minus, predictMeasurement(:,1:3), measurement);
      در این خط خطای بین مقدار اندازه گیری و مقدار واقعی را حساب کرده
      measurementErrorNorm = sqrt(sum(measurementError.^2, 2));
      سپس مجموع گرفته و به توان 2 رسونده و جذر گرفته که میشه نرم خطا
      % Normal-distributed noise of measurement
      % Assuming measurements on all three pose components have the same error distribution
      measurementNoise = eye(3);
      سپس یک ماتریس 3 در 3 ساخته که همه عناصر قطر اصلی 1 است .
      % Convert error norms into likelihood measure.
      % Evaluate the PDF of the multivariate normal distribution
      likelihood = 1/sqrt((2*pi).^3 * det(measurementNoise)) * exp(-0.5 * measurementErrorNorm);
      این رابطه محاسبه likelihood می باشد . که نرم خطا و ماتریس واحد 3 در 3 را در آن گذاشته و مقدارش محاسبه کرده .
      end

      شما اگر دنبال هر معیاری برای فیلتر ذره هستید باید پارامتر measurement را که ورودی تابع هست تغییر بدهید.

دیدگاه‌ خود را بنویسید

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