主要内容

boxLabelDatastore

边界框标签数据的数据存储

描述

boxLabelDatastore对象为边界框标签数据创建一个数据存储。使用此对象读取标记的包围框数据以进行对象检测。

从控件中读取包围框标签数据boxLabelDatastore对象时,使用函数。这个对象函数返回一个有两列或三列的单元格数组。类型的数据存储boxLabelDatastore对象的ImageDatastore对象使用结合对象的功能。使用组合的数据存储来使用诸如训练函数来训练对象检测器trainYOLOv2ObjectDetector而且trainFasterRCNNObjectDetector.可以使用对象函数访问和管理数据存储中的数据。修改ReadSize属性时,可以使用点表示法。

创建

描述

例子

建筑物= boxLabelDatastore (tbl1,…,tbln创建一个boxLabelDatastore对象从包含标记包围框数据的一个或多个表中获取。

建筑物= boxLabelDatastore (tbl1、……tblnbSet创建一个boxLabelDatastore对象的bigimage数据通过使用分辨率级别、块大小和块位置所指定的块位置bSet

输入参数

全部展开

带标签的包围框数据,指定为具有一列或多列的表。每个表对应一组标签。包围框可以是轴对齐的矩形、旋转的矩形或长方体。包围框的格式如下表所示。

边界框 描述
Axis-aligned矩形

在空间坐标中定义为-by-4数字矩阵,行形式为[xywh),地点:

  • 是轴对齐矩形的数量。

  • x而且y指定矩形的左上角。

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

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

旋转的矩形

在空间坐标中定义为-by-5数字矩阵,行形式为[xctryctrxlenylen偏航),地点:

  • 是旋转矩形的个数。

  • xctr而且yctr指定矩形的中心。

  • xlen指定矩形的宽度,即矩形沿x-轴旋转前。

  • ylen指定矩形的高度,即矩形沿y-轴旋转前。

  • 偏航以角度为单位指定旋转角度。围绕包围框中心的旋转是顺时针正的。

方形矩形旋转了-30度。

长方体

在空间坐标中定义为-by-9的数字矩阵,行形式为[xctryctrzctrxlenylenzlenxrotyrotzrot),地点:

  • 是长方体的个数。

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

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

  • xrotyrot,zrot指定长方体围绕的旋转角度x设在,y设在,z分别设在。的xrotyrot,zrot旋转角度以围绕长方体中心的角度为单位。每个旋转相对于相关空间轴的正方向是顺时针正的。函数计算旋转矩阵假设ZYX股票阶欧拉角[xrotyrotzrot]。

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

预计长方体

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

  • 是帧中标签的数量。

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

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

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

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

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

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

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

标记投影长方体

  • 列表:有一个或多个列的表:

    所有列都包含边界框。每一列必须是单元格向量,包含——- - - - - -N矩阵。是图像的数量和N表示单个对象类,例如stopSigncarRear,或carFront

  • 有两列的表。

    第一列包含边界框。第二列必须是单元格向量,其中包含与每个包围框对应的标签名称。单元格向量中的每个元素必须是-by-1分类向量或字符串向量,其中表示标签的数量。

要创建基本真值表,请使用图片标志贴标签机视频要根据生成的ground truth创建训练数据表,请使用objectDetectorTrainingData函数。

数据类型:表格

块位置,指定为blockLocationSet对象。属性可以创建此对象balanceBoxLabels函数。

属性

全部展开

此属性是只读的。

标记的包围框数据,指定为N的单元矩阵N图像。第一列必须是包含边界框的单元格向量。单元格中的每个元素都包含一个表示轴对齐矩形、旋转矩形或长方体的向量。第二列必须是单元格向量,其中包含与每个包围框对应的标签名称。一个-by-1分类向量表示每个标签名。

包围框说明

边界框 细胞向量 格式
Axis-aligned矩形 4对边界框 xy宽度高度
旋转的矩形 5对边界框 xcenterycenter宽度高度偏航
长方体 9的边界框 xcenterycenterzcenter宽度高度深度处方变化中rz
预计长方体 -乘8向量边界框 x1日元w1h1x2y2w2h2

对象的每次调用中要读取的标签数据的最大行数函数,指定为正整数。

对象的功能

结合 组合来自多个数据存储的数据
countEachLabel 计数出现像素或框标签
hasdata 确定是否可以从数据存储中读取数据
numpartitions 数据存储的分区数
分区 划分标签数据存储
预览 读取数据存储中的第一行数据
进步 从数据存储中读取的数据百分比
从数据存储中读取数据
readall 读取数据存储中的所有数据
重置 将数据存储重置为初始状态
洗牌 返回打乱的数据存储版本
子集 创建数据存储或文件集的子集
变换 变换数据存储
isPartitionable 确定数据存储是否可分区
isShuffleable 确定数据存储是否可洗牌

例子

全部折叠

这个例子展示了如何使用包含训练数据的表来估计锚框。第一列包含训练图像,其余列包含标记的包围框。

数据=负载(“vehicleTrainingData.mat”);trainingData = data.vehicleTrainingData;

创建一个boxLabelDatastore对象使用来自训练数据的标记包围框。

blds = boxLabelDatastore(trainingData(:,2:end));

估计锚框使用boxLabelDatastore对象。

numAnchors = 5;锚定箱= estimateAnchorBoxes(blds,numAnchors);

指定图像大小。

inputImageSize = [128,228,3];

指定要检测的类的数量。

numClasses = 1;

使用预训练的ResNet-50网络作为YOLO v2网络的基础网络。

网络= resnet50();

指定用于特征提取的网络层。您可以使用analyzeNetwork函数查看网络中的所有层名。

featureLayer =“activation_49_relu”

创建YOLO v2对象检测网络。

lgraph = yolov2Layers(inputImageSize,numClasses,anchorBoxes,network, featureLayer)
lgraph = LayerGraph with properties: Layers: [182×1 nnet.cnn.layer.Layer] Connections: [197×2 table] InputNames: {'input_1'} OutputNames: {'yolov2OutputLayer'}

使用网络分析器可视化网络。

analyzeNetwork (lgraph)

加载包含带标签的边界框的车辆类别训练数据表。

数据=负载(“vehicleTrainingData.mat”);trainingData = data.vehicleTrainingData;

将全路径添加到本地车辆数据文件夹中。

dataDir = fullfile(toolboxdir(“愿景”),“visiondata”);trainingData。imageFilename = fullfile(dataDir,trainingData.imageFilename);

创建一个imageDatastore使用表中的文件名初始化。

imds = imageDatastore(trainingData.imageFilename);

创建一个boxLabelDatastore对象使用带有标签数据的表。

blds = boxLabelDatastore(trainingData(:,2:end));

结合imageDatastore而且boxLabelDatastore对象。

CDS = combine(imds,blds);

阅读训练数据。使用对象函数返回图像、包围框和标签。

读(cds)
ans =1×3单元格数组{128x228x3 uint8}{[126 78 20 16]}{[车辆]}

加载包含带标签的边界框的车辆类别训练数据表。

负载(“vehicleTrainingData.mat”);

加载一个包含停车标志和汽车类别训练数据的表,其中包含带标签的边界框。

负载(“stopSignsAndCars.mat”);

根据训练数据创建ground truth表。

vehiclesTbl = vehicleTrainingData(:,2:end);stopSignsTbl = stopSignsAndCars(:,2:结束);

创建一个boxLabelDatastore对象使用两个表:一个表包含车辆标签数据,另一个表包含停止标志和汽车标签数据。

blds = boxLabelDatastore(vehiclesTbl,stopSignsTbl);

创建一个imageDatastore使用训练数据表中的文件名创建。

dataDir = fullfile(toolboxdir(“愿景”),“visiondata”);vehicleFiles = fullfile(dataDir,vehicleTrainingData.imageFilename);stopSignFiles = fullfile(dataDir,stopSignsAndCars.imageFilename);imds = imageDatastore([vehicleFiles;stopSignFiles]);

结合imageDatastore而且boxLabelDatastore对象。

CDS = combine(imds,blds);

阅读训练数据。使用对象函数返回图像、包围框和标签。

读(cds)
ans =1×3单元格数组{128x228x3 uint8}{[126 78 20 16]}{[车辆]}

版本历史

R2019b引入

全部展开