Достоверные данные для меток ROI
ROILabelData
достоверные данные объектно-ориентированной памяти для видимой области (ROI) помечают определения для каждого сигнала в groundTruthMultisignal
объект.
Когда вы экспортируете groundTruthMultisignal
объект от сеанса приложения Ground Truth Labeler, ROILabelData
свойство экспортируемой объектно-ориентированной памяти ROI помечает как ROILabelData
объект. Создать ROILabelData
возразите программно, используйте vision.labeler.labeldata.ROILabelData
функция (описанный здесь).
создает объект, содержащий данные о метке ROI для нескольких сигналов. Созданный объект, roiLabelData
= vision.labeler.labeldata.ROILabelData(signalNames
,labelData
)roiLabelData
, содержит свойства с именами сигнала, перечисленными в signalNames
. Эти свойства хранят соответствующие данные о метке ROI, заданные labelData
.
signalNames
— Имена сигналаИмена сигнала в виде массива строк. Задайте имена всех сигналов, существующих в groundTruthMultisignal
объект вы создаете. Можно получить имена сигнала от существующего groundTruthMultisignal
объект путем доступа к DataSource
свойство того объекта. Используйте эту команду и замените gTruth
с именем вашего groundTruthMultisignal
переменная объекта.
gTruth.DataSource.SignalName
В экспортируемом groundTruthMultisignal
объект, ROILabelData
объект содержит свойство данных метки для каждого сигнала, даже если некоторые сигналы не имеют данных о метке ROI.
Свойства созданного ROILabelData
объекту задал имена signalNames
.
Пример: ["video_01_city_c2s_fcw_10s" "lidarSequence"]
labelData
— Данные о метке ROI для каждого сигналаДанные о метке 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 |
|
|
Рисунок показывает, как эти значения определяют положение кубоида. |
|
Рисунок показывает, как эти значения определяют положение кубоида. |
labelType.Line |
|
labelType.PixelLabel | Данные о метке для всех пиксельных определений метки хранятся в одном M-by-1 |
labelType.Polygon |
|
labelType.Custom | Метки хранятся точно так же, как они заданы в расписании. Если вы импортируете |
Если данные о метке ROI включают подметки или атрибуты, то метки в каждой метке времени должны быть заданы как структуры вместо этого. Структура включает эти поля.
Маркируйте Structure Field | Описание | ||||||
---|---|---|---|---|---|---|---|
Position | Положения родительского элемента помечают в данной метке времени Формат | ||||||
AttributeName1,...,AttributeNameN | Атрибуты родительских меток Каждая заданная подметка имеет свое собственное поле, где имя поля соответствует названию атрибута. Значение атрибута является вектором символов для | ||||||
SublabelName1,...,SublabelNameN | Подметки родительских меток Каждая заданная подметка имеет свое собственное поле, где имя поля соответствует имени подметки. Значение каждого поля подметки является структурой, содержащей данные для всех отмеченных подметок с тем именем в данной метке времени. Эта таблица описывает формат этой структуры подметки.
|
SignalName1,...,SignalNameN
— Данные о метке ROI для каждого сигнала (как раздельное имущество)Данные о метке 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]
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.