آموزش فیلتر ذره 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. سپاس فروان از پکیج های خوبتون.

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

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

    ممنون

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

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

    1. سلام

      در تعریف فیلتر ذره شما باید پارامتری به نام 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 را که ورودی تابع هست تغییر بدهید.

پیام بگذارید

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

fifty six − forty six =