gatherLabelData

Задайте источники сигнала, пометьте определения, и ROI и данные о метке сцены

Описание

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. 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. gTruth введите содержит groundTruthMultisignal объекты, от которых должны быть собраны эти данные.

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

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

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

  • labelType.Rectangle — Прямоугольные метки ROI

  • labelType.Cuboid — ROI кубоида помечает (облака точек)

  • labelType.ProjectedCuboid — Спроектированные метки ROI кубоида (изображения и видеоданные)

  • labelType.Line — Метки ROI линии

  • labelType.PixelLabel — Пиксельные метки ROI

  • labelType.Polygon — Пиксельные метки ROI

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

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

Демонстрационный фактор раньше подпроизводил данные о метке в виде положительного целого числа. Демонстрационный фактор K включает каждый Kth сигнализируют о системе координат. Увеличьте демонстрационный фактор, чтобы исключить избыточные системы координат из сигналов с высокими частотами дискретизации, такими как видео.

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

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

свернуть все

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

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

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

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

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

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

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

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

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

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

Маркируйте TypeФормат устройства хранения данных для меток в каждой метке времени
labelType.Rectangle

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

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

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

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

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

labelType.Cuboid

M- 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- 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- 1 вектор из массивов ячеек, где M количество меток в системе координат. Каждый массив ячеек содержит N- 2 числовых матрицы формы [x1 y1; x2 y2; ... ; xN yN] для N точки в ломаной линии.

labelType.PixelLabel

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

labelType.Polygon

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

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

Маркируйте Data Format

Считайте массив ячеек данных о метке собранным при помощи 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};
labelData выход является 3 2 массивом ячеек таблиц. Каждая строка массива ячеек содержит данные о метке для одного из groundTruthMultisignal объекты. Первый столбец содержит данные о метке для видеосигнала, video_front_camera. Второй столбец содержит данные о метке для сигнала последовательности облака точек, lidarData. Этот рисунок показывает labelData cellArray.

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

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

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

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

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

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

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

Ограничения

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

Введенный в R2020a