主要内容

跟踪指标简介

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

分配和错误度量

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

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

轨迹与真相

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

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

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

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

计算和分析指标

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

= 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 = helpermetricevaluationscenario;

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

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

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

更新度量的时间戳时间戳= 0:0.1:10;n = numel(时间戳);记录变量的初始化posRMSE = 0 (n,1);velRMSE = 0 (n,1);posANEES = 0 (n,1);velANEES = 0 (n,1);truthError = cell(n,1);trackError = cell(n,1);%遍历时间戳I = 1: n%当前时间时间=时间戳(i);使用模拟生成轨道和真相[tracks, truths] = trackTruthSimulator(time);您提供跟踪和真相作为分配指标的输入。。这将输出所有轨道和真相的累积摘要。。[trackAssignmentSummary(i), truthAssignmentSummary(i)] = assignmentMetrics(跟踪,真理);% #好< SAGROW >%有关每个音轨的详细作业信息,请使用trackMetricsTable方法。trackTable = trackMetricsTable(assignmentMetrics);类似地,对于每个真理的详细赋值信息,您可以%使用truthMetricsTable方法。truthTable = truthMetricsTable(assignmentMetrics);对于运行错误度量,您获得的当前赋值%使用currentAssignment方法跟踪到true。[assignedTrackIDs, assignedTruthIDs] = currentAssignment(assignmentMetrics);当前的任务信息以及曲目列表和%的真理值,然后可以作为输入传递给%错误度量。[posRMSE(i),velRMSE(i),posANEES(i),velANEES(i)] = errorMetrics(跟踪,赋值trackids,真理,赋值truthids);%有关每条记录的真相和轨迹的详细错误信息,您可以%在误差度量上使用累积度量方法。trackError{i} = cumulativeTrackMetrics(errorMetrics);truthError{i} = cumulativeTruthMetrics(errorMetrics);display(tracks, truth, assigndtrackids, assigndtruthids, trackTable, truthTable);结束

分析任务指标

下面的动画显示了分配指标的可视化表示。一开始,P1和P2由于建立延迟,都没有关联的轨道。因此,他们都被归类为未达到目标。在X = 5 m附近,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

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

helperPlotStructArray(显示、trackAssignmentSummary);

图中包含一个轴对象。带有标题为tracks的assign metrics的axes对象包含6个类型为line的对象。这些对象表示TotalNumTracks, TotalSwapCount, TotalDivergenceCount, TotalDivergenceLength, TotalRedundancyCount, TotalRedundancyLength。

helperPlotStructArray(显示、truthAssignmentSummary);

图中包含一个轴对象。标题为true的赋值度量的axes对象包含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的估计误差要高于T4,因为T3的轨迹与P2的轨迹并不完美匹配。还要注意前半部分T3估计的误差下降,因为它慢慢收敛到真实位置。在轨道交换事件期间。T3和T4的估计误差都增加了,直到他们的任务互换。

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

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

每条真理的估计误差简单来说就是所有轨道估计误差的累加分配到它。当P2在模拟的第8个时间步左右被分配到冗余轨道时,其估计误差出现跳跃。当冗余轨迹接近P2时,误差减小,但当冗余轨迹偏离P2时,误差再次增大。

helperPlotTableArray(显示、truthError“posRMS”);

图中包含一个轴对象。每个真理的估计错误包含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类型的对象。Axes对象1包含一个line类型的对象。坐标轴对象2包含一个line类型的对象。Axes对象3包含一个line类型的对象。Axes对象4包含一个line类型的对象。

将指标总结为分数

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

OSPA规

OSPA指标可以被认为是多个轨迹和真实值之间的统计距离。为了计算OSPA度量,该算法首先使用全局最近邻(GNN)算法将现有的轨道和真相相互分配。一旦分配计算完成,度量将整个距离划分为两个子组件-定位和基数不匹配。定位组件捕获由状态估计精度引起的错误,而基数不匹配组件捕获冗余轨迹、错误轨迹和遗漏真相的影响。传统的OSPA度量不考虑轨道的时间历史,即前一步的分配不会影响当前步骤的度量。因此,像轨道开关这样的影响在传统的OSPA度量中没有被捕获。为了避免这种情况,为OSPA引入了一个新的子组件,称为“标记”组件[3]。传统OSPA与“标签”组件的组合有时被称为“OSPA for Tracks”(OSPA- t)或Labelled-OSPA (LOSPA)[4]。

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

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

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

时间戳= 0:0.1:10;n = numel(时间戳);%场景模拟trackTruthSimulator = helpermetricevaluationscenario;初始化变量Ospa = 0 (n,1);locComponent = 0 (n,1);cardComponent = 0 (n,1);label component = 0 (n,1);%遍历时间戳i = 1: number (timeStamps) time = timeStamps(i);%跟踪和真相[tracks, truths] = 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);plot([locComponent cardComponent labelingComponent],“线宽”2);包含(“时间步”);ylabel (组件成本的);标题(“OSPA组件”);传奇(“定位”“Cardinality-mismatch”“标签”);网格(“上”);

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

请注意场景中OSPA度量与不同事件之间的相关性。由于建立延迟,OSPA初始值较高。建立后,由于冗余轨道的存在,OSPA仍然保持相对较高。删除冗余轨道后,OSPA值降低。在第50步左右,OSPA值随着真理P1的下降而增加。请注意,虽然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]来实现类似于Labelled-OSPA的度量。切换组件捕获了在真实值之间切换分配的效果。在被归类为半开关或全开关后,每次对真理的赋值更改都会受到惩罚。半切换指的是当真值从一个轨道切换到未分配或反之亦然时的事件。全切换是指真值从一个轨道切换到另一个轨道的事件。

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

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

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

时间戳= 0:0.1:10;n = numel(时间戳);trackTruthSimulator = helpermetricevaluationscenario;初始化变量labeledGospa = 0 (n,1);traditionalGospa = 0 (n,1);locComponent = 0 (n,1);missedTargetComponent = 0 (n,1);falseTrackComponent = 0 (n,1);switch component = 0 (n,1);%遍历时间戳i = 1: number (timeStamps) time = timeStamps(i);%跟踪和真相[tracks, truths] = 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的Axes对象1包含一个类型为line的对象。标题为GOSPA Components的Axes对象2包含4个类型为line的对象。这些对象代表定位、偏离目标、错误跟踪、切换。

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

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

与OSPA类似,GOSPA也不提供每条赛道的详细信息和真相。来自GOSPA的信息可以通过其组件获得。顾名思义,较高的未命中目标分量表示目标未被跟踪,较高的错误轨迹分量表示存在错误轨迹。更高的切换惩罚表示诸如建立、轨道交换和掉线等事件。组件的细分,以包括错过的目标和错误的轨道,有助于修改跟踪器的正确参数。例如,如果创建了错误的航迹,典型的解决方案是尝试增加航迹确认的阈值。

总结

在本例中,您学习了用于分析多目标跟踪系统性能的三种不同工具。您还学习了在MATLAB中使用这些指标的工作流程。您还了解了他们提供的信息类型以及如何分析这些信息。本例中描述的工具非常灵活,可以针对不同的应用程序和用例进行定制。所有工具上都有“内置”选项,可以指定用于度量的不同类型的距离。例如,位置或速度的绝对误差或位置或速度的归一化误差。你还可以为轨道指定三种不同的运动模型:匀速、匀速转弯和匀速加速度。这些“内置”功能支持的轨道形式金宝appobjectTrack以及通过场景模拟生成的真理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。

马勒,罗纳德PS。统计多源-多目标信息融合研究进展.Artech House, 2014年。

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