Достоверные данные для меток 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.Cuboid |
Рисунок показывает, как эти значения определяют положение кубоида. |
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 = 1×2 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,'Lane','Line'); addLabel(ldc,'Road','PixelLabel'); addLabel(ldc,'Sunny','Scene'); labelDefs = create(ldc)
labelDefs = 5×7 table Name SignalType LabelType Group Description LabelColor PixelLabelID _________ __________ __________ ________ ___________ __________ ____________ {'Car' } Image Rectangle {'None'} {' '} {0×0 char} {0×0 double} {'Car' } PointCloud Cuboid {'None'} {' '} {0×0 char} {0×0 double} {'Lane' } Image Line {'None'} {' '} {0×0 char} {0×0 double} {'Road' } Image PixelLabel {'None'} {' '} {0×0 char} {[ 1]} {'Sunny'} Time Scene {'None'} {' '} {0×0 char} {0×0 double}
Создайте данные о метке ROI для первой системы координат видео.
numVideoFrames = numel(vidSource.Timestamp{1}); carData = cell(numVideoFrames,1); laneData = cell(numVideoFrames,1); carData{1} = [304 212 37 33]; laneData{1} = [70 458; 311 261]; 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: [204×2 timetable] lidarSequence: [34×1 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: [1×2 vision.labeler.loading.MultiSignalSource] LabelDefinitions: [5×7 table] ROILabelData: [1×1 vision.labeler.labeldata.ROILabelData] SceneLabelData: [1×1 vision.labeler.labeldata.SceneLabelData]
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.