主要内容

跟踪指标介绍

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

分配和错误指标

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

赋值指标评估跟踪器的特征,由于传感器数据的错误分配,由于歧义,错过了目标或误报的存在而导致传感器数据。传感器数据的错误分配可能导致事件,如在目标之间交换轨道,为目标的冗余轨道创建,丢弃真正的目标轨道和创建虚假轨道。另一方面,错误指标对跟踪器的状态估计或对象级精度提供评估。即使在追踪器在任务中做好的工作时,轨道级别的不准确性也可能由于测量中的噪声以及建模目标运动模型和传感器测量模型而异的噪声可能发生。

曲目和真理定义

分配指标使用允许多对一的轨道分配的门控贪婪最近邻接方法,这意味着可以将多个曲目分配给相同的事实。在每个步骤中,指标旨在将曲目分配给真理,同时在上一次步骤中考虑其作业。这有助于赋值指标将曲目分类为基于当前的某些类别以及先前的分配。曲目用于曲目的分配度量使用的类别在下面的图像中描述。

任务指标还代表了跟踪器的角度的不同类别的“目标”。这有助于分配指标记录轨道建立和目标中断的事件。建立和休息事件显示在下面的图像中。

通过将曲目和真相分为多个类别,分配指标输出了跟踪器性能的累积分析。指标还提供有关每个真实性和轨道的分配信息的详细信息。此外,来自分配指标的每个步骤的分配结果也可用于评估错误指标。误差度量输出跟踪器在状态估计中的准确性的累积分析。类似于赋值指标,错误指标还为每个轨道和真实提供详细信息。

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

计算和分析指标

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

AssignmentMetrics = TrackAspmentMetrics('assimmentdistance','posabserr',“DivergenceDistance”,'posabserr','divergencethreshold', 1'AssignmentThreshold',0.85)
AssignmentMetrics =具有属性的TrackAscementMetrics:TevelityFunctionFormat:'内置'MotientModel:'Constvel'AssignmentThreshold:0.8500 DiverGencethreshold:1 DisportmentDistance:'POSABSERR'分发:'POSABSERR'

要使用错误度量,您需要创建TrackErrormetrics.系统对象。由于没有提供名称值对,因此使用默认值。在该示例中,假设使用恒定速度模型跟踪目标。

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

作业和错误度量是由模拟的轨迹和使用辅助类的真相驱动的,HelpermetriceValuationscenarios.。该类的一个对象在每个时间步上输出一个轨迹和真理列表。

trackTruthSimulator = helperMetricEvaluationScenarios;

您还可以使用一个名为的helper类来可视化分配和错误度量的结果HelperMetriceValionDisplay.。这些帮助器类包含在与此脚本相同的工作文件夹中。

显示= helperMetricEvaluationDisplay ('plottrackclassification',真的,'plottrutclassification',真的,“PlotTrackErrors”,假,“PlotTruthErrors”,假,'plotassigns',真的,“RecordGIF”,真的,'errortoplot',“posRMS”);

您每次生成曲目和真相列表,并使用以下工作流运行分配和错误指标。

更新度量的时间戳时间戳= 0:0.1:10;n =元素个数(时间戳);录制变量的%初始化posrmse = zeros(n,1);velrmse =零(n,1);posanees =零(n,1);Velanees = Zeros(N,1);trutherror = cell(n,1);TrackError = Cell(n,1);%循环时间戳对于i = 1: n%当前时间时间=时间戳(我);%使用模拟生成曲目和真相[曲目,真相] = tracktrechsimulator(时间);%您将曲目和真相提供为对分配指标的输入。%这输出了所有曲目和真相的累积摘要。[trackAssignmentSummary(i), truthAssignmentSummary(i)] = assignmentMetrics(tracks, truths);%#OK 对于每个磁道的详细分配信息,请使用%轨迹旋转方法。tracktable = trackmetricstable(AssignmentMetrics);同样,有关每个真理的详细分配信息,您%使用真相rictricstable方法。真实的=真相(AssignmentMetrics);%用于运行错误度量,您将获得当前的赋值%使用当前分配方法追踪真相。[AssegatedTrackIds,AssegatedTreInds] = CurrentAssignment(AssignmentMetrics);%当前分配信息以及曲目列表和当前时间的% true可以作为输入传递到%误差度量。[posrmse(i),velrmse(i),posanees(i),velanees(i)] = errormetrics(曲目,分配的触控物,真相,赋予特征);有关每个记录真实性和曲目的详细错误信息的%%在错误指标上使用累积度量方法。trackError{我}= cumulativeTrackMetrics (errorMetrics);truthError{我}= cumulativeTruthMetrics (errorMetrics);display(tracks, truths, assignddtrackids, assignddtruthids, trackTable, truthTable);结束

分析任务指标

下面的动画显示了分配指标的可视化表示。在开始,P1和P2由于建立延迟而没有任何相关的曲目。因此,它们都被分类为错过的目标。X = 5米左右,不跟踪P1几个时间步长。请注意,在此期间,分配指标将P2输出为丢弃的目标。当在P1和P2之间交换的轨道时,它们最初被声明出不同的发散阈值。经过几个时间的步骤,轨道达到了新真理的分配门,并与新事实相关联。

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

disp (trackAssignmentSummary(结束));
TotalNumTracks:5 NumFalSetrack:1 MaxSwapCount:1 TotalSwapCount:2 MaxDiverGenceCount:1 TotalDiverGenceCount:3 MaxDiverGenceLength:7 TotalDiverGenceLength:17 MaxRedunduncyCount:1总值下载:1 MaxRedundancyLenth:34纵力
disp (truthAssignmentSummary(结束));
TotalNumtruths:2 NumMissingTruths:0 MaxEstablishmentLength:5总阶段营地最长:10 MaxBreakCount:2 TotalebreakCount:4 MaxBreakLength:9 TotalebreakLength:9

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

Helperplotstructarray(显示器,TrackAssignmummary);

helperPlotStructArray(显示、truthAssignmentSummary);

分析错误指标

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

每个轨迹的估计误差

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

每个真理的估计误差

disp (truthError{结束});
真实的POSRMS Velrms Posanees Velanees _______ _______ ______ ________ ________ 1 0.52259 1.3918 0.2731 1.9372 2 0.58988 1.259 0.34795 1.5851

通过每次步骤记录错误,您还可以为每个轨道和真相绘制错误VS时间。以下绘图显示每个轨道和真理的均方位误差。删除曲目后,其估计中的错误保持不变。请注意,在模拟的前半部分中,T3的估计误差高于T4的误差,因为T3的轨迹与P2的轨迹完全不匹配。还注意到前半部分的T3估计的误差下降,因为它慢慢融合到真实位置。在跟踪交换事件中。T3和T4估计的误差增加到其分配交换。

%一个绘制表阵列的实用程序。'posrms'是绘图的领域helperPlotTableArray(显示、trackError“posRMS”);

每个真值的估计误差是所有轨迹估计误差的累加分配到它。当P2在仿真的第8次左右分配冗余轨道时,其估计误差跳跃。随着冗余轨道接近P2,误差减小,但在其相关轨道发散时再次增加。

helperPlotTableArray(显示、truthError“posRMS”);

对于大量的轨迹和事实,您也可以使用累积误差度量所有在它们的生命周期中指定曲目。请注意当轨道交换时(接近第80步)误差的增加。也注意到当T1偏离其指定的真值P2并被冗余路径T3所超越时,在第25时间步长附近出现较小的峰值。

图(f ='单位','标准化','位置',[0.1 0.1 0.6 0.6]);斧头=轴(f);子图(2,2,1)绘图(POSRMSE,'行宽',2);Xlabel('时间步');ylabel ('位置的rms误差(m)');格('上');次要情节(2,2,2)情节(velRMSE,'行宽',2);Xlabel('时间步');ylabel (速度的均方根误差(m/s));格('上');子图(2,2,3)绘图(Posanees,'行宽',2);Xlabel('时间步');ylabel (“平均位置归一化误差”);格('上');子图(2,2,4)图(Velanees,'行宽',2);Xlabel('时间步');ylabel (“速度平均归一化误差”);格('上');sgtitle(“所有轨道的累积误差”,'fontweight',“大胆”);

将指标汇总为分数

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

OSPA指标

OSPA度量标准可以被视为多轨和真相之间的统计距离。为了计算OSPA度量标准,算法首先使用全局最近邻(GNN)算法彼此分配现有的曲目和真相。一旦计算了分配,度量标准将整体距离划分为两个子组件 - 本地化和基数 - 不匹配。本地化组件捕获状态估计精度导致的错误,而基主 - 不匹配组件捕获冗余轨道,错误曲目和错过真理的效果。传统的OSPA度量标准不考虑曲目的时间历史,即前一步的分配不会影响当前步骤的度量。因此,在传统的OSPA度量标准中不会捕获像轨道交换机等效果。为了规避这一点,引入了一个名为“标签”组件[3]的OSPA的新子组件。传统OSPA与“标记”组件的组合有时被称为“轨道OSPA”(OSPA-T)或标记为OSPA(LOSPA)[4]。

要在MATLAB中使用OSPA度量,需要使用TrackOvMetric.系统对象。通过提供一个非零值,可以从OSPA切换到已标记的OSPALabelingError.财产。要理解每个子组件是如何计算的,请参阅的“算法”一节TrackOvMetric.

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(时间戳)时间=时间戳(i);%追踪与真相[曲目,真相] = tracktrechsimulator(时间);%将系统对象作为函数调用,并记录OSPA和所有3个组件[ospa(i),loccomponent(i),cardcomponent(i),labelingcomponent(i)] =象限(曲目,真相);结束

分析OSPA指标

数字('单位','标准化','位置',[0.1 0.1 0.6 0.6]);次要情节(2,1,1);情节(ospa'行宽',2);Xlabel('时间步');ylabel (“成本”);标题(“OSPA”);格('上');次要情节(2,1,2);情节([locComponent cardComponent labelingComponent),'行宽',2);Xlabel('时间步');ylabel (组件成本的);标题(“OSPA组件”);传说('本土化','基本上 - 不匹配',“标签”);格('上');

请注意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度量标准还计算子组件,例如“错过的目标组件”和“假跟踪组件”。类似于传统的OSP,GOSPA也没有考虑到曲目的时间历史。但是,通过添加交换组件[5],可以实现类似于标记为OSPA的度量。交换组件捕获了事实之间切换分配的效果。在分类为半交换机或全交交换机后,实际的每个分配更改都受到惩罚。半交换机是指事实切换从轨道分配的事件,以未分配或反之亦然。全交交换机是指事实将分配从一个轨道转换为另一个曲目时的事件。

要在MATLAB中使用GOSPA度量标准,您可以创建trackGOSPAMetric系统对象。要考虑跟踪切换,您可以为其提供正值switchpenalty。

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(时间戳)时间=时间戳(i);%追踪与真相[曲目,真相] = tracktrechsimulator(时间);%称为函数的系统对象,并获取所有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);Xlabel('时间步');ylabel (“成本”);标题(“GOSPA”);格('上');次要情节(2,1,2);plot([loccomponent missedtargetcomponent falsetrackcomponent switchingcomponent],'行宽',2);Xlabel('时间步');ylabel (组件成本的);标题('GOSPA组件');传说('本土化','错过了目标','虚假轨道','交换');格('上');

请注意,GOSPA度量标准还捕获了在类似于OSPA度量的情况下的不同事件的效果。与OSPA相比,如果由于假曲目或错过目标,则提供信息。注意第50次左右错过了峰值目标组件。此峰值表示未丢失P1的事件几个步骤。错过的目标组件中的第80次时间段的峰值表示曲目交换时的事件。发散和重新分配之间的延迟导致错过的目标以及虚假轨道组件。

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

类似于OSPA,GOSPA也没有提供有关每个曲目和真理的详细信息。GOSPA的信息可通过其组件提供。作为名称状态,更高的未缺少的目标组件表示未被跟踪目标,更高的假轨道组件表示虚假曲目的存在。更高的交换损失表示建立,跟踪交换和丢失的曲目等事件。组件的分区包括错过的目标和错误曲目有助于修改跟踪器的正确参数。例如,如果正在创建虚假曲目,则典型的解决方案是尝试并增加跟踪确认的阈值。

总结

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

参考文献

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

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

Branko等。多目标跟踪算法的性能评估指标。信号处理上的IEEE交易59.7(2011): 3452 - 3457。

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

[5] Rahmathullah,Abu Sajana,ÁngelF.García-Fernández,以及Lennart Svensson。“用于评估多目标跟踪算法的有限轨迹空间的度量。”ARXIV预印刷arxiv:1605.01177(2016)。