主要内容

跟踪指标介绍

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

分配和误差度量

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

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

轨迹与真理

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

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

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

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

计算和分析指标

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

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

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

errorMetrics = trackErrorMetrics
errorMetrics = trackErrorMetrics with properties: ErrorFunctionFormat: '内置' MotionModel: 'constvel'

赋值和错误度量是由使用助手类的模拟轨迹和真理驱动的,helperMetricEvaluationScenarios.这个类的对象在每个时间步骤中输出一列轨迹和真理。

trackTruthSimulator = helperMetricEvaluationScenarios;

您还可以使用名为的助手类可视化赋值和错误度量的结果helperMetricEvaluationDisplay.这些helper类包含在与此脚本相同的工作文件夹中的示例中。

显示= 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%当前时间时间=时间戳(我);%使用仿真生成轨迹和真理[track, truths] = trackTruthSimulator(time);你提供轨迹和事实作为分配指标的输入。%输出所有轨迹和真理的累积总结。[trackAssignmentSummary(i), truthAssignmentSummary(i)] = assignmentMetrics(tracks, truths);% #好< SAGROW >要获得关于每个曲目的详细分配信息,请使用% trackMetricsTable方法。trackTable = trackMetricsTable (assignmentMetrics);类似地,对于每个真理的详细分配信息,您%使用truthMetricsTable方法。truthTable = truthMetricsTable (assignmentMetrics);%对于运行的错误度量,您将获得当前的分配值%使用currentAssignment方法跟踪到真理。[assigndtrackids, assigndtruthids] = currentAssignment(assignmentMetrics); / /分配数据%当前分配信息以及曲目列表和可以将当前时刻的% truth作为输入传递给%误差度量。[posRMSE(i),velRMSE(i),posANEES(i),velANEES(i)] = errorMetrics(tracks, assigndtrackid, truths, assigndtruthid);%有关每个记录真相和跟踪的详细错误信息,请%对误差度量使用累积度量方法。trackError{我}= cumulativeTrackMetrics (errorMetrics);truthError{我}= cumulativeTruthMetrics (errorMetrics);display(track, truth, assigned trackid, assigned truthid, trackTable, truthTable);结束

分析任务指标

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

可视化每个轨迹和真相的度量可以帮助我们更容易地理解不同的事件。然而,对于大量的轨迹和事实,它可能变得势不可挡。另一种方法是使用分配指标的汇总输出。这些输出提供了截至当前时间步骤的分配指标的总体总结。下面显示了模拟结束时的分配指标摘要的字段和值。

disp (trackAssignmentSummary(结束));
TotalNumTracks: 5 NumFalseTracks: 1 MaxSwapCount: 1 TotalSwapCount: 2 MaxDivergenceCount: 1 TotalDivergenceCount: 3 MaxDivergenceLength: 7 TotalDivergenceLength: 17 MaxRedundancyCount: 1 TotalRedundancyCount: 1 MaxRedundancyLength: 34 TotalRedundancyLength: 34
disp (truthAssignmentSummary(结束));
TotalNumTruths: 2 NumMissingTruths: 0 MaxEstablishmentLength: 5 TotalEstablishmentLength: 10 MaxBreakCount: 2 TotalBreakCount: 4 MaxBreakLength: 9 TotalBreakLength: 9

通过捕获每个步骤的分配摘要,您还可以绘制累积分析。下面的图显示了track和truth赋值摘要字段的子集。

helperPlotStructArray(显示、trackAssignmentSummary);

图中包含一个轴对象。带有标题为轨道分配度量的axes对象包含6个类型为line的对象。这些对象代表TotalNumTracks, TotalSwapCount, TotalDivergenceCount, TotalDivergenceLength, TotalRedundancyCount, TotalRedundancyLength。

helperPlotStructArray(显示、truthAssignmentSummary);

图中包含一个轴对象。具有标题分配指标的axes对象包含4个类型为line的对象。这些对象表示TotalNumTruths, 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估计的误差下降了。在轨道交换事件期间。随着分配的切换,T3和T4的估计误差均增大。

%绘制表数组的实用程序。'posRMS'是要绘图的领域helperPlotTableArray(显示、trackError“posRMS”);

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

对每个真理的估计误差是所有轨迹估计误差的累积分配到它。当P2在仿真的第8步左右分配冗余轨道时,其估计误差跳变。当冗余航迹接近P2时,误差减小,但当冗余航迹发散时,误差再次增大。

helperPlotTableArray(显示、truthError“posRMS”);

图中包含一个轴对象。每个真实值的轴对象包含2个类型为line的对象。这些对象代表P1和P2。

对于大量的轨迹和真理,您还可以使用累积错误度量所有在它们的生命周期中分配的轨道。注意当轨迹交换(接近第80步)时,错误增加了。同时注意,当T1偏离其分配的真值P2并被冗余轨道T3超越时,第25步左右的峰值较小。

图(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的对象。axis对象2包含一个类型为line的对象。axis对象3包含一个类型为line的对象。axis对象4包含一个类型为line的对象。

将指标汇总为分数

评估多目标跟踪器性能的一个常见用例是调优它的参数。这通常是通过将指标组合成单个成本值来实现的,该成本值可以作为优化算法的函数。分配和错误度量提供了几种不同的有效性度量(moe),可以通过首先选择最相关的度量,然后根据应用程序执行加权组合来进行组合。选择正确的moe以及将它们组合成一个分数可能是具有挑战性的。作为这种方法的替代方法,您可以使用最优子模式分配(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切换到Labelled-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:numel(timeStamps) time = timeStamps(i);追踪与真相[track, truths] = trackTruthSimulator(time);%调用System对象作为函数,并记录OSPA和所有3个组件[ospa(i),locComponent(i),cardComponent(i),labelingComponent(i)] = ospaMetric(tracks, truths);结束

分析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的轴对象1包含一个类型为line的对象。标题为OSPA Components的轴对象2包含3个类型为line的对象。这些对象代表本地化,基数不匹配,标签。

请注意OSPA指标与场景中不同事件之间的相关性。由于建立延迟,初始OSPA偏高。在建立后,由于冗余轨道的存在,OSPA仍然保持相对较高的水平。删除冗余磁道后,OSPA值降低。在第50步左右,随着truth 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也没有考虑轨道的时间历史。然而,与Labelled-OSPA类似的度量可以通过添加交换组件[5]来实现。转换组件捕捉在真理之间转换分配的效果。每一次为真理而改变的作业,在被归类为半开关或全开关后,都会被扣分。半开关是指当一个真值从一个轨道切换到未分配或反之。全切换是指当一个真理将分配从一个轨道切换到另一个轨道时发生的事件。

要在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:numel(timeStamps) time = timeStamps(i);追踪与真相[track, truths] = trackTruthSimulator(time);%以函数的形式调用System对象并获得所有4个组件[labeledGospa(i),传统gospa (i),switchingComponent(i),locComponent(i),missedTargetComponent(i),falseTrackComponent(i)] = gospaMetric(tracks, truths);结束

分析结果

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

图中包含2个轴对象。标题为GOSPA的轴对象1包含类型为line的对象。标题为GOSPA Components的轴对象2包含4个类型为line的对象。这些对象代表定位,错过目标,假轨迹,切换。

注意,GOSPA指标也捕获了与OSPA指标类似的场景中不同事件的效果。与OSPA相比,如果由于虚假跟踪或错过目标而导致度量更高,它也会提供信息。注意,峰值是在第50个时间步长附近错过的目标分量。这个峰值表示P1丢失几个步骤时的事件。在缺失目标分量中第80个时间步长的峰值表示轨迹交换时的事件。在偏离和重新分配之间的延迟导致错过目标和假轨道组件。

轨道转换分量的峰值表示不同的事件。第一个峰值解释了从未分配到分配的真理的转换。第二个峰值解释了P2轨道的切换。第3和第4个峰值捕获了真值P1未被分配,然后分别被分配到另一个轨道。最后两个高峰解释了真相被取消和重新分配的原因。

与OSPA类似,GOSPA也不提供每条轨道和真相的详细信息。GOSPA的信息可通过其组件获得。如名称所示,较高的错过目标分量表示目标没有被跟踪,较高的假跟踪分量表示存在假跟踪。较高的切换惩罚指的是建立、曲目互换和曲目丢失等事件。组件的细分包括错过的目标和假航迹有助于修改跟踪器的正确参数。例如,如果正在创建虚假轨道,一个典型的解决方案是尝试增加轨道确认的阈值。

总结

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

参考文献

schuhacher, 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第二十届信息融合国际会议(Fusion).IEEE 2017。

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

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

[5] Rahmathullah, Abu Sajana, Ángel F. García-Fernández和Lennart Svensson。用于评估多目标跟踪算法的有限轨迹集空间上的度量。arXiv预印本arXiv: 1605.01177(2016).