Достоверные данные для меток сцены
SceneLabelData достоверные данные объектно-ориентированной памяти для определений меток сцены заданы в groundTruthMultisignal объект.
Когда вы экспортируете groundTruthMultisignal объект от сеанса приложения Ground Truth Labeler, SceneLabelData свойство экспортируемого объекта хранит метки сцены как SceneLabelData объект. Создать SceneLabelData возразите программно, используйте vision.labeler.labeldata.SceneLabelData функция (описанный здесь).
создает объект, содержащий данные о метке сцены для нескольких сигналов. Созданный объект, sceneLabelData = vision.labeler.labeldata.SceneLabelData(labelNames,labelData)sceneLabelData, содержит свойства с именами меток сцены, перечисленными в labelNames. Эти свойства хранят соответствующие данные о метке сцены, заданные labelData.
labelNames — Имена меток сценыИмена меток сцены в виде массива строк. Задайте имена всех меток сцены, существующих в groundTruthMultisignal объект вы создаете. Можно получить имена меток сцены от существующего groundTruthMultisignal объект путем доступа к LabelDefinitions свойство того объекта. Используйте этот код и замените gTruth с именем groundTruthMultisignal переменная объекта.
isSceneLabel = gTruth.LabelDefinitions.LabelType == 'Scene';
gTruth.LabelDefinitions.Name(isSceneLabel)В экспортируемом groundTruthMultisignal объект, SceneLabelData объект содержит свойство данных метки для каждой метки сцены, даже если некоторые метки сцены не имеют данных о метке.
Свойства созданного SceneLabelData объекту задал имена labelNames.
Пример: ["sunny" "rainy" "urban" "rural"]
labelData — Данные о метке Scene для каждой меткиduration матрицыДанные о метке Scene для каждой метки в виде массива ячеек duration матрицы. Каждая матрица в массиве ячеек содержит данные для метки сцены в соответствующем положении labelNames входной параметр. SceneLabelData объектно-ориентированная память каждая матрица в свойстве, которое имеет то же имя как тот сигнал.
Каждая матрица метки сцены имеет размер N-by-2. Каждая строка в этой матрице соответствует области значений времени, для которой была применена та метка сцены. N является количеством областей значений времени. Строки в матрице имеют форму [rangeStart, rangeEnd], где rangeStart и rangeEnd задайте начало и конец области значений времени для прикладной метки сцены.
Элементы строки имеют тип duration и должен быть в области значений минимума и максимуме всех меток времени в groundTruthMultisignal объект. Если метка сцены не применяется, то задайте пустую матрицу.
Пример: seconds([0 5; 10 20]) задает duration матрица, соответствующая одной сцене, помечает в groundTruthMultisignal объект. Величина в секундах. Метка сцены была применена от 0 до 5 секунд и снова с 10 до 20 секунд через все сигналы в объекте. Задайте эту матрицу как часть массива ячеек, содержащего матрицы для дополнительных меток сцены.
SceneLabelName1,...,SceneLabelNameN — Данные о метке Scene для каждой метки (как раздельное имущество)duration матрицыДанные о метке Scene в виде duration матрицы. SceneLabelData объект содержит одно свойство на определение меток сцены, где каждое свойство содержит a duration матрица сцены помечает данные, соответствующие той метке сцены.
При экспорте SceneLabelData объект от сеанса приложения Ground Truth Labeler, имена свойства соответствуют именам меток сцены, сохраненным в LabelDefinitions свойство экспортируемого groundTruthMultisignal объект.
При создании SceneLabelData возразите программно, labelNames и labelData входные параметры задают имена свойства и значения созданного объекта.
Предположим, что вы хотите создать groundTruthMultisignal объект, содержащий метки сцены, которые описывают, является ли сцена солнечной, дождливой, городской, или сельской. Задайте метки сцены в массиве строк, labelNames.
labelNames = ["sunny" "rainy" "urban" "rural"];
Храните данные о метке для каждой метки сцены в массиве ячеек матриц, labelData. Каждая матрица содержит данные для соответствующей метки сцены в labelNames.
labelData = {sunnyData,rainyData,urbanData,ruralData} 1×4 cell array
{1×2 duration} {2×2 duration} {0×0 duration} {4×2 duration}SceneLabelData объект, sceneData, хранит эти данные в свойстве с соответствующим именем сигнала. Можно задать sceneData в SceneLabelData свойство groundTruthMultisignal объект.
sceneData = vision.labeler.labeldata.SceneLabelData(labelNames,labelData)
sceneData =
SceneLabelData with properties:
rainy: [2×2 duration]
sunny: [0 sec 10.15 sec]
rural: [4×2 duration]
urban: [0×0 duration]labelDefinitionsAtTime | Получите имена определения меток сцены в заданной метке времени |
labelDataAtTime | Получите данные о метке сцены в заданных метках времени |
Создайте эталонные данные для видеосигнала и последовательности облака точек сигнала лидара, который получает ту же ведущую сцену. Задайте источники сигнала, пометьте определения, и 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]
Создать groundTruthMultisignal объект, содержащий данные о метке ROI, но никакие данные о метке сцены, задайте SceneLabelData свойство как пустой массив. Создать этот массив, в MATLAB® командная строка, введите этот код.
sceneData = vision.labeler.labeldata.SceneLabelData.empty
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.