При разработке многообъектной системы слежения необходимо разработать метод оценки ее эффективности на основе имеющейся достоверной информации. Эта достоверность, как правило, доступна из среды моделирования или с помощью таких методов, как извлечение истинности, используя ручную или автоматическую маркировку на записанных данных. Хотя можно качественно оценить алгоритм отслеживания с помощью инструментов визуализации, подход обычно не масштабируется. В этом примере представлены различные инструменты количественного анализа в 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'
Метрики назначения и ошибок определяются моделируемыми дорожками и истинами с помощью класса помощника, 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);
![]()
helperPlotStructArray(display,truthAssignmentSummary);
![]()
Анализ метрик ошибок
Аналогично метрикам назначения, метрики ошибок также могут быть вычислены и визуализированы по дорожке и истинности. Поля ошибки оценки для каждой дорожки и истинности в конце моделирования показаны ниже. Каждое из этих полей представляет кумулятивную ошибку по каждой дорожке и истинности.
Ошибка оценки для каждой дорожки
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
Записывая ошибки на каждом шаге времени, можно также построить график ошибок в зависимости от времени для каждой дорожки и истинности. Следующие графики показывают среднеквадратичную ошибку в позиции для каждой дорожки и истинности. После удаления дорожки ошибка в ее оценке остается постоянной. Обратите внимание, что в первой половине моделирования погрешность оценки 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');
![]()
Ошибка в оценке каждой истины является просто кумулированием ошибки оценки всех назначенных ей дорожек. Когда P2 была назначена избыточная дорожка около 8-го временного шага моделирования, его ошибка оценки подскочила. Когда избыточная дорожка приближается к P2, ошибка уменьшается, но снова увеличивается, когда связанная с ней дорожка расходится.
helperPlotTableArray(display,truthError,'posRMS');![]()
Для большого количества дорожек и истин можно также использовать кумулятивные метрики ошибок для всех назначенных дорожек в течение их жизненного цикла. Обратите внимание на увеличение ошибок при замене дорожек (около 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');
![]()
Обычным примером использования для оценки производительности многообъектного трекера является настройка его параметров. Это обычно делается путем объединения метрик в одно значение стоимости, которое может служить функцией для алгоритма оптимизации. Метрики назначения и ошибок обеспечивают несколько различных показателей эффективности (MoEs) и могут быть объединены путем выбора наиболее релевантных метрик и последующего выполнения взвешенной комбинации в зависимости от приложения. Выбор правильных МоЭС, а также их сочетание в единый балл может быть сложной задачей. В качестве альтернативы этому подходу можно использовать метрику Optimal SubPattern Assignment (OSPA) [1] и метрику Generalized Optimal SubPattern Assignment (GOSPA) [2]. Оба показателя OSPA и GOSPA оценивают производительность многообъектного трекера, комбинируя как назначение, так и точность оценки состояния в одно значение стоимости. Далее вы узнаете о метрике OSPA и GOSPA, а также о рабочем процессе вычисления этих метрик в MATLAB.
Метрика OSPA может рассматриваться как статистическое расстояние между несколькими дорожками и истинами. Чтобы вычислить метрику OSPA, алгоритм сначала назначает существующие дорожки и истины друг другу, используя алгоритм глобального ближайшего соседа (GNN). После вычисления назначения метрика делит общее расстояние на два подкомпонента - локализация и рассогласование элементов. Компонент локализации фиксирует ошибки, возникающие в результате точности оценки состояния, в то время как компонент несоответствия по кардинальности фиксирует эффект избыточных дорожек, ложных дорожек и пропущенных истин. Традиционная метрика OSPA не учитывает временную историю дорожек, т.е. назначения из предыдущего шага не влияют на метрику на текущем шаге. Поэтому эффекты, подобные переключателям дорожек, не фиксируются в традиционной метрике OSPA. Чтобы обойти это, для OSPA был введен новый подкомпонент под названием «компонент маркировки» [3]. Сочетание традиционного OSPA с компонентом «маркировки» иногда называют «OSPA for Tracks» (OSPA-T) или «Labelled-OSPA» (LOSPA) [4].
Для использования метрики OSPA в MATLAB используется trackOSPAMetric Системный объект. Можно переключиться с OSPA на Labelled-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');
![]()
Обратите внимание на корреляцию между метрикой OSPA и различными событиями в сценарии. Первоначально OSPA является высоким из-за задержки установления. После создания OSPA остается относительно высоким из-за наличия резервной дорожки. После удаления резервной дорожки OSPA опустился до меньшего значения. Примерно 50-й шаг времени OSPA получил значение, так как P1 истинности был сброшен. Обратите внимание, что хотя метрика OSPA фиксирует все эти события правильно, предоставляя более высокое значение, она не предоставляет более точных сведений о каждой истинности и дорожке и точности их оценки. Единственная информация, доступная от OSPA, - через его компоненты. Более высокий компонент локализации указывает на то, что назначенные дорожки неправильно оценивают состояние истин. Этот компонент локализации вычисляется с использованием того же типа расстояния, что и назначение. Компонент большей кардинальности указывает на наличие пропущенных целей и ложных или избыточных дорожек. Более высокая ошибка маркировки указывает на то, что дорожки помечены неправильно, что указывает на то, что дорожки связаны с их ближайшими доступными истинами.
Подход, используемый для вычисления GOSPA, аналогичен метрике OSPA. Используя несколько другую математическую формулировку, метрика GOSPA дополнительно вычисляет субкомпоненты, такие как «компонент пропущенных целей» и «компонент ложных дорожек». Подобно традиционным OSPA, GOSPA также не учитывает временную историю треков. Однако метрика, аналогичная метрике Labelled-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');
![]()
Обратите внимание, что метрика GOSPA также фиксирует влияние различных событий во время сценария, аналогичного метрике OSPA. В отличие от OSPA, он также предоставляет информацию, если метрика выше из-за ложных дорожек или пропущенных целей. Обратите внимание, что пик пропускается целевой компонент около 50-го шага времени. Этот пик обозначает событие, когда P1 было пропущено в течение нескольких шагов. Пик около 80-го шага времени в пропущенном целевом компоненте обозначает событие, когда дорожки поменялись местами. Задержка между расхождением и переназначением привела к пропущенным целям, а также к ошибочным компонентам дорожки.
Пики в компоненте переключения дорожек обозначают различные события. На первый пик приходится переключение истин с неназначенных на назначенные. На второй пик приходится переключение трасс на P2. Третий и четвертый пики фиксируют, что P1 истины был не назначен, а затем назначен другому треку соответственно. Последние два пика являются причиной отмены назначения, а затем переназначения.
Подобно OSPA, GOSPA также не предоставляет подробную информацию о каждом треке и истине. Информация из GOSPA доступна через его компоненты. Как указано в названии, более высокий пропущенный целевой компонент обозначает, что целевые объекты не отслеживаются, а более высокий компонент ложной дорожки обозначает наличие ложных дорожек. Более высокий штраф за переключение обозначает такие события, как установление, обмен дорожек и отброшенные дорожки. Разделение компонентов для включения пропущенных целей и ложных дорожек помогает изменить правильный параметр трекера. Например, если создаются ложные треки, типичным решением является попытка увеличить порог подтверждения трека.
В этом примере вы узнали о трех различных инструментах для анализа производительности многообъектной системы отслеживания. Также вы узнали о потоке операций в MATLAB для использования этих метрик. Вы также ознакомились с типом информации, которую они предоставляют, и с тем, как ее можно анализировать. Инструменты, описанные в этом примере, являются гибкими и могут быть адаптированы для различных приложений и сценариев использования. На всех инструментах имеются «встроенные» опции для указания различных типов расстояний, используемых для метрики. Например, абсолютная ошибка в положении или скорости или нормированная ошибка в положении или скорости. Можно также задать три различные модели движения для дорожек: постоянная скорость, постоянная скорость поворота и постоянное ускорение. Эти «встроенные» функции поддерживают треки в виде objectTrack и истины, генерируемые моделированием сценариев с использованием trackingScenario. Если формат треков и истин для приложения отличается, их можно предварительно обработать для преобразования. Это позволяет использовать все «встроенные» функциональные возможности метрик. Можно также задать пользовательскую функцию расстояния между дорожкой и истинностью. Это позволяет управлять расстоянием, а также форматом каждой дорожки и правдой. Для переключения между пользовательскими и встроенными функциональными возможностями OSPA и GOSPA metric укажите Distance как 'custom'. Для переключения между настраиваемыми и встроенными функциями назначения и метрики ошибок измените DistanceFunctionFormat и ErrorFunctionFormat комуcustomдля метрик назначения и ошибок соответственно.
[1] Шухмахер, Доминик, Ба-Туонг Во и Ба-Нгу Во. «Согласованная метрика для оценки производительности многообъектных фильтров». Транзакции IEEE по обработке сигналов 56.8 (2008): 3447-3457.
[2] Рахматхулла, Абу Саджана, Анхель Ф. Гарсия-Фернандес и Леннарт Свенссон. «Обобщенная оптимальная метрика назначения подшаблонов». 20-я Международная конференция по слиянию информации 2017 года (Fusion). IEEE, 2017.
[3] Ristic, Бранко, и др. «Метрика для оценки производительности алгоритмов отслеживания нескольких целей». Транзакции IEEE по обработке сигналов 59.7 (2011): 3452-3457.
[4] Малер, Рональд П.С. Достижения в объединении статистической многоисточниковой информации. Artech House, 2014.
[5] Рахматхулла, Абу Саджана, Анхель Ф. Гарсия-Фернандес и Леннарт Свенссон. «Метрика на пространстве конечных наборов траекторий для оценки алгоритмов слежения за множеством целей». arXiv препринт arXiv:1605.01177 (2016).