主要内容

boxLabelDatastore

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

自从R2019b

描述

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

中读取边界框标签数据boxLabelDatastore对象,则使用函数。这个对象函数返回一个有两列或三列的单元格数组。可以创建一个数据存储boxLabelDatastore对象ImageDatastore对象。结合对象的功能。使用组合数据存储来使用训练函数训练对象检测器,例如trainYOLOv2ObjectDetectortrainFasterRCNNObjectDetector.您可以使用对象函数访问和管理数据存储中的数据。要修改ReadSize属性时,可以使用点表示法。

创建

描述

例子

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

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

输入参数

全部展开

标记的边界框数据,指定为具有一个或多个列的表。每个表对应一组标签。边界框可以是轴对齐的矩形、旋转的矩形或长方体。下表描述了边界框的格式。

边界框 描述
Axis-aligned矩形

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

  • 是与轴对齐的矩形的个数。

  • xy指定矩形的左上角。

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

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

旋转的矩形

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

  • 是旋转矩形的个数。

  • xctryctr指定矩形的中心。

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

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

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

旋转-30度的正方形矩形。

长方体

在空间坐标中定义为an-乘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分类向量或字符串向量,其中表示标签的数量。

创建一个基本真值表,使用图片标志贴标签机视频要从生成的地面真值创建训练数据表,请使用objectDetectorTrainingData函数。

数据类型:表格

块位置,指定为blockLocationSet对象。方法创建该对象balanceBoxLabels函数。

属性

全部展开

该属性是只读的。

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

边界框描述

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

方法调用时要读取的标签数据的最大行数函数,指定为正整数。

对象的功能

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

例子

全部折叠

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

Data = load()“vehicleTrainingData.mat”);trainingData = data.vehicleTrainingData;

创建一个boxLabelDatastore对象,使用训练数据中的标记边界框。

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

估计锚盒使用boxLabelDatastore对象。

numAnchors = 5;anchorBoxes = estimateAnchorBoxes(blds, nummanchors);

指定图像大小。

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)

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

Data = load()“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));

结合imageDatastoreboxLabelDatastore对象。

CDS = combine(imds,blds);

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

读(cds)
ans =1×3单元阵列{128x228x3 uint8} {[126 78 20 16]} {[vehicle]}

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

负载(“vehicleTrainingData.mat”);

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

负载(“stopSignsAndCars.mat”);

根据训练数据创建基础真值表。

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

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

blds = boxLabelDatastore(vehiclesTbl,stopSignsTbl);

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

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

结合imageDatastoreboxLabelDatastore对象。

CDS = combine(imds,blds);

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

读(cds)
ans =1×3单元阵列{128x228x3 uint8} {[126 78 20 16]} {[vehicle]}

版本历史

在R2019b中引入

全部展开