gatherLabelData

Сбор синхронизированных данных о метках из основная истина

Описание

labelData = gatherLabelData(gTruth,signalNames,labelTypes) возвращает синхронизированные данные о метках, собранные из мультисигнальных данных о наземной истине, gTruth. Функция возвращает данные о метках для сигналов, заданных signalNames и типы меток, заданные в labelTypes.

пример

[labelData,timestamps] = gatherLabelData(___) дополнительно возвращает временные метки сигнала, сопоставленные с собранными данными о метках, используя аргументы из предыдущего синтаксиса.

Использование timestamps с writeFrames функция для записи связанных систем координат сигнала из groundTruthMultisignal объекты на диск. Используйте эти системы координат и связанные с ними метки в качестве обучающих данных для моделей машинного обучения или глубокого обучения.

[___] = gatherLabelData(___,'SampleFactor',sampleFactor) задает коэффициент расчета, используемый для подприбора данных о метках.

Примеры

свернуть все

Сбор данных о метках для видеосигнала и сигнала последовательности облака лидарных точек от groundTruthMultisignal объект. Запишите системы координат сигнала, сопоставленные с данными метки, на диск и визуализируйте системы координат.

Добавьте путь к папке последовательности облаков точек в путь поиска файлов MATLAB ®. Видео уже находится в пути поиска файлов MATLAB.

pcSeqDir = fullfile(toolboxdir('driving'),'drivingdata', ...
    'lidarSequence');
addpath(pcSeqDir);

Загрузка groundTruthMultisignal объект, который содержит данные метки для видео и последовательности облака точек лидара.

data = load('MultisignalGTruth.mat');
gTruth = data.gTruth;

Укажите сигналы для сбора данных о метках.

signalNames = ["video_01_city_c2s_fcw_10s" "lidarSequence"];

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

labelTypes = [labelType.Rectangle labelType.Cuboid];
[labelData,timestamps] = gatherLabelData(gTruth,signalNames,labelTypes);

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

videoLabelSample = head(labelData{1})
lidarLabelSample = head(labelData{2})
videoLabelSample =

  table

           Car       
    _________________

    {[299 213 42 33]}


lidarLabelSample =

  table

                            Car                         
    ____________________________________________________

    {[17.7444 6.7386 3.3291 3.6109 3.2214 3.5583 0 0 0]}

Запись систем координат сигнала, сопоставленных с собранными данными о метке, во временные папки с одной папкой на сигнал. Используйте временные метки, возвращенные gatherLabelData функция для указания, какие системы координат сигнала нужно записать.

outputFolder = fullfile(tempdir,["videoFrames" "lidarFrames"]);
fileNames = writeFrames(gTruth,signalNames,outputFolder,timestamps);
Writing 2 frames from the following signals:

* video_01_city_c2s_fcw_10s
* lidarSequence

Загрузите записанный видеосигнал систем координат при помощи imageDatastore объект. Загрузите связанные данные метки прямоугольника при помощи boxLabelDatastore объект.

imds = imageDatastore(fileNames{1});
blds = boxLabelDatastore(labelData{1});

Загрузите записанные системы координат сигнала лидара при помощи fileDatastore объект. Загрузка связанных данных о кубоидной метке при помощи boxLabelDatastore объект.

fds = fileDatastore(fileNames{2},'ReadFcn',@pcread);
clds = boxLabelDatastore(labelData{2});

Визуализируйте написанные видеокадры с помощью vision.VideoPlayer объект. Визуализируйте написанные системы координат лидара с помощью pcplayer объект.

videoPlayer = vision.VideoPlayer;

ptCloud = preview(fds);
ptCloudPlayer = pcplayer(ptCloud.XLimits,ptCloud.YLimits,ptCloud.ZLimits);

while hasdata(imds)
    % Read video and lidar frames.
    I = read(imds);
    ptCloud = read(fds);

    % Visualize video and lidar frames.
    videoPlayer(I);
    view(ptCloudPlayer,ptCloud);
end

Удалите путь к папке последовательности облаков точек.

rmpath(pcSeqDir);

Входные параметры

свернуть все

Мультисигнальные наземные данные истинности, заданные как groundTruthMultisignal объект или вектор groundTruthMultisignal объекты.

Каждый groundTruthMultisignal объект в gTruth должны включать все сигналы, указанные в signalNames вход.

В сложение каждый объект должен включать по крайней мере одну помеченную метку на каждое собранное определение метки. Предположим gTruth является groundTruthMultisignal объект, содержащий данные метки для одного видеосигнала с именем video_front_camera. Объект содержит отмеченный прямоугольник видимой области (ROI) метки для car определение метки, но не для truck определение метки. Если вы используете этот синтаксис для сбора меток типа Rectangle от этого объекта, затем gatherLabelData функция возвращает ошибку.

labelData = gatherLabelData(gTruth,"video_front_camera",labelType.Rectangle);

Имена сигналов, из которых можно собрать данные метки, заданные как вектор символов, строковый скаляр, массив ячеек из векторов символов или строковый вектор. Имена сигналов должны быть допустимыми именами сигналов, сохраненными во входных многосигнальных наземных данных истинности, gTruth.

Чтобы получить имена сигналов от groundTruthMultisignal объект, используйте этот синтаксис, где gTruth - имя переменной объекта:

gTruth.DataSource.SignalName

Пример: 'video_01_city_c2s_fcw_10s'

Пример: "video_01_city_c2s_fcw_10s"

Пример: {'video_01_city_c2s_fcw_10s','lidarSequence'}

Пример: ["video_01_city_c2s_fcw_10s" "lidarSequence"]

Типы меток, из которых можно собрать данные меток, заданные как labelType скаляр перечисления, labelType вектор перечисления или массив ячеек labelType перечисление скаляров и векторов. gatherLabelData функция собирает данные о метках для каждого сигнала, заданного входа signalNames и каждый groundTruthMultisignal объект, заданный как вход gTruth. Количество элементов в labelTypes должен совпадать с количеством сигналов в signalNames.

Сбор данных о метках для одного типа метки на сигнал

Чтобы собрать данные о метке для одного типа метки на сигнал, задайте labelTypes как labelType скаляр перечисления или вектор. По всем groundTruthMultisignal объекты в gTruth, gatherLabelData функция собирает labelTypes(n) пометить данные из signalName(n), где n - индекс типа метки и соответствующее имя сигнала, данные метки которого должны быть собраны. Каждая возвращенная таблица в выход labelData массив ячеек содержит данные только для одного типа метки на сигнал.

В этой выборке кода, gatherLabelData функция собирает метки типа Rectangle из видеосигнала с именем video_front_camera. Функция также собирает метки типа Cuboid из сигнала последовательности облака точек лидара, сохраненного в папке с именем lidarData. The gTruth вход содержит groundTruthMultisignal объекты, из которых должны быть собраны эти данные.

labelData = gatherLabelData(gTruth, ...
                            ["video_front_camera","lidarData"], ...
                            [labelType.Rectangle,labelType.Cuboid];

Чтобы собрать данные о метке для одного типа метки из отдельных сигналов, необходимо повторить тип метки для каждого сигнала. В этой выборке кода, gatherLabelData функция собирает метки типа Rectangle от video_left_camera и video_right_camera видеосигналы.

labelData = gatherLabelData(gTruth, ...
                            ["video_left_camera","video_right_camera"], ...
                            [labelType.Rectangle,labelType.Rectangle];

Сбор данных о метках для нескольких типов меток на сигнал

Чтобы собрать данные о метках для нескольких типов меток на сигнал, задайте labelTypes как массив ячеек из labelType перечисление скаляров и векторов. По всем groundTruthMultisignal объекты в gTruth, gatherLabelData функция собирает labelTypes{n} пометить данные из signalName(n), где n - индекс типов меток и соответствующее имя сигнала, данные о метках которого должны быть собраны. Функция группирует данные для этих типов меток в одну таблицу на сигнал в groundTruthMultisignal объект.

В этой выборке кода, gatherLabelData функция собирает метки типа Rectangle и Line от video_front_camera видеосигнал. Функция также собирает метки типа Cuboid из сигнала последовательности облака точек лидара, сохраненного в папке с именем lidarData. The gTruth вход содержит groundTruthMultisignal объекты, из которых должны быть собраны эти данные.

labelData = gatherLabelData(gTruth, ...
                            ["video_front_camera", ...
                             "lidarData"], ...
                            {[labelType.Rectangle labelType.Line], ...
                             labelType.Cuboid};

Допустимые перечисляемые типы

Можно задать один или несколько из этих перечисляемых типов.

  • labelType.Rectangle - Прямоугольник информация только для чтения меток

  • labelType.Cuboid - Кубоидные метки информация только для чтения (облака точек)

  • labelType.ProjectedCuboid - Проектируемые кубоидные метки информация только для чтения (изображения и видеоданные)

  • labelType.Line - Линейные метки информация только для чтения

  • labelType.PixelLabel - Пиксельные метки информация только для чтения

  • labelType.Polygon - Пиксельные метки информация только для чтения

  • labelType.Scene - Метки сцены

Чтобы собрать данные о метках для сцен, необходимо задать labelTypes как labelType.Scene скаляр перечисления. Вы не можете задавать какие-либо другие типы меток с labelType.Scene.

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

Пример: 'SampleFactor',5

Выходные аргументы

свернуть все

Пометьте данные, возвращенные как M-by- N массив ячеек таблиц, где:

  • M количество groundTruthMultisignal объекты в gTruth.

  • Когда labelTypes содержит информация только для чтения labelType перечисления, N количество сигналов в signalNames и количество элементов в labelTypes. В этом случае labelData{m,n} содержит таблицу данных о метках для nпервый сигнал signalNames то есть в mth groundTruthMultisignal объект gTruth. Таблица содержит данные о метках только для типов меток в n1-я позиция labelTypes.

  • Когда labelTypes содержит только labelType.Scene перечисление, N равно 1. В этом случае labelData{m} содержит таблицу данных меток сцен по всем сигналам в mth groundTruthMultisignal объект gTruth.

Для заданной таблицы данных о метках tbl, таблица имеет размер T-by- L, где:

  • T - количество временных меток в сигнале, для которого существуют данные о метке.

  • L количество определений меток типов, собранных для этого сигнала.

  • tbl(t,l) содержит данные о метках, собранные для lth метка в tвторая временная метка.

Если один из сигналов не имеет данных о метке во временной метке, то соответствующая таблица данных о метке не содержит строку для этой временной метки.

Для каждой камеры таблицы формат возвращаемых данных о метке зависит от типа метки.

Тип меткиФормат памяти для меток в каждой временной метке
labelType.Rectangle

M-by-4 числовая матрица вида [x, y, w, h], где:

  • M - количество меток в системе координат.

  • x и y задайте верхний левый угол прямоугольника.

  • w задает ширину прямоугольника, которая является его длиной вдоль оси x.

  • h задает высоту прямоугольника, которая является его длиной вдоль оси y.

labelType.Cuboid

M-by-9 числовая матрица со строками вида [xctr, yctr, zctr, xlen, ylen, zlen, xrot, yrot, zrot], где:

  • M - количество меток в системе координат.

  • xctr, yctr, и zctr укажите центр кубоида.

  • xlen, ylen, и zlen задайте длину кубоида вдоль оси x, y оси и z оси, соответственно, до применения вращения.

  • xrot, yrot, и zrot задайте углы поворота для кубоида вдоль оси x, y оси и z оси, соответственно. Эти углы являются положительными по часовой стрелке при взгляде в прямом направлении их соответствующих осей.

Рисунок показывает, как эти значения определяют положение кубоида.

labelType.ProjectedCuboid

M-by-8 вектор вида [x1, y1, w1, h1, x2, y2, w2, h2], где:

  • M - количество меток в системе координат.

  • x1, y1 задает x y координаты для верхнего левого положения передней грани проектируемого кубоида

  • w1 задает ширину передней грани проективного кубоида.

  • h1 задает высоту передней грани проективного кубоида.

  • x2, y2 задает x y координаты для верхнего левого положения задней грани проектируемого кубоида.

  • w2 задает ширину задней грани проективного кубоида.

  • h2 задает высоту задней грани спроецированного кубоида.

Рисунок показывает, как эти значения определяют положение кубоида.

Labeled projected cuboid

labelType.Line

M-by-1 вектор массивов ячеек, где M - количество меток в системе координат. Каждый массив ячеек содержит N-by-2 числовая матрица вида [x1 y1; x2 y2; ... ; xN yN] для N точки в полилинии.

labelType.PixelLabel

Данные о метке для всех определений пиксельных меток хранятся в одной M -by-1 PixelLabelData столбец для M изображений или систем координат. Каждый элемент содержит имя файла для пиксельного изображения с меткой. Изображение метки пикселя описывает метку или метки, содержащиеся в соответствующем изображении. Метки могут быть описаны как матрица метки 1- или 3- канала. Как использовать PixelLabelData с любым из приложений labeler необходимо использовать одноканальную матрицу меток, где значения имеют тип uint8. Можно преобразовать 3-канальную матрицу данных о пиксельных метках в одноканальную матрицу метки программно для использования с приложениями labeler.

labelType.Polygon

M-by-1 вектор массивов ячеек, где M количество меток. Каждый массив ячеек содержит N-by-2 числовая матрица вида [x1 y1; x2 y2; ... ; xN yN] для N точки в многоугольнике.

labelType.SceneЛогический 1 (true), если применяется метка сцены, в противном случае логическая 0 (false)

Маркируйте формат данных

Рассмотрим массив ячеек из данных о метках, собранных с помощью gatherLabelData функция. Функция собирает метки из трех groundTruthMultisignal объекты с именами переменных gTruth1, gTruth2, и gTruth3.

  • Для видеосигнала с именем video_front_cameraфункция собирает метки типа Rectangle и Line.

  • Для лидарного сигнала последовательности облака точек, сохраненного в папке с именем lidarDataфункция собирает метки типа Cuboid.

Этот код показывает вызов на gatherLabelData функция.

labelData = gatherLabelData([gTruth1 gTruth2 gTruth3], ...
                            ["video_front_camera", ...
                             "lidarData"], ...
                            {[labelType.Rectangle labelType.Line], ...
                             labelType.Cuboid};
The labelData выводится массив ячеек 3 на 2 из таблиц. Каждая строка массива ячеек содержит данные о метке для одного из groundTruthMultisignal объекты. Первый столбец содержит данные о метке для видеосигнала, video_front_camera. Второй столбец содержит данные метки для сигнала последовательности облака точек, lidarData. Этот рисунок показывает labelData массив ячеек.

Этот рисунок показывает таблицу данных о метках для видеосигнала в третьем groundTruthMultisignal объект. gatherLabelData функция собрала данные для Rectangle метка с именем car и a Line метка с именем lane. Таблица содержит данные о метке в четырех временных метках в сигнале.

Этот рисунок показывает таблицу данных о метках для сигнала лидара в третьем groundTruthMultisignal объект. gatherLabelData функция собрала данные для Cuboid метка, также именованная car. The car метка появляется в обоих типах сигналов, потому что она помечена как Rectangle метка для видеосигналов и Cuboid метка для сигналов лидара. Таблица содержит данные о метке в четырех временных метках в сигнале.

Сигнальные метки времени, возвращенные как M-by- N массив ячеек из duration векторы, где:

  • M количество groundTruthMultisignal объекты в gTruth.

  • N количество сигналов в signalNames.

  • labelData{m,n} содержит временные метки для nпервый сигнал signalNames то есть в mth groundTruthMultisignal объект gTruth.

Если вы собираете данные о метке из нескольких сигналов, временные метки сигнала синхронизируются с временными метками первого сигнала, заданными signalNames.

Ограничения

  • gatherLabelData функция не собирает данные меток для подметок или атрибутов. Если метка содержит подметки или атрибуты, в labelData выход, функция возвращает положение только родительской метки.

Введенный в R2020a