ROILabelData

Достоверные данные для меток информация только для чтения

Описание

The ROILabelData объект сохраняет достоверные данные для видимой области (ROI) описаний меток для каждого сигнала в groundTruthMultisignal объект.

Создание

При экспорте groundTruthMultisignal объект из Ground Truth Labeler сеанса приложения, ROILabelData свойство экспортированного объекта сохраняет метки информации только для чтения как ROILabelData объект. Как создать ROILabelData программно используйте объект vision.labeler.labeldata.ROILabelData функция (описанная здесь).

Описание

пример

roiLabelData = vision.labeler.labeldata.ROILabelData(signalNames,labelData) создает объект, содержащий данные информации только для чтения для нескольких сигналов. Созданный объект, roiLabelData, содержит свойства с именами сигналов, перечисленными в signalNames. Эти свойства хранят соответствующие данные информации только для чтения, заданные labelData.

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

расширить все

Имена сигналов, заданные как строковые массивы. Задайте имена всех сигналов, присутствующих в groundTruthMultisignal объект, который вы создаете. Вы можете получить имена сигналов от существующего groundTruthMultisignal объект путем доступа к DataSource свойство этого объекта. Используйте эту команду и замените gTruth с именем вашего groundTruthMultisignal переменная объекта.

gTruth.DataSource.SignalName

В экспортированном groundTruthMultisignal объект, ROILabelData объект содержит свойство данных метки для каждого сигнала, даже если некоторые сигналы не имеют данных метки информация только для чтения.

Свойства созданного ROILabelData объект имеет имена, заданные как signalNames.

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

Информации только для чтения для каждого сигнала, заданные как массив ячеек из расписаний. Каждое расписание в массиве ячеек содержит данные для сигнала в соответствующей позиции signalNames вход. The ROILabelData объект сохраняет каждое расписание в свойстве, которое имеет то же имя что и этот сигнал.

Формат расписания для каждого сигнала зависит от данных от groundTruthMultisignal объект, который вы экспортировали или создаете.

Каждое расписание содержит по одному столбцу на определение метки, хранящееся в LabelDefinitions свойство groundTruthMultisignal объект. Определения меток, которые не поддерживает тип сигнала, исключены. Например, предположим, что вы задаете Line Информация только для чтения с именем 'lane'. Расписание для сигнала облака точек лидара не включает в себя lane столбец, поскольку эти сигналы не поддерживают Line Информации только для чтения. В DataSource свойство groundTruthMultisignal объект, SignalType свойство каждого источника данных приводит список допустимых типов сигналов.

Высота расписания определяется количеством временных меток в сигнале. В DataSource свойство groundTruthMultisignal объект, Timestamp свойство каждого источника данных приводит временные метки сигнала.

Для каждого определения метки все метки информация только для чтения, отмеченные в этих временных метках, объединяются в одну камеру в таблице. Рассмотрите данные информации только для чтения для видеосигнала, сохраненного в groundTruthMultisignal объект, gTruth. В каждой временной метке car содержит три метки, truck содержит одну метку и lane содержит две метки.

gTruth.ROILabelData.video_01_city_c2s_fcw_10s
ans =

  5×4 timetable

      Time           car            truck            lane    
    _________    ____________    ____________    ____________
    0 sec        {3×4 double}    {1×4 double}    {2×1 cell  }
    0.05 sec     {3×4 double}    {1×4 double}    {2×1 cell  }
    0.1 sec      {3×4 double}    {1×4 double}    {2×1 cell  }
    0.15 sec     {3×4 double}    {1×4 double}    {2×1 cell  }
    0.2 sec      {3×4 double}    {1×4 double}    {2×1 cell  }

Формат хранения данных метки информация только для чтения зависит от типа метки.

Тип меткиФормат памяти для меток в каждой временной метке
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.Custom

Метки хранятся точно так же, как они заданы в расписании. Если вы импортируете groundTruthMultisignal объект, содержащий пользовательские данные о метках в приложение Ground Truth Labeler, эти данные не импортируются в приложение. Используйте пользовательские данные при сборе данных о метках для обучения и объединения их с данными, помеченными в приложении.

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

Поле структуры меткиОписание
Position

Положения родительских меток в заданной временной метке

Формат Position зависит от типа метки. Эти форматы описаны в предыдущей таблице.

AttributeName1,...,AttributeNameN

Атрибуты родительских меток

Каждая заданная подметка имеет свое поле, где имя поля соответствует наименованию атрибута. Значение атрибута является вектором символов для List или String атрибут, числовой скаляр для Numeric атрибут или логический скаляр для Logical атрибут. Если атрибут не задан, то значение атрибута является пустым вектором.

SublabelName1,...,SublabelNameN

Подметки родительских меток

Каждая заданная подметка имеет свое поле, где имя поля соответствует наименованию подметки. Значение каждого поля подметки является структурой, содержащей данные для всех отмеченных подметок с таким именем в заданной временной метке.

Эта таблица описывает формат этой структуры подметки.

Поле структуры подметкиОписание
Position

Положения подметок в заданной временной метке

Формат Position зависит от типа метки. Эти форматы описаны в предыдущей таблице.

AttributeName1,...,AttributeNameN

Атрибуты подметок

Каждая заданная подметка имеет свое поле, где имя поля соответствует наименованию атрибута. Значение атрибута является вектором символов для List или String атрибут, числовой скаляр для Numeric атрибут или логический скаляр для Logical атрибут. Если вы оставляете атрибут неопределенным, то значение атрибута является пустым вектором.

Свойства

расширить все

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

При экспорте ROILabelData объект из Ground Truth Labeler сеанса приложения, имена свойства соответствуют именам сигналов, хранящимся в DataSource свойство экспортированного groundTruthMultisignal объект.

При создании ROILabelData объект программно, signalNames и labelData Входные параметры задайте имена свойства и значения созданного объекта.

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

signalNames = ["video_01_city_c2s_fcw_10s" "lidarSequence"];

Храните метки информация только для чтения видео, videoData, и лидарную последовательность облака точек информации только для чтения, lidarData, в массиве ячеек из расписаний, labelData. Каждое расписание содержит данные для соответствующего сигнала в signalNames.

labelData = {videoData,lidarData}
  1×2 cell array

    {204×2 timetable}    {34×1 timetable}

The ROILabelData объект, roiData, сохраняет эти данные в свойстве с соответствующим именем сигнала. Можно задать roiData в ROILabelData свойство groundTruthMultisignal объект.

roiData = vision.labeler.labeldata.ROILabelData(signalNames,labelData)
roiData = 

  ROILabelData with properties:

    video_01_city_c2s_fcw_10s: [204×2 timetable]
                lidarSequence: [34×1 timetable]

Примеры

свернуть все

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

Создайте источник данных видео из файла MP4.

sourceName = '01_city_c2s_fcw_10s.mp4';
sourceParams = [];
vidSource = vision.labeler.loading.VideoSource;
vidSource.loadSource(sourceName,sourceParams);

Создайте источник последовательности облаков точек из папки файлов данных облака точек (PCD).

pcSeqFolder = fullfile(toolboxdir('driving'),'drivingdata','lidarSequence');
addpath(pcSeqFolder)
load timestamps.mat
rmpath(pcSeqFolder)

lidarSourceData = load(fullfile(pcSeqFolder,'timestamps.mat'));

sourceName = pcSeqFolder;
sourceParams = struct;
sourceParams.Timestamps = timestamps;

pcseqSource = vision.labeler.loading.PointCloudSequenceSource;
pcseqSource.loadSource(sourceName,sourceParams);

Объедините источники сигналов в массив.

dataSource = [vidSource pcseqSource]
dataSource = 

  1x2 heterogeneous MultiSignalSource (VideoSource, PointCloudSequenceSource) array with properties:

    SourceName
    SourceParams
    SignalName
    SignalType
    Timestamp
    NumSignals

Составьте таблицу определений меток для достоверных данных при помощи labelDefinitionCreatorMultisignal объект.

  • The Car определение метки появляется дважды. Хотя Car определяется как прямоугольник, можно рисовать прямоугольники только для сигналов изображения, таких как видео. The labelDefinitionCreatorMultisignal создает дополнительную строку для лидарных сигналов облака точек. В этих типах сигналов можно рисовать Car метки только как кубоиды.

  • Определения меток не имеют описаний и не имеют назначенных цветов, поэтому Description и LabelColor столбцы пусты.

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

  • Road является определением метки пикселя, поэтому таблица включает в себя PixelLabelID столбец.

  • Никакие определения меток не имеют подметок или атрибутов, поэтому таблица не включает Hierarchy столбец для хранения такой информации.

ldc = labelDefinitionCreatorMultisignal;
addLabel(ldc,'Car','Rectangle');
addLabel(ldc,'Truck','ProjectedCuboid');
addLabel(ldc,'Lane','Line');
addLabel(ldc,'Road','PixelLabel');
addLabel(ldc,'Sunny','Scene');
labelDefs = create(ldc)
labelDefs =

  6x7 table

      Name       SignalType       LabelType        Group      Description    LabelColor    PixelLabelID
    _________    __________    _______________    ________    ___________    __________    ____________

    {'Car'  }    Image         Rectangle          {'None'}       {' '}       {0x0 char}    {0x0 double}
    {'Car'  }    PointCloud    Cuboid             {'None'}       {' '}       {0x0 char}    {0x0 double}
    {'Truck'}    Image         ProjectedCuboid    {'None'}       {' '}       {0x0 char}    {0x0 double}
    {'Lane' }    Image         Line               {'None'}       {' '}       {0x0 char}    {0x0 double}
    {'Road' }    Image         PixelLabel         {'None'}       {' '}       {0x0 char}    {[       1]}
    {'Sunny'}    Time          Scene              {'None'}       {' '}       {0x0 char}    {0x0 double}

Создайте данные информации только для чтения для первой системы координат видео.

numVideoFrames = numel(vidSource.Timestamp{1});
carData = cell(numVideoFrames,1);
laneData = cell(numVideoFrames,1);
truckData = cell(numVideoFrames,1);
carData{1} = [304 212 37 33];
laneData{1} = [70 458; 311 261];
truckData{1} = [309,215,33,24,330,211,33,24];
videoData = timetable(vidSource.Timestamp{1},carData,laneData, ...
                      'VariableNames',{'Car','Lane'});

Создайте данные метки информация только для чтения для первого облака точек в последовательности.

numPCFrames = numel(pcseqSource.Timestamp{1});
carData = cell(numPCFrames, 1);
carData{1} = [27.35 18.32 -0.11 4.25 4.75 3.45 0 0 0];
lidarData = timetable(pcseqSource.Timestamp{1},carData,'VariableNames',{'Car'});

Объедините данные метки информация только для чтения для обоих источников.

signalNames = [dataSource.SignalName];
roiData = vision.labeler.labeldata.ROILabelData(signalNames,{videoData,lidarData})
roiData = 

  ROILabelData with properties:

    video_01_city_c2s_fcw_10s: [204x2 timetable]
                lidarSequence: [34x1 timetable]

Создайте данные метки сцены для первых 10 секунд ведущей сцены.

sunnyData = seconds([0 10]);
labelNames = ["Sunny"];
sceneData = vision.labeler.labeldata.SceneLabelData(labelNames,{sunnyData})
sceneData = 

  SceneLabelData with properties:

    Sunny: [0 sec    10 sec]

Создайте объект основная истина из источников сигналов, определений меток и информаций только для чтения и меток сцены. Можно импортировать этот объект в приложение Ground Truth Labeler для ручной маркировки или запустить на нем алгоритм автоматизации маркировки. Можно также извлечь обучающие данные из этого объекта для моделей глубокого обучения с помощью gatherLabelData функция.

gTruth = groundTruthMultisignal(dataSource,labelDefs,roiData,sceneData)
gTruth = 

  groundTruthMultisignal with properties:

          DataSource: [1x2 vision.labeler.loading.MultiSignalSource]
    LabelDefinitions: [6x7 table]
        ROILabelData: [1x1 vision.labeler.labeldata.ROILabelData]
      SceneLabelData: [1x1 vision.labeler.labeldata.SceneLabelData]

См. также

Приложения

Объекты

Введенный в R2020a