Введение в метрики отслеживания

При разработке системы отслеживания мультиобъекта важно разработать метод оценки ее эффективности с учетом имеющихся основных истин. Эта основная истина обычно доступна из среды симуляции или с помощью таких методов, как экстракция основной истины с помощью ручной или автоматической маркировки записанных данных. Хотя можно качественно оценить алгоритм отслеживания с помощью инструментов визуализации, подход обычно не масштабируемый. Этот пример представляет различные инструменты количественного анализа в Sensor Fusion and Tracking Toolbox™ для оценки эффективности трекера. Вы также будете использовать некоторые общие события, такие как ложные треки, отслеживать свопы и т.д., с которыми сталкиваются при отслеживании нескольких объектов, чтобы понять сильные стороны и ограничения этих инструментов.

Назначение и метрики ошибок

Общий рабочий процесс оценки мультиобъекта трекера при наличии основной истины можно разделить на 2 основных шага. Во-первых, треки присваиваются истинам, используя алгоритм назначения. Во-вторых, используя вычисленное назначение в качестве входа, вычисляют точность оценки состояния для каждой дорожки. На каждом шаге могут быть получены некоторые ключевые метрики для эффективности трекера. В Sensor Fusion and Tracking Toolbox™ метрики, соответствующие этим двум шагам, называются метриками присвоения и метриками ошибки соответственно.

Метрики назначения оценивают характеристики трекера, возникающие из-за неправильного назначения данных датчика трекам из-за неоднозначности, пропущенных целей или наличия ложных предупреждений. Неправильное назначение данных о датчике может привести к таким событиям, как обмен дорожками между целями, создание избыточных дорожек для цели, падение истинной целевой дорожки и создание ложной дорожки. С другой стороны, метрики ошибки обеспечивают оценку точности оценки состояния или уровня объекта трекера. Даже когда трекер хорошо работает при назначении, неточности на уровне дорожки могут произойти из-за шума в измерениях, а также неточностей в моделировании модели движения цели и модели измерения датчика.

Определения треков и истин

Метрики назначения используют закрытый жадный подход ближайшего соседа, который позволяет назначать дорожки многие к одному, что означает, что несколько дорожек могут быть назначены одной и той же истине. На каждом шаге метрики направлены на присвоение треков истинам с учетом их назначения на предыдущем временном шаге. Это помогает метрикам присвоения классифицировать треки по определенным категориям на основе текущих и предыдущих назначений. Категории, используемые метриками назначения для треков, описаны на изображениях ниже.

Метрики присвоений также представляют истины как различные категории «целей» с точки зрения трекера. Это помогает метрикам назначения записывать события, такие как установление трека и пропуск. События установления и пропуска показаны на изображении ниже.

Путем классификации треков и истин по нескольким категориям, метрики назначения выводят кумулятивный анализ эффективности трекера. Метрики также предоставляют подробную информацию о информации о назначении для каждой истины и отслеживания. Кроме того, результаты назначения на каждом шаге из метрики назначения могут также использоваться для оценки метрики ошибки. Метрики ошибки выводят кумулятивный анализ точности трекера в оценке состояния. Подобно метрикам назначения, метрики ошибки также предоставляют подробную информацию для каждой дорожки и истинности.

Далее вы узнаете, как использовать присвоение и метрики ошибок в MATLAB.

Вычисление и анализ метрик

Чтобы использовать метрики назначения, вы создаете trackAssignmentMetric Системные object™. Вы также задаете свойства объекта, используя пары "имя-значение", чтобы сконфигурировать метрику для различных приложений. В этом примере вы задаете присвоение и расстояние расхождения как абсолютную ошибку в положении между дорожкой и истиной. Вы также задаете пороги расстояния для назначения и расхождения дорожки.

assignmentMetrics = trackAssignmentMetrics(...
    'AssignmentDistance','posabserr',...
    'DivergenceDistance','posabserr',...
    'DivergenceThreshold',1,...
    'AssignmentThreshold',0.85)
assignmentMetrics = 
  trackAssignmentMetrics with properties:

    DistanceFunctionFormat: 'built-in'
               MotionModel: 'constvel'
       AssignmentThreshold: 0.8500
       DivergenceThreshold: 1
        AssignmentDistance: 'posabserr'
        DivergenceDistance: 'posabserr'

Чтобы использовать метрики ошибки, вы создаете trackErrorMetrics Системный объект. Поскольку пар "имя-значение" не задано, используются значения по умолчанию. В этом примере цели считаются отслеживаемыми с помощью модели постоянной скорости.

errorMetrics = trackErrorMetrics
errorMetrics = 
  trackErrorMetrics with properties:

    ErrorFunctionFormat: 'built-in'
            MotionModel: 'constvel'

Метрики назначения и ошибки управляются моделируемыми треками и истинами с помощью класса helper, helperMetricEvaluationScenarios. Объект этого класса выводит список треков и истин на каждом временном шаге.

trackTruthSimulator = helperMetricEvaluationScenarios;

Вы также визуализируете результаты назначения и метрики ошибок с помощью вспомогательного класса с именем helperMetricEvaluationDisplay. Эти вспомогательные классы включены вместе с примером в ту же рабочую папку, что и этот скрипт.

display = helperMetricEvaluationDisplay(...
    'PlotTrackClassification',true,...
    'PlotTruthClassification',true,...
    'PlotTrackErrors',false,...
    'PlotTruthErrors',false,...
    'PlotAssignments',true,...
    'RecordGIF',true,...
    'ErrorToPlot','posRMS');

Вы генерируете список треков и истин в каждый раз и запускаете присвоение и метрики ошибок, используя следующий рабочий процесс.

% Time stamps at which the metrics are updated
timeStamps = 0:0.1:10;
n = numel(timeStamps);

% Initialization of recorded variables
posRMSE = zeros(n,1);
velRMSE = zeros(n,1);
posANEES = zeros(n,1);
velANEES = zeros(n,1);
truthError = cell(n,1);
trackError = cell(n,1);

% Loop over time stamps
for i = 1 : n
    % Current time
    time = timeStamps(i);
    
    % Generate tracks and truths using simulation
    [tracks, truths] = trackTruthSimulator(time);
    
    % You provide the tracks and truths as input to the assignment metrics.
    % This outputs a cumulative summary from all the tracks and the truths.
    [trackAssignmentSummary(i), truthAssignmentSummary(i)] = assignmentMetrics(tracks, truths); %#ok<SAGROW> 
    
    % For detailed assignment information about each track, you use the
    % trackMetricsTable method.
    trackTable = trackMetricsTable(assignmentMetrics);
    
    % Similarly, for detailed assignment information about each truth, you
    % use the truthMetricsTable method.
    truthTable = truthMetricsTable(assignmentMetrics);
    
    % For running error metrics, you obtain the current assignment of
    % tracks to truths using the currentAssignment method.
    [assignedTrackIDs, assignedTruthIDs] = currentAssignment(assignmentMetrics);
    
    % The current assignment information as well as the list of tracks and
    % truths at the current time can then be passed as an input to the
    % error metrics.
    [posRMSE(i),velRMSE(i),posANEES(i),velANEES(i)] = errorMetrics(tracks, assignedTrackIDs, truths, assignedTruthIDs);
    
    % For detailed error information about each record truth and track, you
    % use the cumulative metric methods on the error metrics.
    trackError{i} = cumulativeTrackMetrics(errorMetrics);
    truthError{i} = cumulativeTruthMetrics(errorMetrics);
    
    display(tracks, truths, assignedTrackIDs, assignedTruthIDs, trackTable, truthTable);
end

Анализируйте метрики назначения

Анимация ниже показывает визуальное представление метрик назначения. В начале и у P1, и у P2 не было связанных треков из-за задержки установки. Поэтому они оба были классифицированы как пропущенные цели. Вокруг X = 5 метров P1 не отслеживался в течение нескольких временных шагов. Заметьте, что метрики назначения выводят P2 как отброшенную цель в течение этого времени. Когда дорожки менялись между P1 и P2, они первоначально объявлялись расходимыми, когда они выходили из порогов расхождения. Через несколько временных шагов треки достигли заданных ворот новых истин и стали ассоциироваться с новой истиной.

Визуализация метрики для каждого трека и истины может помочь в более легком понимании различных событий. Однако он может стать подавляющим для большого количества треков и истин. Альтернативный подход состоит в том, чтобы использовать суммированный выход метрик назначения. Эти выходы обеспечивают общие сводные данные метрик назначения до текущего временного шага. Поля и значения сводных данных метрик назначения в конце симуляции показаны ниже.

disp(trackAssignmentSummary(end));
           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(end));
              TotalNumTruths: 2
            NumMissingTruths: 0
      MaxEstablishmentLength: 5
    TotalEstablishmentLength: 10
               MaxBreakCount: 2
             TotalBreakCount: 4
              MaxBreakLength: 9
            TotalBreakLength: 9

Путем захвата сводных данных назначений на каждом шаге можно также построить график совокупного анализа. Следующие графики показывают подмножество полей для сводных данных присвоения трека и истинности.

helperPlotStructArray(display,trackAssignmentSummary);

Figure contains an axes. The axes with title Assignment metrics for tracks contains 6 objects of type line. These objects represent TotalNumTracks, TotalSwapCount, TotalDivergenceCount, TotalDivergenceLength, TotalRedundancyCount, TotalRedundancyLength.

helperPlotStructArray(display,truthAssignmentSummary);

Figure contains an axes. The axes with title Assignment metrics for truths contains 4 objects of type line. These objects represent TotalNumTruths, TotalEstablishmentLength, TotalBreakCount, TotalBreakLength.

Анализируйте метрики ошибок

Подобно метрикам назначения, метрики ошибки могут также вычисляться и визуализироваться по дорожке и истине. Поля ошибки расчета для каждой дорожки и истинности в конце симуляции показаны ниже. Каждое из этих полей представляет совокупную ошибку по каждой дорожке и истине.

Ошибка расчета для каждой дорожки

disp(trackError{end});
    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{end});
    TruthID    posRMS     velRMS    posANEES    velANEES
    _______    _______    ______    ________    ________

       1       0.52259    1.3918     0.2731      1.9372 
       2       0.58988     1.259    0.34795      1.5851 

Путем записи ошибок на каждом временном шаге, вы также можете построить график ошибки по сравнению со временем для каждой дорожки и правды. Следующие графики показывают ошибку RMS в положении для каждой дорожки и истины. После удаления дорожки ошибка в ее оценке остается постоянной. Заметьте, что в первой половине симуляции ошибка в оценке T3 выше, чем у T4, потому что траектория T3 не идеально совпадала с траекторией P2. Также заметьте падение ошибки для оценки T3 в первой половине, когда она медленно сходилась к истинной позиции. Во время события track-swap. ошибка в оценке как T3, так и T4 возрастает до тех пор, пока их назначения не переключаются.

% A utility to plot the table array. 'posRMS' is the field to plot
helperPlotTableArray(display,trackError,'posRMS');

Figure contains an axes. The axes with title Estimation error for each track contains 4 objects of type line. These objects represent T1, T2, T3, T4.

Ошибка в оценке каждой истинности является просто кумуляцией ошибки расчета всех присвоенных ей треков. Когда P2 была назначена избыточная дорожка около 8-го временного шага симуляции, его ошибка расчета подскочила. Когда избыточная дорожка приблизилась к P2, ошибка уменьшается, но снова увеличивается, когда связанная с ней дорожка расходится.

helperPlotTableArray(display,truthError,'posRMS');

Figure contains an axes. The axes with title Estimation error for each truth contains 2 objects of type line. These objects represent P1, P2.

Для большого количества треков и истин можно также использовать совокупные метрики ошибок для всех назначенных треков в течение их жизненного цикла. Заметьте увеличение ошибки, когда дорожки поменялись местами (около 80-го шага). Также заметьте меньший пик вокруг 25-го временного шага, когда T1 отвлекся от назначенной ему истинной P2 и был настигнут избыточной T3 дорожки.

f = figure('Units','normalized','Position',[0.1 0.1 0.6 0.6]);
ax = axes(f);

subplot(2,2,1)
plot(posRMSE,'LineWidth',2);
xlabel('Time step');
ylabel('RMS Error in Position (m)');
grid('on');

subplot(2,2,2)
plot(velRMSE,'LineWidth',2);
xlabel('Time step');
ylabel('RMS Error in Velocity (m/s)');
grid('on');

subplot(2,2,3)
plot(posANEES,'LineWidth',2);
xlabel('Time step');
ylabel('Average Normalized Error in Position');
grid('on');

subplot(2,2,4)
plot(velANEES,'LineWidth',2);
xlabel('Time step');
ylabel('Average Normalized Error in Velocity');
grid('on');

sgtitle('Cumulative errors for all tracks','FontWeight','bold');

Figure contains 4 axes and another object of type subplottext. Axes 1 contains an object of type line. Axes 2 contains an object of type line. Axes 3 contains an object of type line. Axes 4 contains an object of type line.

Результирующие метрики как счета

Распространенным случаем использования для оценки эффективности многообъектного трекера является настройка его параметров. Это обычно делается путем объединения метрик в одно значение стоимости, которое может служить функцией для алгоритма оптимизации. Метрики присвоения и ошибки обеспечивают несколько различных показателей эффективности (MoEs) и могут быть объединены, сначала выбрав наиболее релевантные метрики, а затем выполнив взвешенную комбинацию в зависимости от приложения. Выбор правильного MoEs, а также их комбинации в один счет может оказаться сложным. В качестве альтернативы этому подходу можно использовать метрику Optimal SubPattern Assignment (OSPA) [1] и обобщенную метрику Optimal SubPattern Assignment (GOSPA) [2]. И OSPA, и GOSPA метрика оценивают эффективность трекера мультиобъекта, объединяя как назначение, так и точность оценки состояния в одно значение стоимости. Далее вы узнаете о метрике OSPA и GOSPA и рабочем процессе для вычисления этих метрик в MATLAB.

Метрика OSPA

Метрика OSPA может быть рассмотрена как статистическое расстояние между несколькими треками и истинами. Чтобы вычислить метрику OSPA, алгоритм сначала присваивает существующие треки и истины друг другу с помощью алгоритма глобального ближайшего соседа (GNN). После вычисления назначения метрика делит общее расстояние на два подкомпонента - локализацию и несоответствие кардинальности. Компонент локализации захватывает ошибки, следующие из точности оценки состояния, в то время как компонент несоответствия кардинальности захватывает эффект избыточных дорожек, ложных дорожек и пропущенных истин. Традиционная метрика OSPA не учитывает временную историю треков, то есть назначения с предыдущего шага не влияют на метрику на текущем шаге. Поэтому эффекты, подобные track-switch, не захватываются в традиционной метрике OSPA. Чтобы обойти это, был введен новый субкомпонент для OSPA, называемый компонентом «маркировки» [3]. Комбинация традиционных OSPA с компонентом «маркировки» иногда упоминается как «OSPA for Tracks» (OSPA-T) или «Labeled-OSPA» (LOSPA) [4].

Чтобы использовать метрику OSPA в MATLAB, используйте trackOSPAMetric Системный объект. Вы можете переключиться с OSPA на Labeled-OSPA путем предоставления ненулевого значения LabelingError свойство. Чтобы понять, как вычисляется каждый подкомпонент, смотрите раздел «Алгоритмы» trackOSPAMetric.

ospaMetric = trackOSPAMetric('Distance','posabserr',...
    'CutoffDistance',1,...
    'LabelingError',0.25);

Далее запускается тот же сценарий и вычисляется метрика OSPA на каждом временном шаге.

timeStamps = 0:0.1:10;
n = numel(timeStamps);

% Scene simulation
trackTruthSimulator = helperMetricEvaluationScenarios;

% Initialize variables
ospa = zeros(n,1);
locComponent = zeros(n,1);
cardComponent = zeros(n,1);
labelingComponent = zeros(n,1);

% Loop over time stamps
for i = 1:numel(timeStamps)
    time = timeStamps(i);
    
    % Track and truth
    [tracks, truths] = trackTruthSimulator(time);
    
    % Call the System object as a function and record OSPA and all 3 components
    [ospa(i),locComponent(i),cardComponent(i),labelingComponent(i)] = ospaMetric(tracks, truths);
end

Анализ метрики OSPA

figure('Units','normalized','Position',[0.1 0.1 0.6 0.6]);

subplot(2,1,1);
plot(ospa,'LineWidth',2);
xlabel('Time step');
ylabel('Cost');
title('OSPA');
grid('on');

subplot(2,1,2);
plot([locComponent cardComponent labelingComponent],'LineWidth',2);
xlabel('Time step');
ylabel('Component Cost');
title('OSPA Components');
legend('Localization','Cardinality-mismatch','Labeling');
grid('on');

Figure contains 2 axes. Axes 1 with title OSPA contains an object of type line. Axes 2 with title OSPA Components contains 3 objects of type line. These objects represent Localization, Cardinality-mismatch, Labeling.

Заметьте корреляцию между метрикой OSPA и различными событиями в сценарии. Первоначально OSPA является высоким из-за задержек с установлением. После создания OSPA остается относительно высоким из-за наличия избыточного трека. После удаления избыточной дорожки OSPA опустился до меньшего значения. Около 50-го временного шага OSPA получил значение, когда P1 истины было сброшено. Заметьте, что хотя метрика OSPA правильно захватывает все эти события, предоставляя более высокое значение, она не предоставляет более мелких подробностей о каждой истине и дорожке и точности в их оценке. Единственная информация, доступная от OSPA, - через его компоненты. Более высокий компонент локализации указывает, что назначенные дорожки не оценивают состояние истин правильно. Этот компонент локализации вычисляется с использованием того же типа расстояния, что и назначение. Компонент более высокой мощности указывает на наличие пропущенных целей и ложных или избыточных дорожек. Более высокая ошибка маркировки указывает, что дорожки помечены неправильно, что указывает, что дорожки связаны с их ближайшими доступными истинами.

Метрика GOSPA

Подход, используемый для вычисления GOSPA, аналогичен метрике OSPA. Используя немного другую математическую формулировку, метрика GOSPA дополнительно вычисляет подкомпоненты, такие как «пропущенный компонент целей» и «компонент ложных треков». Подобно традиционной OSPA, GOSPA также не учитывает временную историю треков. Однако метрика, подобная Labeled-OSPA, может быть достигнута путем добавления коммутационного компонента [5]. Коммутационный компонент захватывает эффект переключения присвоений между истинами. Каждое изменение назначения для истинности наказывается после классификации как полупереключатель или полный переключатель. Полупереключатель относится к событию, когда истина переключает назначение с дорожки на неназначение или наоборот. Полный переключатель относится к событию, когда истина переключает назначение с одной дорожки на другую.

Чтобы использовать метрику GOSPA в MATLAB, создайте trackGOSPAMetric Системный объект. Для учета переключения треков вы обеспечиваете положительное значение для SwitchingPenalty.

gospaMetric = trackGOSPAMetric('Distance','posabserr',...
    'CutoffDistance',1,...
    'SwitchingPenalty',0.25);

Далее запускается тот же сценарий и вычисляется метрика GOSPA на каждом временном шаге.

timeStamps = 0:0.1:10;
n = numel(timeStamps);
trackTruthSimulator = helperMetricEvaluationScenarios;

% Initialize variables
labeledGospa = zeros(n,1);
traditionalGospa = zeros(n,1);
locComponent = zeros(n,1);
missedTargetComponent = zeros(n,1);
falseTrackComponent = zeros(n,1);
switchingComponent = zeros(n,1);

% Loop over time stamps
for i = 1:numel(timeStamps)
    time = timeStamps(i);
    
    % Track and truth
    [tracks, truths] = trackTruthSimulator(time);
    
    % Call the System object as a function and get all 4 components
    [labeledGospa(i),traditionalGospa(i),switchingComponent(i),locComponent(i),missedTargetComponent(i),falseTrackComponent(i)] = gospaMetric(tracks, truths);
end

Анализ результатов

figure('Units','normalized','Position',[0.1 0.1 0.6 0.6]);

subplot(2,1,1);
plot(labeledGospa,'LineWidth',2);
xlabel('Time step');
ylabel('Cost');
title('GOSPA');
grid('on');

subplot(2,1,2);
plot([locComponent missedTargetComponent falseTrackComponent switchingComponent],'LineWidth',2);
xlabel('Time step');
ylabel('Component Cost');
title('GOSPA Components');
legend('Localization','Missed Target','False Track','Switching');
grid('on');

Figure contains 2 axes. Axes 1 with title GOSPA contains an object of type line. Axes 2 with title GOSPA Components contains 4 objects of type line. These objects represent Localization, Missed Target, False Track, Switching.

Заметьте, что метрика GOSPA также захватывает эффект различных событий во время сценария, аналогичного метрике OSPA. В отличие от OSPA, он также предоставляет информацию, если метрика выше из-за ложных дорожек или пропущенных целей. Заметьте, что пик пропускается целевой компонент около 50-го временного шага. Этот пик обозначает событие, когда P1 был пропущен на несколько шагов. Пик около 80-го временного шага в пропущенном целевом компоненте обозначает событие, когда дорожки меняются местами. Задержка между расхождением и переназначением привела к пропущенным целям, а также к ложным компонентам трека.

Peaks в компоненте переключения дорожек обозначают различные события. Первый пик учитывает истины, переходящие с неназначенного на назначенное. Второй пик учитывает переключение путей на P2. Третий и четвертый пики захватывают, что P1 истинности была неназначена, а затем назначена другой дорожке соответственно. Последний два peaks относятся к отмене назначения по истине и последующему переназначению.

Подобно OSPA, GOSPA также не предоставляет подробной информации о каждом треке и правде. Информация от GOSPA доступна через его компоненты. Как указано в имени, более высокий пропущенный целевой компонент обозначает, что цели не отслеживаются, а более высокий компонент ложного трека обозначает наличие ложных треков. Более высокий штраф за переключение обозначает такие события, как установление, отслеживание свопов и сброшенные дорожки. Подразделение компонентов для включения пропущенных целей и ложных треков помогает в модификации правильного параметра трекера. Для примера, если создаются ложные дорожки, типичным решением является попытка увеличить порог для подтверждения дорожки.

Сводные данные

В этом примере вы узнали о трех различных инструментах для анализа эффективности многообъектной системы отслеживания. Вы также узнали о рабочем процессе в MATLAB, чтобы использовать эти метрики. Вы также опирались на тип предоставляемой ими информации и на то, как ее можно анализировать. Инструменты, описанные в этом примере, являются гибкими и могут быть настроены для различных приложений и случаев использования. На всех инструментах доступны «встроенные» опции для определения различных типов расстояний, которые будут использоваться для метрики. Для примера абсолютная ошибка в положении или скорости или нормированная ошибка в положении или скорости. Можно также задать три различные модели движения для дорожек: постоянную скорость, постоянную скорость поворота и постоянное ускорение. Эти «встроенные» функциональности поддерживают треки в виде objectTrack и истины, сгенерированные симуляциями сценариев с использованием trackingScenario. Если формат треков и истин для вашего приложения отличается, можно предварительно обработать их, чтобы преобразовать. Это позволяет использовать всю «встроенную» функциональность метрики. Кроме того, можно задать пользовательскую функцию расстояния между дорожкой и истиной. Это позволяет вам контролировать расстояние, а также формат каждой дорожки и правды. Чтобы переключаться между пользовательскими и встроенными функциями для OSPA и GOSPA metric, задайте Distance as 'c ustom'. Чтобы переключаться между пользовательской и встроенной функциональностью для назначения и метрики ошибок, измените DistanceFunctionFormat и ErrorFunctionFormat на 'custom'для присвоения и метрики ошибки соответственно.

Ссылки

[1] Шухмахер, Доминик, Ба-Туонг Во и Ба-Нгу Во. «Допустимая метрика для оценки эффективности мультиобъектов». Транзакции IEEE по обработке сигналов 56.8 (2008): 3447-3457.

[2] Рахматулла, Абу Сахана, Анхель Ф. Гарсия-Фернандес и Леннарт Свенссон. «Обобщенная оптимальная метрика назначения подшаблонов». 2017 20-я Международная конференция по информационному слиянию (Fusion). IEEE, 2017.

[3] Ristic, Branko, et al. «Метрика для оценки эффективности многоцелевых алгоритмов отслеживания». Транзакции IEEE по обработке сигналов 59.7 (2011): 3452-3457.

[4] Малер, Рональд P. С. Усовершенствования в статистическом слиянии информации с несколькими источниками и мультитаржетами. Дом Артека, 2014.

[5] Рахматулла, Абу Сахана, Анхель Ф. Гарсия-Фернандес и Леннарт Свенссон. «Метрика на пространстве конечных множеств траекторий для оценки многоцелевых алгоритмов слежения» .arXiv preprint arXiv:1605.01177 (2016).

Для просмотра документации необходимо авторизоваться на сайте