Достоверные данные для меток 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 | Данные о метке для всех пиксельных определений метки хранятся в одном PixelLabelData столбец как категориальная матрица метки. Матрица метки должна храниться на диске как uint8 изображение. При создании ROILabelData объект с данными о пиксельных метках, имя файла образа должно быть задано как вектор символов в labelData входной параметр. Матрица метки должна содержать 1 или 3 канала. Для матрицы с 3 каналами пиксельные значения RGB представляют метку IDs. |
labelType.Custom | Метки хранятся точно так же, как они заданы в расписании. Если вы импортируете groundTruthMultisignal объект, содержащий пользовательские данные о метке в приложение Ground Truth Labeler, эти данные не импортированы в приложение. Используйте пользовательские данные при сборе данных о метке для обучения и объединении его с данными, помеченными в приложении. |
Если данные о метке 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.