exponenta event banner

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);

Загрузить a 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 - Метки окупаемости инвестиций в прямоугольник

  • labelType.Cuboid - Метки кубовидной окупаемости инвестиций (облака точек)

  • labelType.ProjectedCuboid - Проекционные кубовидные метки окупаемости инвестиций (изображения и видеоданные)

  • labelType.Line - Метки окупаемости инвестиций в линии

  • labelType.PixelLabel - пиксельные метки окупаемости инвестиций

  • labelType.Polygon - пиксельные метки окупаемости инвестиций

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

Для сбора данных меток для сцен необходимо указать labelTypes в качестве labelType.Scene скаляр перечисления. Нельзя указать другие типы меток с помощью labelType.Scene.

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

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

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

свернуть все

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

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

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

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

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

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

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

  • tbl(t,l) содержит данные метки, собранные для lВ-й этикетке на tвосьмая временная метка.

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

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

Тип меткиФормат хранения для меток на каждой отметке времени
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 для любого приложения labeler необходимо использовать одноканальную матрицу меток, где значения имеют тип uint8. Можно преобразовать 3-канальную матрицу данных пиксельной метки в одноканальную матрицу меток программным способом для использования с приложениями для создания меток.

labelType.Polygon

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

На этом рисунке показана таблица данных метки для видеосигнала в третьем 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-й сигнал signalNames который находится в mth groundTruthMultisignal объект gTruth.

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

Ограничения

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

Представлен в R2020a