exponenta event banner

ROILabelData

Исходные данные истинности для меток окупаемости инвестиций

Описание

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

Создание

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

Описание

пример

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

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

развернуть все

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

gTruth.DataSource.SignalName

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

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

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

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

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

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

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

Для каждого определения метки все метки ROI, отмеченные на этой отметке времени, объединяются в одну ячейку в таблице. Рассмотрим данные метки ROI для видеосигнала, сохраненного в 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  }

Формат хранения данных метки ROI зависит от типа метки.

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

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

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

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

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

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

AttributeName1,...,AttributeNameN

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

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

SublabelName1,...,SublabelNameN

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

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

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

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

Позиции субкниг на данной отметке времени

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

AttributeName1,...,AttributeNameN

Атрибуты суббнаков

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

Свойства

развернуть все

Данные метки ROI, указанные как расписания. ROILabelData объект содержит одно свойство на сигнал, где каждое свойство содержит расписание данных метки ROI, соответствующих этому сигналу.

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

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

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

signalNames = ["video_01_city_c2s_fcw_10s" "lidarSequence"];

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

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

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

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]

Примеры

свернуть все

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

Создайте источник видеоданных из файла 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 объект.

  • Car определение метки отображается дважды. Несмотря на то, что Car определяется как прямоугольник, рисовать прямоугольники можно только для сигналов изображения, например видео. labelDefinitionCreatorMultisignal объект создает дополнительную строку для сигналов облака точек lidar. В этих типах сигналов можно рисовать 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'});

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

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]

Создайте наземный объект истинности из источников сигнала, определений меток и данных ROI и меток сцены. Этот объект можно импортировать в приложение 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