主要内容

跟踪指标简介

在设计多目标跟踪系统时,设计一种方法来评估系统的性能是非常重要的。这个地面真相通常可以从模拟环境中获得,或者通过使用对记录数据进行手动或自动标记的地面真相提取等技术获得。虽然可以使用可视化工具对跟踪算法进行定性评估,但这种方法通常是不可扩展的。本示例介绍了传感器融合和跟踪工具箱™中用于评估跟踪器性能的不同定量分析工具。您还将使用一些常见的事件,如假轨迹,轨迹交换等,在跟踪多个对象时遇到,以了解这些工具的优势和限制。

分配和误差度量

在存在地面真值的情况下,评估多目标跟踪器的一般工作流程可分为两个主要步骤。首先,使用分配算法将轨迹分配给真理。其次,利用计算分配作为输入,计算每个航迹的状态估计精度。在每一步中,可以获得跟踪器性能的一些关键指标。在传感器融合和跟踪工具箱™中,这两个步骤对应的度量称为任务指标而且误差指标分别。

分配指标评估由于模糊、错过目标或存在误报警而导致的传感器数据不正确分配到跟踪器的特性。传感器数据的不正确分配可能导致目标之间的轨道交换、为目标创建冗余轨道、丢失真实目标轨道和创建假轨道等事件。另一方面,误差度量提供对跟踪器的状态估计或对象级精度的评估。即使跟踪器在分配工作中做得很好,由于测量中的噪声以及目标运动模型建模和传感器测量模型建模的不准确性,也可能发生跟踪级别的不准确性。

轨迹与真相的定义

分配指标使用门控贪婪最近邻方法,它允许多对一的轨道分配,这意味着多个轨道可以分配给相同的真相。在每个步骤中,度量的目标是将跟踪分配给真相,同时考虑它们在前一个时间步骤中的分配。这有助于分配指标根据当前和以前的分配将曲目分类到特定的类别中。下面的图片描述了曲目分配指标所使用的类别。

从追踪者的角度来看,任务指标也代表不同类别的“目标”。这有助于分配指标记录事件,如跟踪建立和目标中断。建立和中断事件如下图所示。

通过将跟踪和事实分类到多个类别,分配指标输出跟踪器性能的累积分析。指标还提供了关于每个真理和跟踪的分配信息的详细信息。此外,分配指标每一步的分配结果也可用于评估误差指标。误差度量输出跟踪器状态估计精度的累积分析。与分配指标类似,错误指标也为每个轨迹和真相提供详细信息。

接下来,您将学习如何在MATLAB中使用赋值和误差度量。

计算和分析指标

要使用分配指标,您可以创建trackAssignmentMetric系统对象™。还可以使用名称-值对指定对象的属性,为不同的应用程序配置度量。在本例中,您将分配和散度距离指定为轨迹和真理之间位置的绝对误差。您还可以为轨迹的分配和散度指定距离阈值。

assignmentMetrics = trackAssignmentMetrics (...“AssignmentDistance”“posabserr”...“DivergenceDistance”“posabserr”...“DivergenceThreshold”, 1...“AssignmentThreshold”, 0.85)
assignmentMetrics = trackAssignmentMetrics带有属性:DistanceFunctionFormat: '内置' MotionModel: 'constvel' AssignmentThreshold: 0.8500 DivergenceThreshold: 1 AssignmentDistance: 'posabserr' DivergenceDistance: 'posabserr'

要使用错误度量,您可以创建trackErrorMetrics系统对象。由于没有提供名称-值对,所以使用默认值。在本例中,假设目标是使用恒速模型跟踪的。

errorMetrics = trackErrorMetrics
errorMetrics = trackErrorMetrics带有属性:ErrorFunctionFormat: '内置' MotionModel: 'constvel'

分配和误差指标是由模拟的轨迹和真相驱动的,通过使用一个助手类,helperMetricEvaluationScenarios.该类的对象在每个时间步中输出一个轨道和真理列表。

trackTruthSimulator = helperMetricEvaluationScenarios;

您还可以使用一个名为helperMetricEvaluationDisplay.这些助手类包含在示例中的同一个工作文件夹中,与此脚本相同。

显示= helperMetricEvaluationDisplay (...“PlotTrackClassification”,真的,...“PlotTruthClassification”,真的,...“PlotTrackErrors”假的,...“PlotTruthErrors”假的,...“PlotAssignments”,真的,...“RecordGIF”,真的,...“ErrorToPlot”“posRMS”);

每次生成轨迹和真相的列表,并使用以下工作流运行分配和错误度量。

更新度量的时间戳时间戳= 0:0.1:10;n =元素个数(时间戳);初始化记录的变量posRMSE = 0 (n, 1);velRMSE = 0 (n, 1);posANEES = 0 (n, 1);velANEES = 0 (n, 1);truthError =细胞(n, 1);trackError =细胞(n, 1);循环时间戳I = 1: n%当前时间时间=时间戳(我);使用模拟生成轨迹和真理。[tracks, truth] = trackTruthSimulator(time);您将提供跟踪和真相作为分配度量的输入。。这将从所有的轨迹和真相中输出一个累积的摘要。。[trackAssignmentSummary(i), truthAssignmentSummary(i)] = assignmentMetrics(tracks, truth);% #好< SAGROW >有关每个音轨的详细作业信息,请使用% trackMetricsTable方法。trackTable = trackMetricsTable (assignmentMetrics);同样,对于每个真理的详细作业信息,你。使用truthMetricsTable方法。truthTable = truthMetricsTable (assignmentMetrics);对于运行错误度量,您获得的当前赋值%使用currentAssignment方法跟踪真理。[assignnedtrackids, assignnedtruthids] = currentAssignment(assignmentMetrics);当前分配信息以及曲目列表和。%的真理,然后可以作为输入传递给%误差度量。[posRMSE(i),velRMSE(i),posANEES(i),velANEES(i)] = errorMetrics(tracks, assignnedtrackids, truth, assignnedtruthids);有关每个记录真实性和跟踪的详细错误信息,您可以。%在误差度量上使用累积度量方法。trackError{我}= cumulativeTrackMetrics (errorMetrics);truthError{我}= cumulativeTruthMetrics (errorMetrics);显示(tracks, truth, assignnedtrackids, assignnedtruthids, trackTable, truthTable);结束

分析任务指标

下面的动画显示了分配指标的可视化表示。在一开始,P1和P2都没有任何相关的轨道,因为建立的延迟。因此,它们都被归类为未能完成目标。在X = 5米左右,P1有几个时间步没有被跟踪。注意,在此期间,分配指标将P2输出为被丢弃的目标。当轨道在P1和P2之间交换时,当它们移出发散阈值时,它们最初被宣布为发散的。经过几个时间步骤后,轨迹到达新真理的分配门,并与新真理相关联。

每个轨迹和真相的度量的可视化可以帮助更容易地理解不同的事件。然而,对于大量的轨迹和真相来说,它可能会变得难以承受。另一种方法是使用分配指标的汇总输出。这些输出提供了到当前时间步骤为止的分配指标的总体摘要。在模拟结束时,分配指标摘要的字段和值如下所示。

disp (trackAssignmentSummary(结束));
TotalNumTracks: 5 NumFalseTracks: 1 MaxSwapCount: 1 TotalSwapCount: 2 MaxDivergenceCount: 1 TotalDivergenceCount: 3 MaxDivergenceLength: 7 TotalDivergenceLength: 17 max冗余计数:1 total冗余计数:1 maxredundancy ancylength: 34 totalredundancy ancylength: 34
disp (truthAssignmentSummary(结束));
totalnumtruth: 2 nummissingtruth: 0 MaxEstablishmentLength: 5 TotalEstablishmentLength: 10 MaxBreakCount: 2 TotalBreakCount: 4 MaxBreakLength: 9 TotalBreakLength: 9

通过在每个步骤捕获任务摘要,您还可以绘制累积分析的图。下面的图显示了用于轨迹和真值分配摘要的字段的子集。

helperPlotStructArray(显示、trackAssignmentSummary);

图中包含一个axes对象。带有曲目分配指标标题的axes对象包含6个类型为line的对象。这些对象表示TotalNumTracks、TotalSwapCount、TotalDivergenceCount、TotalDivergenceLength、totalredundancy ancycount、totalredundancy ancylength。

helperPlotStructArray(显示、truthAssignmentSummary);

图中包含一个axes对象。标题为true赋值度量的axis对象包含4个类型为line的对象。这些对象表示totalnumtruth, TotalEstablishmentLength, TotalBreakCount, TotalBreakLength。

分析误差指标

类似于分配指标,误差指标也可以计算和可视化的每个轨道和真相。每个轨迹的估计误差和仿真结束时的真值字段如下图所示。每一个字段都表示每条轨迹的累积误差和真实值。

每个轨道的估计误差

disp (trackError{结束});
TrackID posRMS velRMS posANEES velANEES _______ _______ ________ ________ _________ 1 0.72278 0.87884 0.52241 0.77236 2 0.16032 0.083823 0.025702 0.0070263 3 0.52898 1.3192 0.27982 1.7403 4 0.74411 2.112 0.55369 4.4604

每个真理的估计误差

disp (truthError{结束});
TruthID posRMS velRMS posANEES velANEES  _______ _______ ______ ________ ________ 1 0.52259 1.3918 0.2731 1.9372 0.58988 1.259 0.34795至1.5851点

通过记录每个时间步上的误差,还可以为每个轨迹和真理绘制误差与时间的关系图。下面的图显示了每条轨迹和真理位置上的RMS误差。在一个音轨被删除后,它的估计误差保持不变。注意,在前半部分的模拟中,由于T3的轨迹与P2的轨迹不完全匹配,T3的估计误差大于T4的估计误差。还要注意T3在上半场的估计误差下降,因为它慢慢收敛到真实的位置。在track-swap事件期间。T3和T4的估计误差增大,直到它们的分配切换。

绘制表数组的实用程序。“posRMS”是要绘制的字段helperPlotTableArray(显示、trackError“posRMS”);

图中包含一个axes对象。每个轨道的标题估计错误坐标轴对象包含4个类型为line的对象。这些对象表示T1、T2、T3、T4。

每个真理的估计误差就是所有轨迹估计误差的累加分配到它。当P2在模拟的第8个时间步左右被分配冗余轨迹时,其估计误差发生跳变。当冗余轨迹接近P2时,误差减小,但当其相关轨迹偏离时,误差再次增大。

helperPlotTableArray(显示、truthError“posRMS”);

图中包含一个axes对象。每个真值的标题估计错误的axis对象包含2个类型为line的对象。这些物体代表P1 P2。

对于大量的跟踪和事实,您还可以使用累积误差度量所有在它们的生命周期中指定轨道。注意当轨道交换时(接近第80步)误差的增加。还请注意在第25个时间步长的时候,当T1偏离分配的真值P2并被冗余轨道T3超过时,出现了较小的峰值。

图(f =“单位”“归一化”“位置”,[0.1 0.1 0.6 0.6]);ax =轴(f);次要情节(2 2 1)情节(posRMSE,“线宽”2);包含(“时间步”);ylabel (“位置RMS误差(m)”);网格(“上”);次要情节(2,2,2)情节(velRMSE,“线宽”2);包含(“时间步”);ylabel (“速度均方根误差(m/s)”);网格(“上”);次要情节(2,2,3)情节(posANEES,“线宽”2);包含(“时间步”);ylabel (“位置平均归一化误差”);网格(“上”);次要情节(2,2,4)情节(velANEES,“线宽”2);包含(“时间步”);ylabel (“平均速度归一化误差”);网格(“上”);sgtitle (“所有轨道的累积误差”“FontWeight”“大胆”);

图中包含4个轴对象和另一个subplottext类型的对象。axis对象1包含一个类型为line的对象。Axes对象2包含一个类型为line的对象。Axes对象3包含一个类型为line的对象。Axes对象4包含一个line类型的对象。

将指标总结为分数

评估多目标跟踪器性能的一个常见用例是调优其参数。这通常是通过将指标组合为单个成本值来实现的,该成本值可以作为优化算法的函数。分配和错误度量提供了几种不同的有效性度量(moe),可以通过首先选择最相关的度量,然后根据应用程序执行加权组合来进行组合。选择正确的MoEs以及将它们组合成一个分数是具有挑战性的。作为此方法的替代方法,您可以使用最优子模式分配(OSPA)[1]度量和广义最优子模式分配(GOSPA)[2]度量。OSPA和GOSPA指标都通过将分配和状态估计精度结合到单个成本值中来评估多目标跟踪器的性能。接下来,您将了解OSPA和GOSPA度量以及在MATLAB中计算这些度量的工作流程。

OSPA规

OSPA度量可以被认为是多个轨迹和真相之间的统计距离。为了计算OSPA度量,该算法首先使用全局最近邻(GNN)算法将现有的轨迹和真相分配给彼此。一旦计算了分配,度量将整个距离分为两个子组件—定位和基数不匹配。定位组件捕获状态估计精度导致的错误,而基数错配组件捕获冗余轨迹、假轨迹和遗漏真相的影响。传统的OSPA指标不考虑轨迹的时间历史,即前一步的分配不影响当前步骤的指标。因此,像轨迹开关这样的效应在传统的OSPA度量中没有被捕获。为了解决这个问题,为OSPA引入了一个新的子组件,称为“标记”组件[3]。传统的OSPA与“标签”组件的组合有时被称为“用于轨道的OSPA”(OSPA- t)或带标签的OSPA (LOSPA)[4]。

要在MATLAB中使用OSPA度量,您需要使用trackOSPAMetric系统对象。通过提供一个非零值,可以从OSPA切换到带标签的OSPALabelingError财产。要了解如何计算每个子组件,请参阅的“算法”部分trackOSPAMetric

ospaMetric = trackOSPAMetric (“距离”“posabserr”...“CutoffDistance”, 1...“LabelingError”, 0.25);

接下来运行相同的场景并在每个时间步上计算OSPA度量。

时间戳= 0:0.1:10;n =元素个数(时间戳);%的场景模拟trackTruthSimulator = helperMetricEvaluationScenarios;%初始化变量ospa = 0 (n, 1);locComponent = 0 (n, 1);cardComponent = 0 (n, 1);labelingComponent = 0 (n, 1);循环时间戳i = 1: numl (timeStamps) time = timeStamps(i);%跟踪和真相[tracks, truth] = trackTruthSimulator(time);调用System对象作为函数,并记录OSPA和所有3个组件[ospa(i),locComponent(i),cardComponent(i),labelingComponent(i)] = ospaMetric(tracks, truth);结束

分析OSPA规

图(“单位”“归一化”“位置”,[0.1 0.1 0.6 0.6]);次要情节(2,1,1);情节(ospa“线宽”2);包含(“时间步”);ylabel (“成本”);标题(“OSPA”);网格(“上”);次要情节(2,1,2);情节([locComponent cardComponent labelingComponent),“线宽”2);包含(“时间步”);ylabel (组件成本的);标题(“OSPA组件”);传奇(“定位”“Cardinality-mismatch”“标签”);网格(“上”);

图中包含2个轴对象。标题为OSPA的Axes对象1包含一个类型为line的对象。标题为OSPA Components的Axes对象2包含3个类型为line的对象。这些对象表示定位、基数不匹配、标记。

注意场景中OSPA度量与不同事件之间的相关性。由于建立延迟,OSPA初始值较高。在建立之后,由于冗余轨道的存在,OSPA仍然保持相对较高的水平。删除冗余轨道后,OSPA值降低。在第50时间步左右,随着真理P1被丢弃,OSPA获得了价值。注意,尽管OSPA度量通过提供更高的值来正确地捕获所有这些事件,但它并没有提供关于每个真相和跟踪的更详细的细节,以及它们估计的准确性。OSPA提供的唯一信息是通过其组件获得的。较高的定位分量表明所分配的轨迹不能正确地估计真相的状态。该定位组件使用与赋值相同类型的距离计算。较高的基数分量表示存在遗漏的目标和错误的或冗余的轨道。 A higher labeling error indicates that the tracks are not labelled correctly, which indicates that the tracks are associated to their closest available truths.

GOSPA规

GOSPA的计算方法与OSPA的度量方法相似。使用稍微不同的数学公式,GOSPA度量额外计算子组件,如“错过目标组件”和“错误跟踪组件”。与传统的OSPA类似,GOSPA也不考虑航迹的时间历史。但是,可以通过添加交换组件[5]来实现类似于标签ospa的指标。切换组件捕获在事实之间切换分配的效果。在被分类为半开关或全开关后,每一个为真值的分配更改都会被扣分。半切换是指当一个真值从一个音轨切换到未分配或反之亦然时发生的事件。全切换是指当一个真值从一个音轨切换到另一个音轨时的事件。

要在MATLAB中使用GOSPA度量,您需要创建trackGOSPAMetric系统对象。为了解释跟踪切换,您提供一个正的值SwitchingPenalty

gospaMetric = trackGOSPAMetric (“距离”“posabserr”...“CutoffDistance”, 1...“SwitchingPenalty”, 0.25);

接下来运行相同的场景,并在每个时间步上计算GOSPA度量。

时间戳= 0:0.1:10;n =元素个数(时间戳);trackTruthSimulator = helperMetricEvaluationScenarios;%初始化变量labeledGospa = 0 (n, 1);traditionalGospa = 0 (n, 1);locComponent = 0 (n, 1);missedTargetComponent = 0 (n, 1);falseTrackComponent = 0 (n, 1);switchingComponent = 0 (n, 1);循环时间戳i = 1: numl (timeStamps) time = timeStamps(i);%跟踪和真相[tracks, truth] = trackTruthSimulator(time);将System对象作为函数调用,并获得所有4个组件[labeledGospa(i),traditionalGospa(i),switchingComponent(i),locComponent(i),missedTargetComponent(i),falseTrackComponent(i)] = gospaMetric(tracks, truth);结束

分析结果

图(“单位”“归一化”“位置”,[0.1 0.1 0.6 0.6]);次要情节(2,1,1);情节(labeledGospa“线宽”2);包含(“时间步”);ylabel (“成本”);标题(“GOSPA”);网格(“上”);次要情节(2,1,2);plot([locComponent missedTargetComponent falseTrackComponent switchingComponent],“线宽”2);包含(“时间步”);ylabel (组件成本的);标题(“GOSPA组件”);传奇(“定位”“错过了目标”“虚假跟踪”“切换”);网格(“上”);

图中包含2个轴对象。标题为GOSPA的axis对象1包含一个类型为line的对象。标题为GOSPA Components的Axes对象2包含4个类型为line的对象。这些对象代表定位、目标丢失、错误跟踪、切换。

注意,GOSPA度量还捕获与OSPA度量类似的场景中不同事件的影响。与OSPA相比,如果由于错误跟踪或错过目标而导致指标较高,它也会提供信息。注意峰值是在第50个时间步长的时候错过的目标分量。这个峰值表示P1错过了几步的事件。丢失目标分量中第80个时间步左右的峰值表示履带交换事件。分散和重新分配之间的延迟导致了错过目标以及错误的跟踪组件。

轨迹切换分量中的峰值表示不同的事件。第一个峰值说明了真理从未赋值转换到赋值。第二个峰值是P2轨道的切换。第三个和第四个峰值捕获了真相P1未被分配,然后分别分配到另一个轨道。最后两个峰值解释了真理解分配和再分配。

与OSPA类似,GOSPA也不提供关于每条赛道和真相的详细信息。来自GOSPA的信息可以通过它的组件获得。如名称所示,较高的未跟踪目标组件表示未跟踪目标,较高的假跟踪组件表示存在假跟踪。更高的切换惩罚意味着像建立,音轨交换和丢失音轨这样的事件。细分组件以包括遗漏的目标和错误的跟踪有助于修改跟踪器的正确参数。例如,如果创建了错误的跟踪,典型的解决方案是尝试增加跟踪确认的阈值。

总结

在本例中,您学习了三种不同的工具来分析多目标跟踪系统的性能。您还学习了在MATLAB中使用这些度量的工作流程。您还了解了他们提供的信息类型以及如何分析这些信息。本例中描述的工具非常灵活,可以针对不同的应用程序和用例进行定制。所有工具上都有“内置”选项,可用于指定要用于公制的不同类型的距离。例如,位置或速度的绝对误差或位置或速度的归一化误差。你还可以为轨道指定三种不同的运动模型:恒定速度,恒定转速和恒定加速度。这些“内置”功能支持的轨道形式为objectTrack以及通过场景模拟生成的事实trackingScenario.如果应用程序的音轨和音轨的格式不同,可以对它们进行预处理以转换它们。这允许您使用指标的所有“内置”功能。或者,您可以指定轨迹和真值之间的自定义距离函数。这允许你控制距离以及每个轨道和真相的格式。若要在OSPA和GOSPA度量的自定义和内置功能之间切换,请指定距离“custom”。要在赋值和错误度量的自定义和内置功能之间切换,请更改DistanceFunctionFormat而且ErrorFunctionFormat自定义,分别为分配和误差度量。

参考文献

[1] Schuhmacher, Dominic, Ba-Tuong Vo和Ba-Ngu Vo。多目标滤波器性能评估的一致指标。IEEE信号处理汇刊56.8(2008): 3447 - 3457。

[2] Rahmathullah, Abu Sajana, Ángel F. García-Fernández和Lennart Svensson。"广义最优子模式分配度量"2017第20届信息融合国际会议.IEEE 2017。

[3] Ristic, Branko,等。多目标跟踪算法的性能评估指标。IEEE信号处理汇刊59.7(2011): 3452 - 3457。

[4]罗纳德·马勒PS。统计多源多目标信息融合研究进展.Artech房子,2014。

[5] Garcia-Fernandez, Angel F.等,“用于评估多目标跟踪算法的有限轨迹集空间的度量。”IEEE信号处理汇刊, vol. 68, 2020, pp. 3917-28。

Baidu
map