💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
📋📋📋本文目录如下:🎁🎁🎁
目录
💥1 概述
摘要:
自主系统,如无人机(UAVs),需要能够识别和跟踪人群,例如用于救援和监视。大型群体会产生多个具有不确定起源的测量值。此外,传感器噪声特性通常是未知的,但测量值限制在某些区间内。在这项工作中,我们提出了两种解决人群跟踪问题的方法——一种是使用盒子粒子滤波方法,另一种是使用卷积粒子滤波方法。开发的滤波器可以以优雅的方式处理测量起源的不确定性,即解决数据关联问题。对于盒子粒子滤波器(PF),我们推导了在存在杂波的情况下的广义似然函数的理论表达式。还开发了一种自适应卷积粒子滤波器(CPF),并将两种滤波器的性能与标准的顺序重要性重采样(SIR)PF进行了比较。通过一个真实场景(代表体育场中人群运动)对两种滤波器的优缺点进行了说明,用于大量行人的大型群体。实现了准确的估计结果。
引言
跟踪大量对象需要可扩展的算法,能够处理大量数据,其特点是存在杂乱。尽管群体由许多个体组成,但它们通常保持某些运动模式,例如行人群(Ali & Dailey, 2009)的情况。当群体中的对象数量巨大时,例如数百或数千个,跟踪它们每一个是不切实际的(也是不可能的)。与其跟踪每个单独的组件,不如将群体视为一个整体实体。大群体技术识别和跟踪浓度,通常是群体的运动状态和其范围参数(Koch, 2008)。
最近的研究结果涉及群体的建模、模拟和视觉分析,以计算机视觉、交通系统和监视的角度来自Ali、Nishino、Manocha和Shah(2014)。社会力模型(Ali等人,2014年;Helbing和Molnár,1995年;Mazzon和Cavallaro,2013年)已被用来模拟行人的行为,包括通过瓶颈疏散人群。社会力模型还与一些过滤技术结合,用于Pellegrini、Ess、Schindler和Van Gool(2009)中的多目标跟踪。
有大量方法被开发用于跟踪大规模人群的运动状态(例如人群的中心)和它们的大小(范围参数)。最近的一项调查(Mihaylova等人,2014)介绍了该领域的关键趋势。尽管文献中关于跟踪大群体的问题已受到关注,但由于存在的各种挑战,这个问题远未得到解决。其中一些挑战涉及模拟人群实体之间的相互作用、数据关联和人群的动态形状变化。一些提出的方法包括高斯分量混合(Carmi、Septier和Godsill,2012年)和丰富的随机有限集(RFS)方法,例如Grandström(2012)、Granström、Lundquist和Orguner(2011)、Mahler(2007)、Mahler(2009)、Mahler(2013)和Mahler和Zajic(2002)。
本文提出了基于最近开发的箱粒子滤波器(PF)(Gning、Ristic、Mihaylova和Abdallah,2013)和卷积粒子滤波器(CPF)(Angelova等,2013;Campillo和Rossi,2009;Rossi和Vila,2006)框架的两种新型解决方案,用于人群跟踪问题。
箱PF(Abdallah等人,2008年;Gning、Mihaylova等人,2012年;Gning等人,2013年)依赖于箱粒子的概念,该粒子占据在状态空间中具有非零体积的小型可控矩形区域。箱PF能够解决由人群产生的多个测量所引起的数据关联问题。当一架无人机飞越一个区域并收集数据时,从上方看到这个区域时,这是一个常见情况。
与我们以前的作品(例如Petrov、Gning、Mihaylova和Angelova,2012年;Petrov、Ulmke等人,2012年;Petrov、Mihaylova、de Freitas和Gning,2014年)相比,本文具有几个新的贡献:(i) 当状态向量由运动状态和范围参数组成时,导出了箱PF的广义似然函数;(ii) 根据优化,计算了箱PF的似然性,通过解决具有多个测量的约束满足问题(CSP);(iii) 对人群和杂波测量率进行了在线估计;(iv) 提出了自适应CPF。开发的CPF能够处理多个测量,包括高水平的杂波。它能够解决数据关联问题,而不需要人群和杂波测量率。自适应CPF可以估计动态运动状态和动态参数,这是与Angelova等人(2013年)、Campillo和Rossi(2009年)以及Rossi和Vila(2006年)提出的基于CPF的静态参数方法不同的解决方案。
这两种滤波器在解决非线性估计问题方面具有非常吸引人的特性。这两种滤波器都在不确定和不完美的观测条件下操作:传感器报告的数量波动。
对于两种不同情况评估了箱PF和CPF的性能。首先,在完全匹配的情况下,滤波器使用的模型直接匹配模拟器使用的模型;其次,在通过瓶颈的现实人群的不匹配场景中。将箱PF和CPF与标准的顺序重要性重采样PF(SIR PF)(Doucet、De Freitas和Gordon,2001)在滤波器准确性和计算复杂性方面进行比较。
📚2 运行结果
主函数代码:
%% PURPOSE :
%% Group tracking by means of Convolution Particle Filtering
%% rectangular approximation of the group size
%% group center state = [x_pos, x_speed, y_pos, y_speed]'
%% extent parameters = [a, b]';
clear all
close all
global dt_s N nx nz nv R_sqrt clut clutterRo ones_N
%*******************************************************************
% INITIAL CONDITIONS:
% ==============================
clut = 1; % 0 - no clutter. 1 - clutter added.
clutterRo = 1e-2;
%------ sensor data
%
nz = 2; % dimension of the measurement vector (x, y)
nv = 2; % dimension of the measurement noise vector
std_x = 0.1; %[m] measurement error standard deviations
std_y = 0.1; %[m]
% measurement error covariance matrix ;
R_sqrt = [ std_x 0 ; 0 std_y];
R = [ std_x^2 0 ; 0 std_y^2];
% ------ dynamic model data
%
nx = 6; % dimension of the filter state vector
ne = 2; % dimension of the extent parameters vector
state = [100,0,100,0,40,40]; % initial state
t_max_s = 40; % simulation time
dt_s = 0.125; % sampling time
kmax = ceil(t_max_s/dt_s); % maximum number of time steps (final time step)
N = 1000; % Number of particles
MC_runs = 1; % number of Monte Carlo runs
x_est_all = zeros(MC_runs,nx-ne,kmax);
tita_est_all = zeros(MC_runs,ne,kmax);
%----- initial state
%
std_x0 =[50,10,50,10,30,30]';
%
% ----- CPF constant parameters
%
ones_N = ones(1,N);
if MC_runs > 1
try
load MCRuns
start = length(time_pf)+1;
catch
start = 1;
end
else
start = 1;
end
% ===== Begin the Monte Carlo runs =====
for m = start:MC_runs
rand('state',sum(500*clock)); % Shuffle the pack!
randn('state',sum(800*clock)); % Shuffle the pack! Bernoulli
fprintf('run = %i / %i : \r',m,MC_runs);
crowdInitialise; % Generate ground truth data and measurements
[grState.true_state] = state(1,1:4)';
[grState.true_extent] = state(1,5:6)';
x_0 = [grState.true_state;grState.true_extent];
[xParticle_pf, w] = init_group_state(x_0,std_x0);
tic; % Initialise timer for benchmarking
%
% / ========= Evolution in time =========//
for k = 3:kmax
%
fprintf('run = %i / %i : PF : k = %i / %i \r',m,MC_runs,k,kmax);
%
% ----- prediction step
%
[xParticle_pred, c, ...
]= PF_prediction(xParticle_pf);
clust.measurements= measurements(k).m';
[grState.true_state] = state(k,1:4)';
[grState.true_extent] = state(k,5:6)';
% ===== EVALUATE IMPORTANCE WEIGHTS =====
[w]= CPF_likelihood(xParticle_pred,...
c, clust.measurements, w);
% output estimate
x_est_k = xParticle_pred * w';
% resampling
[xParticle_pf,w]= resampling(xParticle_pred',...
w');
x_est_all(m,:,k) = x_est_k(1:4);
tita_est_all(m,:,k) = x_est_k(5:6);
perf.est(k,:,m) = x_est_k;
perf.state(k,:,m) = [grState.true_state;grState.true_extent];
end
time_pf(m) = toc; % How long did this take?
%
save('MCRuns','perf','time_pf')
end;
mean_time_pf = mean(time_pf);
%
% display final results
disp(' ');
disp('Mean Execution time (seconds)');
disp('-------------------------');
disp(' ');
disp(['PF = ' num2str(mean_time_pf)]);
%************************************************************
plot_crowd
🎉3 参考文献
文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。