主要内容

使用多边形标记对象

图片标志贴标签机视频,地面真相标签(自动驾驶工具箱)应用程序允许您使用各种交互式绘图工具来标记图像。使用这些标签为训练算法创建地面真相数据。

关于多边形标签

您可以在图像或视频帧中的对象周围绘制多边形形状,并使用多边形标记对象。您还可以将多边形标签彼此关联,使您能够将不同的对象标记为同一类的实例。导出的多边形标签保留跨标签定义的多边形的堆栈顺序,并与所需的ground truth格式兼容:

  • 语义分割网络使用H——- - - - - -W标签的矩阵。使用多边形维护标签创建或重新排序的顺序(使用发送回而且放在前面选项)。语义分割需要一个带有标签的图像像素图。要做到这一点,必须将标签平放(失去标签的分层顺序)。想象一下,将所有多边形标签的不透明度调到最大,并保留所有填充区域作为标签矩阵。

  • 实例分割网络使用H——- - - - - -W——- - - - - -NumObjects面具堆栈。

  • 的原始多边形NumObjects-by-1单元格数组,其中每个单元格包含2点。

在本例中,加载图像、创建多边形ROI标签、修改与绘制多边形相关的首选项,并对导出的地面真相对象数据进行后处理,以用于实例分割和语义分割训练网络。

加载未标记的数据

您可以从一个文件夹加载存储在数据存储中的图像,或者加载以前的标签程序会话。图像必须可读imread。在本例中,您正在加载包含许多车辆的数据,包括船只、油轮和飞机。

以编程方式加载数据

使用此过程以编程方式从数据存储加载图像:

  1. 从映像文件夹创建一个数据存储。例如,如果您有一个名为“stopSignImages”的文件夹,其中包含图像,您可以使用这段代码创建图像的数据存储。

    imageFolder = fullfile(toolboxdir(“愿景”),“visiondata”“stopSignImages”);imds = imageDatastore(imageFolder);

  2. 将数据存储加载到图片标志

    imageLabeler (imd);

或者,您也可以将图像的文件夹直接载入图片标志

imageFolder = fullfile(toolboxdir(“愿景”),“visiondata”“stopSignImages”);imageLabeler (imageFolder);

直接从应用程序加载数据

点击进口加载图像或单击公开会议打开已保存的会话。

创建多边形标签

要遵循使用帆船、油轮和飞机图像的这些步骤,请打开图片标志然后导入"boats.png图片来自视觉/ visiondata文件夹中。

  1. ROI标签窗格中,单击标签

  2. 选择多边形标签类型并命名帆船

  3. 您还可以选择通过单击预览颜色来更改标签颜色。

  4. 点击好吧

    帆船标签出现在ROI标签窗格。

  5. 重复步骤1至4创建油轮标签和飞机标签。您可以通过左键单击并向上或向下拖动标签来移动列表中的标签。

绘制多边形ROI标签

  1. 选择帆船标签,然后使用鼠标,在每个帆船周围绘制一个多边形ROI。

  2. 选择油轮标记并在油轮周围绘制多边形ROI。

  3. 选择飞机标记并绘制一个围绕飞机的多边形ROI。

    帆船,油轮,飞机都标上了多边形

修改多边形参数设置和堆叠顺序

有许多方法可以修改ROI标签的外观。您还可以设置堆垛顺序用于导出的地面真相文件。堆叠顺序表示一个对象是在另一个对象的前面还是后面,为了解析重叠区域以构建语义标签映射,堆叠顺序是必需的。

在接下来的步骤中,您将修改标签的颜色、设置标签名称在标记时的外观、修改标签的不透明度、查看一类标签的实例以及设置堆叠顺序。

  1. 若要修改飞机ROI标签的颜色,右键单击飞机标签在ROI标签窗格并选择编辑标签。单击颜色预览并选择一种颜色。

  2. 若要在贴标时显示ROI标签名称,选择总是显示ROI标签菜单中的视图部分。

  3. 要增加标签的不透明度,请使用多边形的滑块。标签不透明度部分。增加不透明度有助于识别场景中哪些标签在其他标签的前面或后面。

    所有对象都是完全不透明的

  4. 油轮标签在帆船标签的前面,但它应该在后面。该位置影响导出的ground truth中的堆叠顺序。要修改堆叠顺序,右键单击场景中的油轮ROI标签并选择发送回后台

    油轮出现在场景中的帆船后面

  5. 要查看ROI标签的实例,请选择通过实例ROI的颜色中的下拉菜单。视图部分。

    每个物体都有不同的颜色

  6. 单击,导出标记的地面真相数据出口并选择到工作空间。命名地面真相数据MAT文件gTruth

用于实例或语义分割网络的后处理导出标签

您可以使用导出的、标记的ground truth来训练实例分割网络或语义分割网络。

按照以下步骤处理多边形数据以进行语义分割或实例分割。

一步 描述 过程

1 -显示地面真实数据

导出的ground truth对象包含五个对象和三个定义的数据。

输入gTruth在MATLAB中®命令行。

>> gTruth gTruth = groundTruth with properties: DataSource: [1×1 groundTruthDataSource] LabelDefinitions: [3×5 table] LabelData: [1×3 table]

2 -获取多边形数据

LabelData属性按标签名称对数据进行分组。的帆船标签单元格数组包含三个元素油轮单元格数组包含一个元素,而飞机单元格数组包含一个元素。

类型gTruth。标签Data

> > gTruth。LabelDataans = 1×3 table Sailboat Tanker Airplane __________ __________ __________ {3×1 cell} {1×1 cell} {1×1 cell}

3 -堆叠地面真理多边形数据

帆船和油轮重叠在一起。这个信息(像素的相对顺序)在这种格式中丢失了。

使用gatherLabelData对象函数按标签类型对数据进行分组。这将生成一个包含五个对象的堆叠表。

使用gatherLabelData属性并存储输出。

>> out = gatherLabelData(gTruth,[LabelType . polygon],'GroupLabelData','LabelType') out = 1×1 cell array {1×1 table}

显示表的内容。

> >{1}。多边形Data ans = 1×1 cell array {5×2 cell}

4 -按深度顺序查看地面真相数据

的内容PolygonData,表示堆叠多边形的顺序。订单和标签订单是一致的,包括你发到后面的油轮。

现在标签被压平了,底部是油轮,上面的帆船覆盖了油轮重叠的地方。

显示多边形数据。

> >{1}。多边形Data{1} ans = 5×2 cell array {12×2 double} {'Airplane'} { 6×2 double} {'Sailboat'} { 7×2 double} {'Sailboat'} {13×2 double} {'Sailboat'} { 9×2 double} {'Tanker' }

转换多边形数据进行语义分割

一步 描述 过程

1 -创建标签ID映射

创建一个关联类名和类id的映射。

classNames ={'飞机','帆船','油轮'};classIds = 1: number (classNames);labelIDMap = containers.Map(classNames,classIds);

2 -提取多边形

从输出结构中提取多边形坐标和多边形标签。

polyons = out{1}.PolygonData{1}(:,1);polygonLabels = out{1}.PolygonData{1}(:,2);

3 -将多边形压扁成语义分割图

将标签名称转换为id。

将多边形坐标转换为语义分割图。

polygonLabelIDs = cellfun(@(x)labelIDMap(x),polygonLabels);imageSize = [645 916];% size(boats_im) outputIm = poly2label(polyons,polygonLabelIDs,imageSize);

转换多边形数据实例分割

一步 描述 过程

为实例分割预分配掩码堆栈

预分配蒙版堆栈,高度和宽度等于图像尺寸,通道深度与多边形数量相同。
polyons = out{1}.PolygonData{1}(:,1);numPolygons =大小(多边形,1);imageSize = [645 916];% size(boats_im) maskStack = false([imageSize(1:2) numpolyons]);

将多边形转换为实例蒙版

将每个多边形转换为单独的蒙版,并将其插入到蒙版堆栈中。

for i = 1:numPolygons maskStack(:,:,i) = poly2mask(polyons {i}(:,1),…多边形{我}(:,2),图象尺寸(1)图象尺寸(2));结束

另请参阅

应用程序

功能

对象

相关的话题