主要内容

gatherLabelData

从地面实况收集同步标签数据

自从R2020a

描述

labelData= gatherLabelData (gTruthsignalNameslabelTypes返回从多信号接地真值数据收集的同步标签数据,gTruth.函数返回指定信号的标签数据signalNames指定的标签类型labelTypes

例子

(labelData时间戳= gatherLabelData(___另外,使用前面语法中的参数,返回与收集到的标签数据相关联的信号时间戳。

使用时间戳writeFrames函数写入相关的信号帧groundTruthMultisignal对象到磁盘。使用这些框架和相关标签作为机器学习或深度学习模型的训练数据。

(___= gatherLabelData(___名称=值除了使用先前语法中的任何参数组合外,还使用一个或多个名称-值参数指定选项。例如,Verbose = True启用工作区环境的显示。

例子

全部折叠

为视频信号和激光雷达点云序列信号收集标签数据groundTruthMultisignal对象。将与该标签数据相关联的信号帧写入磁盘并可视化这些帧。

将点云序列文件夹路径添加到MATLAB®搜索路径中。视频中已经介绍了MATLAB搜索路径。

pcSeqDir = fullfile(toolboxdir)“开车”),“drivingdata”“lidarSequence”);目录(pcSeqDir);

加载一个groundTruthMultisignal对象,该对象包含视频和激光雷达点云序列的标签数据。

Data = load()“MultisignalGTruth.mat”);gTruth = data.gTruth;

指定从中收集标签数据的信号。

signalNames = [“video_01_city_c2s_fcw_10s”“lidarSequence”];

视频包含矩形标签,而激光雷达点云序列包含长方体标签。从视频中收集矩形标签,从激光雷达点云序列中收集长方体标签。

labelTypes = [labelType.]矩形labelType。长方体];[labelData,timestamp] = gatherLabelData(gTruth,signalNames,labelTypes);

显示来自两个信号的前八行标签数据。两个信号都包含标签。在视频中,标签绘制为矩形边界框。在激光雷达点云序列中标签绘制为一个长方体边界框。

videoLabelSample = head(labelData{2}) lidarLabelSample = head(labelData{2})
videoLabelSample =表车  _________________ {[ 299 213 42 33]} lidarLabelSample =表的车  ____________________________________________________ {[ 17.7444 6.7386 3.3291 3.6109 3.2214 3.5583 0 0 0]}

将与收集到的标签数据相关联的信号帧写入临时文件夹位置,每个信号一个文件夹。方法返回的时间戳gatherLabelData函数来指示要写入的信号帧。

outputFolder = fullfile(tempdir,[“videoFrames”“lidarFrames”]);fileNames = writeFrames(gTruth,signalNames,outputFolder,timestamp);
* video_01_city_c2s_fcw_10s * lidarSequence

加载写入的视频信号帧imageDatastore对象。控件加载关联的矩形标签数据boxLabelDatastore对象。

imds = imageDatastore(文件名{1});blds = boxLabelDatastore(labelData{1});

加载写入的激光雷达信号帧fileDatastore对象。类加载关联的长方体标签数据boxLabelDatastore对象。

fds = fileDatastore(文件名{2},“ReadFcn”, @pcread);clds = boxLabelDatastore(labelData{2});

可视化编写的视频帧使用愿景。放像机对象。可视化的书面激光雷达框架使用pcplayer对象。

videoPlayer = vision.VideoPlayer;ptCloud = preview(fds);ptCloudPlayer = pcplayer(ptCloud.XLimits,ptCloud.YLimits,ptCloud.ZLimits);hasdata (imd)%读取视频和激光雷达帧。I = read(imds);ptCloud = read(fds);可视化视频和激光雷达帧。放像机(我);视图(ptCloudPlayer ptCloud);结束

删除点云序列文件夹的路径。

rmpath (pcSeqDir);

输入参数

全部折叠

多信号接地真值数据,指定为agroundTruthMultisignal的对象或向量groundTruthMultisignal对象。

每一个groundTruthMultisignal对象gTruth必须包括?中指定的所有信号signalNames输入。

此外,每个对象必须包括每个收集到的标签定义至少一个标记的标签。假设gTruth是一个groundTruthMultisignal对象,该对象包含单个视频信号的标签数据video_front_camera.对象包含标记的矩形感兴趣区域(ROI)标签的标签定义,而不是卡车标签定义。如果使用此语法收集类型的标签矩形从这个对象,然后gatherLabelData函数返回一个错误。

labelData = gatherLabelData(gTruth,“video_front_camera”, labelType.Rectangle);

要从中收集标签数据的信号的名称,指定为字符向量、字符串标量、字符向量的单元数组或字符串向量。信号名必须是存储在输入多信号接地真值数据中的有效信号名;gTruth

获取信号名称groundTruthMultisignal对象,使用此语法,其中gTruth是对象的变量名:

gTruth.DataSource.SignalName

例子:“video_01_city_c2s_fcw_10s”

例子:“video_01_city_c2s_fcw_10s”

例子:{“video_01_city_c2s_fcw_10s”、“lidarSequence”}

例子:[" video_01_city_c2s_fcw_10s”“lidarSequence”)

要从中收集标签数据的标签类型,指定为labelType枚举标量,labelType枚举向量,或单元格数组labelType枚举标量和向量。的gatherLabelData函数为输入指定的每个信号收集标签数据signalNames和每个groundTruthMultisignal输入指定的对象gTruth.元素的个数labelTypes必须匹配信号的数量吗signalNames

为每个信号收集单个标签类型的标签数据

要为每个信号收集单个标签类型的标签数据,请指定labelTypes作为一个labelType枚举标量或向量。在所有groundTruthMultisignal对象gTruth,gatherLabelData函数集labelTypes (n)标签数据signalName (n),在那里n是要收集其标签数据的标签类型和相应信号名称的索引。输出中每个返回的表labelData单元阵列每个信号只包含一个标签类型的数据。

在这个代码示例中,gatherLabelData函数收集类型的标签矩形从视频信号命名为video_front_camera.该函数还收集类型的标签长方体从激光雷达点云序列信号存储在一个文件夹中命名lidarData.的gTruth输入包含groundTruthMultisignal要从中收集此数据的对象。

labelData = gatherLabelData(gTruth,(“video_front_camera”“lidarData”],[labelType.Rectangle, labelType.Cuboid];

要从单独的信号中收集单个标签类型的标签数据,必须为每个信号重复标签类型。在这个代码示例中,gatherLabelData函数收集类型的标签矩形video_left_cameravideo_right_camera视频信号。

labelData = gatherLabelData(gTruth,(“video_left_camera”“video_right_camera”],[labelType.Rectangle, labelType.Rectangle];

为每个信号收集多个标签类型的标签数据

要为每个信号收集多个标签类型的标签数据,请指定labelTypes的单元格数组labelType枚举标量和向量。在所有groundTruthMultisignal对象gTruth,gatherLabelData函数集labelTypes {n}标签数据signalName (n),在那里n是要收集其标签数据的标签类型和相应信号名称的索引。该函数将这些标签类型的数据分组到每个信号对应的一个表中groundTruthMultisignal对象。

在这个代码示例中,gatherLabelData函数收集类型的标签矩形video_front_camera视频信号。该函数还收集类型的标签长方体从激光雷达点云序列信号存储在一个文件夹中命名lidarData.的gTruth输入包含groundTruthMultisignal要从中收集此数据的对象。

labelData = gatherLabelData(gTruth,(“video_front_camera”“lidarData”],{[labelType。矩形labelType。线),labelType.Cuboid};

有效枚举类型

您可以指定这些枚举类型中的一个或多个。

  • labelType。矩形-矩形ROI标签

  • labelType。长方体-长方体ROI标签(点云)

  • labelType。ProjectedCuboid-投影长方体ROI标签(图像和视频数据)

  • labelType。行-线ROI标签

  • labelType。PixelLabel-像素ROI标签

  • labelType。多边形-像素ROI标签

  • labelType。场景-场景标签

要收集场景的标签数据,必须指定labelTypes随着labelType。场景枚举标量。不能指定任何其他标签类型labelType。场景

名称-值参数

指定可选的参数对为Name1 = Value1,…,以=家,在那里名字是参数名和吗价值是对应的值。名称-值参数必须出现在其他参数之后,但对的顺序无关紧要。

例子:SamplingFactor5)将子采样因子设置为5每五帧掉一次。

用于对标签数据进行子采样的样本因子,指定为正整数。的样本因子K包括每一个K信号帧。增加采样因子,从高采样率的信号(如视频)中删除冗余帧。要设置SamplingFactor对于投影长方体数据,必须指定LabelData名称-值参数labelType。ProjectedCuboid

使用采样数据来减少重复数据,例如具有相同场景和标签的图像序列。它还可以帮助减少训练时间。

对标签数据中的列进行分组,指定为“LabelName”“LabelType”

  • “LabelName”—按标签定义将标签数据分组成列。

  • “LabelType”—按标签类型将标签数据分组成列。您可以使用此选项收集标签数据,同时保留由标签类型确定的感兴趣区域(ROI)堆叠顺序。

用于指示标签数据输出中是否返回属性和子标签数据,指定为逻辑0)或真正的1).的值表示只收集与roi对应的位置值。的值真正的中的每个表LabelData包含结构体,其中包含与每个标签关联的位置、属性和子标签。

输出参数

全部折叠

标签数据,作为类型返回——- - - - - -N表的单元格数组,其中:

  • 的数量是多少?groundTruthMultisignal对象gTruth

  • labelTypes包含ROIlabelType枚举,N信号的数量在吗signalNames元素的个数labelTypes.在这种情况下,labelData {m, n}控件的标签数据表n的信号signalNames这是在thgroundTruthMultisignal的对象gTruth.表中只包含标签类型的标签数据n的位置labelTypes

  • labelTypes只包含labelType。场景枚举,N等于1.在这种情况下,labelData {m}中所有信号的场景标签数据表thgroundTruthMultisignal的对象gTruth

对于给定的标签数据表,资源描述这张桌子大小合适T——- - - - - -l,地点:

  • T信号中存在标签数据的时间戳数。

  • l为该信号收集的标签类型的标签定义的数目。

  • 台(t、l)方法收集的标签数据l这里的标签t时间戳。

如果其中一个信号在时间戳处没有标签数据,则相应的标签数据表不包含该时间戳的行。

对于表中的每个单元格,返回的标签数据格式取决于标签的类型。

标签类型 标签在每个时间戳的存储格式
labelType。矩形

- × 4形式的数字矩阵[x, y, w, h],地点:

  • 是帧中标签的个数。

  • xy指定矩形的左上角。

  • w指定矩形的宽度,即矩形沿x设在。

  • h指定矩形的高度,即矩形沿y设在。

labelType。长方体

- × 9的数字矩阵,行为[xctr, yctr, zctr, xlen, ylen, zlen, xrot, yrot, zrot],地点:

  • 是帧中标签的个数。

  • xctryctr,zctr指定长方体的中心。

  • xlenylen,zlen指定长方体沿的长度x设在,y设在,z在应用旋转之前,分别使用-轴。

  • xrotyrot,zrot指定长方体沿的旋转角度x设在,y设在,z分别设在。当从它们对应的轴的前方看时,这些角是顺时针正的。

图中显示了这些值如何确定长方体的位置。

标记了中心点、长度和旋转角度的长方体

labelType。ProjectedCuboid

- × 8向量的形式[x1, y1, w1, h1, x2, y2, w2, h2],地点:

  • 是帧中标签的个数。

  • (x1, y1)指定了xy投影长方体正面左上角位置的坐标

  • w1指定投影长方体正面的宽度。

  • h1指定投影长方体正面的高度。

  • x2, y2指定了xy投影长方体背面左上角位置的坐标。

  • w2指定投影长方体背面的宽度。

  • h2指定投影长方体背面的高度。

图中显示了这些值如何确定长方体的位置。

标记投影长方体

labelType。行

单元格数组的- × 1向量,其中是帧中标签的个数。每个单元格数组包含一个N- × 2形式的数值矩阵[(x1, y1;x2 y2;…;xN yN)N折线中的点。

labelType。PixelLabel

所有像素标签定义的标签数据都存储在一个1PixelLabelData图像或框架。每个元素包含一个像素标签图像的文件名。像素标签图像描述相应图像中包含的一个或多个标签。标签可以描述为1通道或3通道标签矩阵。使用PixelLabelData对于任何标签应用程序,您必须使用单通道标签矩阵,其中的值是类型uint8.您可以将3通道像素标签数据矩阵转换为单通道标签矩阵,以编程方式与标签应用程序一起使用。

labelType。多边形

单元格数组的- × 1向量,其中是标签的个数。每个单元格数组包含一个N- × 2形式的数值矩阵[(x1, y1;x2 y2;…;xN yN)N多边形中的点。

labelType。场景 逻辑1真正的),如果应用了场景标签。否则逻辑0

标签数据格式

方法收集标签数据的单元格数组gatherLabelData函数。该函数从三个标签中收集标签groundTruthMultisignal具有变量名的对象gTruth1gTruth2,gTruth3

  • 的视频信号video_front_camera,该函数收集类型的标签矩形

  • 对于一个激光雷达点云序列信号存储在一个名为lidarData,该函数收集类型的标签长方体

方法的调用gatherLabelData函数。

labelData = gatherLabelData([gTruth1 gTruth2 gTruth3],(“video_front_camera”“lidarData”],{[labelType。矩形labelType。线),labelType.Cuboid};
labelData输出是一个3 × 2单元格的表数组。单元格数组的每一行都包含标签数据groundTruthMultisignal对象。第一列包含视频信号的标签数据;video_front_camera.第二列包含点云序列信号的标签数据;lidarData.该图显示了labelData单元阵列。

labelData单元格数组

该图显示了第三个视频信号的标签数据表groundTruthMultisignal对象。的gatherLabelData函数为a收集数据矩形标签命名和一个标签命名车道.该表包含信号中四个时间戳的标签数据。

labelData单元阵列中视频信号的标签数据表

该图为第三节激光雷达信号的标签数据表groundTruthMultisignal对象。的gatherLabelData函数为a收集数据长方体标签,也称为.的标签出现在两种信号类型中,因为它被标记为矩形标签用于视频信号和a长方体激光雷达信号标签。该表包含信号中四个时间戳的标签数据。

labelData单元数组中点云信号的标签数据表

信号时间戳,作为——- - - - - -N单元阵列持续时间向量,地点:

  • 的数量是多少?groundTruthMultisignal对象gTruth

  • N信号的数量在吗signalNames

  • labelData {m, n}的时间戳n的信号signalNames这是在thgroundTruthMultisignal的对象gTruth

如果从多个信号中收集标签数据,则信号时间戳将与第一个信号的时间戳同步signalNames

版本历史

在R2020a中引入