追踪¶
数据关联¶
- class MarginalAssignment(exists_logits, assign_logits, bp_iters=None)[source]¶
计算对象和检测之间的边际数据关联。
这假设每个检测对应零个或一个对象,每个对象对应零个或多个检测。具体来说,这并不假设检测已被划分为互斥的帧,这在二维分配问题中很常见。
- Parameters
exists_logits (torch.Tensor) – 一个形状为
[num_objects]
的张量,表示每个潜在对象存在性的每个对象因子。assign_logits (torch.Tensor) – 一个形状为
[num_detections, num_objects]
的张量,表示分配概率的每边因子,其中每条边表示给定的检测与单个对象相关联。bp_iters (int) – 可选的信念传播迭代次数。如果未指定或为
None
,将使用一个计算成本较高的精确算法。
- Variables
num_detections (int) – 检测的数量
num_objects (int) – 对象的数量(可能存在的)
exists_dist (pyro.distributions.Bernoulli) – 一个关于对象存在的平均场后验分布。
assign_dist (pyro.distributions.Categorical) – 一个关于每个检测关联的对象(或无)的平均场后验分布。它具有
.event_shape == (num_objects + 1,)
,其中最后一个元素表示虚假检测,并且.batch_shape == (num_frames, num_detections)
。
- class MarginalAssignmentSparse(num_objects, num_detections, edges, exists_logits, assign_logits, bp_iters)[源代码]¶
MarginalAssignment
的一个廉价稀疏版本。- Parameters
num_detections (int) – 检测的数量
num_objects (int) – 对象的数量(可能存在的)
edges (torch.LongTensor) – 一个形状为
[2, num_edges]
的张量,指定可行的关联的(检测,对象)索引对。exists_logits (torch.Tensor) – 一个形状为
[num_objects]
的张量,表示每个潜在对象存在的每个对象因素。assign_logits (torch.Tensor) – 一个形状为
[num_edges]
的张量 表示每个边的分配概率因子,其中每个 边表示给定的检测与单个对象相关联。bp_iters (int) – 可选的信念传播迭代次数。如果未指定或为
None
,将使用一个计算成本较高的精确算法。
- Variables
num_detections (int) – 检测的数量
num_objects (int) – 对象的数量(可能存在的)
exists_dist (pyro.distributions.Bernoulli) – 一个关于对象存在的平均场后验分布。
assign_dist (pyro.distributions.Categorical) – 一个关于每个检测关联的对象(或无)的平均场后验分布。它具有
.event_shape == (num_objects + 1,)
,其中最后一个元素表示虚假检测,并且.batch_shape == (num_frames, num_detections)
。
- class MarginalAssignmentPersistent(exists_logits, assign_logits, bp_iters=None, bp_momentum=0.5)[source]¶
这计算了一个多帧多对象数据关联问题的边缘分布,其中持久对象的数量未知。
输入是因子图中的因子(每个潜在对象的存在概率和每个对象检测对的分配概率),输出是每个潜在对象的后验存在概率和每个对象检测对的后验分配概率的边际分布。
这假设每帧有一个共享的(最大)检测数量;要处理可变数量的检测,只需将
assign_logits
的相应元素设置为-float('inf')
。- Parameters
exists_logits (torch.Tensor) – 一个形状为
[num_objects]
的张量,表示每个潜在对象存在性的每个对象因子。assign_logits (torch.Tensor) – 一个形状为
[num_frames, num_detections, num_objects]
的张量,表示每个边缘的分配概率因子,其中每个边缘表示在给定的时间帧中,给定的检测与单个对象相关联。bp_iters (int) – 可选的信念传播迭代次数。如果未指定或为
None
,将使用一个计算成本较高的精确算法。bp_momentum (float) – 用于置信传播的可选动量。 应在区间
[0,1)
内。
- Variables
num_frames (int) – 时间帧的数量
num_detections (int) – 每帧的(最大)检测数量
num_objects (int) – 对象的数量(可能存在的)
exists_dist (pyro.distributions.Bernoulli) – 一个关于对象存在的平均场后验分布。
assign_dist (pyro.distributions.Categorical) – 一个关于每个检测关联的对象(或无)的平均场后验分布。它具有
.event_shape == (num_objects + 1,)
,其中最后一个元素表示虚假检测,并且.batch_shape == (num_frames, num_detections)
。
- compute_marginals(exists_logits, assign_logits)[source]¶
这通过枚举实现了成对边际的精确推断。这种方法非常昂贵,仅适用于测试。
请参阅
MarginalAssignment
以获取参数和问题描述。
- compute_marginals_bp(exists_logits, assign_logits, bp_iters)[source]¶
这实现了通过循环信念传播的成对边际近似推断,采用了[1]的方法。
请参阅
MarginalAssignment
以获取参数和问题描述。- [1] Jason L. Williams, Roslyn A. Lau (2014)
使用信念传播近似评估边际关联概率 https://arxiv.org/abs/1209.6299
- compute_marginals_sparse_bp(num_objects, num_detections, edges, exists_logits, assign_logits, bp_iters)[源代码]¶
这实现了通过循环信念传播的成对边际近似推断,采用了[1]的方法。
请参阅
MarginalAssignmentSparse
以获取参数和问题描述。- [1] Jason L. Williams, Roslyn A. Lau (2014)
使用信念传播近似评估边际关联概率 https://arxiv.org/abs/1209.6299
- compute_marginals_persistent(exists_logits, assign_logits)[source]¶
这通过枚举实现了成对边际的精确推断。这种方法非常昂贵,仅适用于测试。
请参阅
MarginalAssignmentPersistent
以获取参数和问题描述。
- compute_marginals_persistent_bp(exists_logits, assign_logits, bp_iters, bp_momentum=0.5)[source]¶
这实现了通过循环信念传播的成对边际近似推断,采用了[1]、[2]的方法。
请参阅
MarginalAssignmentPersistent
以获取参数和问题描述。- [1] Jason L. Williams, Roslyn A. Lau (2014)
使用信念传播近似评估边际关联概率 https://arxiv.org/abs/1209.6299
- [2] Ryan Turner, Steven Bottone, Bhargav Avasarala (2014)
一个完整的变分跟踪器 https://papers.nips.cc/paper/5572-a-complete-variational-tracker.pdf
分布¶
- class EKFDistribution(x0, P0, dynamic_model, measurement_cov, time_steps=1, dt=1.0, validate_args=None)[source]¶
EKF状态的分布。参见
EKFState
。 目前仅支持log_prob。- Parameters
x0 (torch.Tensor) – PV 张量(均值)
P0 (torch.Tensor) – 协方差
dynamic_model –
DynamicModel
对象measurement_cov (torch.Tensor) – 测量协方差
time_steps (int) – 时间步数
dt (torch.Tensor) – 时间步长
- filter_states(value)[source]¶
根据测量值返回ekf状态
- Parameters
value (torch.Tensor) – 测量均值的形状为 (time_steps, event_shape)
- log_prob(value)[来源]¶
返回测量张量创新值的联合对数概率
- Parameters
value (torch.Tensor) – 测量均值的形状为 (time_steps, event_shape)
动态模型¶
- class DynamicModel(dimension, dimension_pv, num_process_noise_parameters=None)[source]¶
动态模型接口。
- Parameters
dimension – 原生状态维度。
dimension_pv – PV状态维度。
num_process_noise_parameters – 过程噪声参数空间的维度。 这适用于UKF应用。对于EKF和大多数其他滤波器,可以保留为
None
。
- property dimension¶
原生状态维度访问。
- property dimension_pv¶
PV状态维度访问。
- property num_process_noise_parameters¶
过程噪声参数空间维度访问。
- abstract forward(x, dt, do_normalization=True)[source]¶
在时间间隔
dt
上对原生状态x
进行积分。- Parameters
x – 当前的本机状态。如果DynamicModel不可微分,请确保处理
x
被过程噪声参数增强的情况。dt – 积分的时间间隔。
do_normalization – 是否对输出进行归一化,例如,将角度调整到一个区间内。
- Returns
原生状态 x 将 dt 集成到未来。
- geodesic_difference(x1, x0)[source]¶
计算并返回两个原生状态之间的测地线差异。 这是欧几里得操作
x1 - x0
的推广。- Parameters
x1 – 原生状态。
x0 – 初始状态。
- Returns
原生状态
x1
和x2
之间的测地差异。
- abstract mean2pv(x)[source]¶
计算并返回从本地状态得到的PV状态。在IMM(交互多模型)滤波中,结合不同类型的状态估计非常有用。
- Parameters
x – 本地状态估计均值。
- Returns
PV状态估计平均值。
- abstract cov2pv(P)[源代码]¶
从原生协方差计算并返回PV协方差。在IMM(交互多模型)滤波中,用于组合不同类型的状态估计。
- Parameters
P – 原生状态估计协方差。
- Returns
PV状态估计协方差。
- abstract process_noise_cov(dt=0.0)[source]¶
计算并返回过程噪声协方差(Q)。
- Parameters
dt – 积分的时间间隔。
- Returns
只读协方差(Q)。对于DifferentiableDynamicModel,这是由随机积分产生的原生状态
x
的协方差(用于EKF)。否则,它是过程噪声参数的直接协方差(用于UKF)。
- class DifferentiableDynamicModel(dimension, dimension_pv, num_process_noise_parameters=None)[source]¶
可以高效计算状态转移雅可比矩阵的DynamicModel,通常通过解析方法或自动微分实现。
- class Ncp(dimension, sv2)[源代码]¶
NCP(近恒定位置)动态模型。可以被继承,例如使用CWNV(连续白噪声速度)或DWNV(离散白噪声速度)。
- Parameters
dimension – 原生状态维度。
sv2 – 速度的方差。通常选择的标准差大约是预期观察到的最大速度的一半。
- forward(x, dt, do_normalization=True)[源代码]¶
在时间间隔
dt
上对原生状态x
进行积分。- Parameters
x – 当前的本机状态。如果DynamicModel不可微分,请确保处理
x
被过程噪声参数增强的情况。dt – 要积分的时间间隔。 do_normalization: 是否对输出进行归一化,例如, 将角度调整到一个区间内。对于此子类没有影响。
- Returns
原生状态 x 将 dt 集成到未来。
- mean2pv(x)[source]¶
计算并返回从本地状态得到的PV状态。在IMM(交互多模型)滤波中,结合不同类型的状态估计非常有用。
- Parameters
x – 本地状态估计均值。
- Returns
PV状态估计平均值。
- cov2pv(P)[源代码]¶
从原生协方差计算并返回PV协方差。在IMM(交互多模型)滤波中,用于组合不同类型的状态估计。
- Parameters
P – 原生状态估计协方差。
- Returns
PV状态估计协方差。
- class Ncv(dimension, sa2)[源代码]¶
NCV(近恒定速度)动态模型。可以被继承,例如,使用CWNA(连续白噪声加速度)或DWNA(离散白噪声加速度)。
- Parameters
dimension – 原生状态维度。
sa2 – 加速度的方差。通常选择的标准差大约为预期观察到的最大加速度的一半。
- forward(x, dt, do_normalization=True)[source]¶
在时间间隔
dt
上对原生状态x
进行积分。- Parameters
x – 当前的本机状态。如果DynamicModel不可微分,请确保处理
x
被过程噪声参数增强的情况。dt – 积分的时间间隔。
do_normalization – 是否对输出进行归一化,例如,将角度调整到一个区间内。对于此子类没有影响。
- Returns
原生状态 x 将 dt 集成到未来。
- mean2pv(x)[source]¶
计算并返回从本地状态得到的PV状态。在IMM(交互多模型)滤波中,结合不同类型的状态估计非常有用。
- Parameters
x – 本地状态估计均值。
- Returns
PV状态估计平均值。
- cov2pv(P)[source]¶
从原生协方差计算并返回PV协方差。在IMM(交互多模型)滤波中,用于组合不同类型的状态估计。
- Parameters
P – 原生状态估计协方差。
- Returns
PV状态估计协方差。
- class NcpContinuous(dimension, sv2)[源代码]¶
NCP(近恒定位置)动态模型与CWNV(连续白噪声速度)。
参考文献
“估计在跟踪和导航中的应用” 作者 Y. Bar-Shalom 等,2001年,第269页。
- Parameters
dimension – 原生状态维度。
sv2 – 速度的方差。通常选择的标准差大约是预期观察到的最大速度的一半。
- class NcvContinuous(dimension, sa2)[source]¶
NCV(近恒定速度)动态模型与CWNA(连续白噪声加速度)。
参考文献
“估计在跟踪和导航中的应用” 作者 Y. Bar-Shalom 等,2001年,第269页。
- Parameters
dimension – 原生状态维度。
sa2 – 加速度的方差。通常选择的标准差大约为预期观察到的最大加速度的一半。
- class NcpDiscrete(dimension, sv2)[源代码]¶
NCP(近恒定位置)动态模型与DWNV(离散白噪声速度)。
- Parameters
dimension – 原生状态维度。
sv2 – 速度的方差。通常选择的标准差大约是预期观察到的最大速度的一半。
参考文献
“估计及其在跟踪和导航中的应用” 作者 Y. Bar-Shalom 等,2001年,第273页。
扩展卡尔曼滤波器¶
- class EKFState(dynamic_model, mean, cov, time=None, frame_num=None)[source]¶
用于NCP(近恒定位置)或NCV(近恒定速度)目标动态模型的状态中心EKF(扩展卡尔曼滤波器)。存储目标动态模型、状态估计和状态时间。传入的
Measurement
提供传感器信息以进行更新。警告
为了提高效率,动态模型仅进行浅拷贝。必要时在外部进行深拷贝以防止意外更改。
- Parameters
dynamic_model – 目标动态模型。
mean – 目标状态估计的均值。
cov – 目标状态估计的协方差。
time – 状态估计的时间。
- property dynamic_model¶
动态模型访问。
- property dimension¶
原生状态维度访问。
- property mean¶
本地状态估计均值访问。
- property cov¶
本地状态估计协方差访问。
- property dimension_pv¶
PV状态维度访问。
- property mean_pv¶
计算并返回缓存的PV状态估计平均值。
- property cov_pv¶
计算并返回缓存的PV状态估计协方差。
- property time¶
连续状态时间访问。
- property frame_num¶
离散状态时间访问。
- predict(dt=None, destination_time=None, destination_frame_num=None)[source]¶
使用动态模型来预测(也称为传播或集成)状态估计。
- Parameters
dt – 要积分的时间。状态时间将自动增加这个量,除非你提供
destination_time
。使用destination_time
可能更可取,以防止舍入误差的累积。destination_time – 可选值,用于设置积分后的连续状态时间。如果未提供此值,则必须提供destination_frame_num。
destination_frame_num – 可选值,用于设置积分后的离散状态时间。如果未提供此值,则必须提供destination_frame_num。
- innovation(measurement)[source]¶
计算并返回如果使用测量进行更新将引起的创新,但实际上不执行更新。假设状态和测量是时间对齐的。用于计算Chi^2统计量和似然。
- Parameters
measurement – 测量
- Returns
创新意味着假设更新的均值和协方差。
- Return type
元组(
torch.Tensor
,torch.Tensor
)
哈希¶
- class LSH(radius)[source]¶
为低维欧几里得空间实现局部敏感哈希。
允许高效地找到一个点的邻居。提供2个保证:
示例
>>> radius = 1 >>> lsh = LSH(radius) >>> a = torch.tensor([-0.51, -0.51]) # hash(a)=(-1,-1) >>> b = torch.tensor([-0.49, -0.49]) # hash(a)=(0,0) >>> c = torch.tensor([1.0, 1.0]) # hash(b)=(1,1) >>> lsh.add('a', a) >>> lsh.add('b', b) >>> lsh.add('c', c) >>> # even though c is within 2radius of a >>> lsh.nearby('a') {'b'} >>> lsh.nearby('b') {'a', 'c'} >>> lsh.remove('b') >>> lsh.nearby('a') set()
- Parameters
radius (float) – 哈希函数中使用的缩放参数。决定了邻域的大小。
- add(key, point)[source]¶
将 (
key
,point
) 对添加到哈希中。- Parameters
key – 用于标识
point
的键。point (torch.Tensor) – 数据,应该是分离的并且在CPU上。
- class ApproxSet(radius)[source]¶
查询低维欧几里得空间的近似占用情况。
- try_add(point)[source]¶
尝试将
point
添加到集合中。只有在point
的bin中没有点时才会添加。- Parameters
point (torch.Tensor) – 要查询的点,应该被分离并在CPU上。
- Returns
True
如果点成功添加,False
如果point
的 bin 中已经有一个点。- Return type
- merge_points(points, radius)[source]¶
贪婪地合并距离小于给定半径的点。
这使用
LSH
来实现复杂度,该复杂度在合并的集群数量上是线性的,在最大合并集群的大小上是二次的。- Parameters
points (torch.Tensor) – 一个形状为
(K,D)
的张量,其中K
是点的数量,D
是维度的数量。radius (float) – 比这个距离更近的点将被合并。
- Returns
一个元组
(merged_points, groups)
,其中merged_points
是一个形状为(J,D)
的张量,其中J <= K
,而groups
是一个元组列表,这些元组包含将合并点映射到原始点的索引。请注意,len(groups) == J
且sum(len(group) for group in groups) == K
。- Return type
测量¶
- class Measurement(mean, cov, time=None, frame_num=None)[source]¶
高斯测量接口。
- Parameters
mean – 测量分布的均值。
cov – 测量分布的协方差。
time – 测量的连续时间。如果未提供此参数,则必须提供frame_num。
frame_num – 测量的离散时间。如果未提供此参数,则必须提供time。
- property dimension¶
测量空间维度访问。
- property mean¶
测量均值(在大多数卡尔曼滤波文献中为
z
)。
- property cov¶
噪声协方差(在大多数卡尔曼滤波文献中为
R
)。
- property time¶
连续测量时间。
- property frame_num¶
测量的离散时间。