这个图片标识,视频贴标机和地面真理贴标机(自动驾驶工具箱)应用程序使您能够使用各种交互式绘图工具为图像添加标签。使用这些标签为训练算法创建地面真实数据。
您可以围绕图像或视频帧中的对象绘制多边形形状,并使用多边形对对象进行标记。还可以将多边形标签相互关联,使您能够将不同的对象标记为同一类的实例。导出的多边形标签保存了多个标签定义的多边形的堆栈顺序,并与ground truth格式兼容:
语义分割网络H-借-W标签矩阵。使用多边形保持标签的创建或重新排序顺序(使用置后
和摆在前面
选项)。语义分割需要一个带有标签的图像像素图。为此,必须展平标签(丢失标签的分层顺序)。想象一下,将所有多边形标签的不透明度设置为最大,并将所有填充区域保留为标签矩阵。
使用H-借-W-借-天体掩码堆栈。
图形中的原始多边形天体-by-1单元格数组,其中每个单元格包含M2点。
在本例中,将加载图像、创建多边形ROI标签、修改与绘制多边形相关的首选项,并对导出的地面真实值对象数据进行后处理,以用于实例分割和语义分割训练网络。
您可以从文件夹中加载存储在数据存储中的图像,或加载以前的labeler会话。这些图像必须可由用户读取imread
.在本例中,加载的数据包含许多工具,包括船只、加油机和飞机。
使用此过程以编程方式从数据存储加载图像:
从图像文件夹创建数据存储。例如,如果您有一个名为“boats”的文件夹,其中包含图像,则可以使用此代码创建图像的数据存储。
imageFolder=fullfile(toolboxdir('vision')、'visiondata'、'Boots');imds=imageDatastore(imageFolder);
将数据存储加载到图片标识:
成像标签机(imds);
或者,您可以将图像文件夹直接加载到图片标识:
imageFolder=fullfile(toolboxdir('vision')、'visiondata'、'Boots');imageLabeler(imageFolder);
点击进口要加载图像或单击公开会议打开已保存的会话。
为帆船、油轮和飞机创建多边形标签。
在ROI标签在左侧的窗格中,单击标签.
选择多边形
标记类型并命名它帆船
.
(可选)可以通过单击预览颜色来更改标签颜色。
点击好吧.
这个帆船标签出现在ROI标签窗玻璃
重复步骤1到4以创建一个油轮标签和飞机标签。通过左键单击并上下拖动标签,可以在列表中移动标签。
选择帆船标记,然后使用鼠标,围绕每个帆船绘制一个多边形ROI。
选择油轮在油轮周围标记并绘制多边形ROI。
选择飞机在飞机周围标记并绘制多边形ROI。
有许多方法可以修改ROI标签的外观堆垛顺序用于导出的地面实况文件。堆叠顺序指示一个对象是在另一个对象的前面还是后面,并且是解析重叠区域以构建语义标签地图所必需的。
在接下来的步骤中,将修改标签的颜色、设置标签名称在添加标签时的外观、修改标签的不透明度、查看标签类的实例以及设置堆叠顺序。
要修改飞机ROI标签的颜色,请右键单击飞机
标签ROI标签窗格中,选择编辑标签. 单击颜色预览并选择一种颜色。
要在标记时显示ROI标签名称,请选择总是从显示ROI标签菜单看法部分
要增加标签的不透明度,请使用多边形滑动条标签不透明度部分增加不透明度有助于识别哪些标签位于场景中其他标签的前面或后面。
油轮标签在帆船标签的前面,但它应该在它的后面。该位置会影响导出地面中的堆叠顺序。要修改堆叠顺序,请右键单击场景中的油轮ROI标签,然后选择发回.
要查看ROI标签的实例,请选择举例来说
从ROI颜色中的下拉菜单看法部分
通过单击导出带标签的地面实况数据出口选择工作空间.将地面真实数据命名为MAT文件格特鲁斯
.
您可以使用导出的、带标签的地面真相来训练实例分段网络或语义分段网络。
按照以下步骤处理多边形数据以进行语义分割或实例分割。
步 | 描述 | 程序 |
---|---|---|
1-显示地面实况数据 |
导出的地面实况对象包含五个对象和三个定义的数据。 |
进来 >>gTruth gTruth=带属性的groundTruth:数据源:[1×1 groundTruthDataSource]LabelDefinitions:[3×5表]LabelData:[1×3表] |
2-获取多边形数据 |
这个唇形目属性按标签名称对数据进行分组 |
类型 >>gTruth.LabelData ans=1×3台帆船加油机{1×1单元}{1×1单元}{1×1单元} |
3-叠加地面真实多边形数据 |
帆船和油轮重叠。此信息(像素的相对顺序)在此格式中丢失。 使用 |
使用 >>out=gatherLabelData(gTruth,[labelType.Polygon],'GroupLabelData','labelType')out=1×1单元格数组{1×1表} 显示表格的内容。 > >{1}。多边形Data ans = 1×1 cell array {5×2 cell} |
4-按深度顺序查看地面实况数据 |
内容 |
显示多边形数据。 >>out{1}.PolygonData{1}ans=5×2单元阵列{12×2双}{飞机}{6×2双}{帆船}{7×2双}{帆船}{13×2双{帆船}{9×2双}{油轮} |
步 | 描述 | 程序 |
---|---|---|
1-创建标签ID映射 |
创建将类名与类ID关联的映射。 |
classNames={'planer','Sailboat','cancern'};classIds=1:numel(classNames);labelIDMap=containers.Map(classNames,classIds); |
2-提取多边形 |
从输出结构中提取多边形坐标和多边形标签。 |
多边形=out{1}.polygonda{1}(:,1);polygonLabels=out{1}.polygonda{1}(:,2); |
3-将多边形展平为语义分割贴图 |
将标签名称转换为ID。 将多边形坐标转换为语义分割贴图。 |
polygonLabelIDs=cellfun(@(x)labelIDMap(x),polygonLabels);imageSize=[645916];%大小(boats_im)outputIm=poly2label(多边形、多边形标签、图像大小); |
步 | 描述 | 程序 |
---|---|---|
为实例分割预先分配掩码堆栈 |
预先分配遮罩堆栈,使其高度和宽度等于图像尺寸,通道深度与多边形数相同。 |
多边形=out{1}.polygonda{1}(:,1);numPolygons=大小(多边形,1);imageSize=[645916];%大小(船_im)maskStack=false([imageSize(1:2)numPolygons]); |
将多边形转换为实例遮罩 |
将每个多边形转换为单独的遮罩,并将其插入遮罩堆栈。 |
for i = 1: numpolygon maskStack(:,:,i) = poly2mask(polygon {i}(:,1),…多边形{我}(:,2),图象尺寸(1)图象尺寸(2));结束 |