ROILabelData

Эталонные данные для меток ROI

Описание

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

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

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

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

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

Каждое расписание содержит один столбец на определение метки, сохраненное в LabelDefinitions свойство groundTruthMultisignal объект. Пометьте определения, которые не поддерживает тип сигнала, исключены. Например, предположите, что вы задаете Line Метка ROI под названием 'lane'. Расписание для сигнала облака точек лидара не включает lane столбец, потому что эти сигналы не поддерживают Line Метки ROI. В 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 зависит от типа метки.

Маркируйте 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.Custom

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

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

Маркируйте Structure FieldОписание
Position

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

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

AttributeName1,...,AttributeNameN

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

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

SublabelName1,...,SublabelNameN

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

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

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

Подмаркируйте Structure FieldОписание
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"];

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

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

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

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

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