主要内容

balanceBoxLabels

平衡包围框标签用于对象检测

描述

例子

locationSet= balanceBoxLabels (boxLabelsblockedImagesblockSizenumObservations平衡边界框标签,boxLabels,通过对包含较少频繁类的图像块进行过采样,包含在被阻塞图像对象的集合中blockedImagesnumObservations是所需的街区位置的数目,和blockSize指定块大小。

locationSet= balanceBoxLabels (boxLabelsblockedImagesblockSizenumObservations名称,值使用名称-值参数指定所选块的其他方面。

例子

全部折叠

加载包含一个图像的框和标签的框标签数据。每个盒子的高度和宽度为[20,20]。

D =负载(“balanceBoxLabelsData.mat”);boxLabels = d.BoxLabels;

创建大小的块映像[500500]

blockedImages = blockedImage(零([500,500]));

选择每个观察的图像大小。

blockSize = [50,50];

可视化地使用直方图来识别框标签中的任何类不平衡。

blds = boxLabelDatastore(boxLabels);datasetCount = countEachLabel(blds);图;H1 =直方图(“类别”, datasetCount。标签,“BinCounts”datasetCount.Count)
h1 =带有属性的直方图:数据:[0x0 categorical]值:[1 11 11 11 11 11 1 11]NumDisplayBins: 12类别:{1x12 cell} DisplayOrder: 'manual'归一化:'count' DisplayStyle: 'bar' FaceColor: 'auto' EdgeColor:[0 0 0 0]显示所有属性

测量箱标的分布情况。如果变异系数大于1,则存在阶级不平衡。

cvBefore = std(datasetCount.Count)/mean(datasetCount.Count)
cvBefore = 1.5746

通过找到每个类的计数的平均值,乘以类的数量,选择一个观察数的启发式值。

numClasses = height(datasetCount);numObservations = mean(datasetCount.Count) * numClasses;

控制一个盒子可以切割使用的数量OverlapThreshold.使用较低的阈值将在块的边界上切割更多的对象。增加这个值可以减少对象可以在边界处被剪切的数量,代价是不平衡的框标签。

ThresholdValue = 0.5;

平衡boxLabels使用balanceBoxLabels函数。

locationSet = balanceBoxLabels(boxLabels,blockedImages,blockSize,...numObservations,“OverlapThreshold”, ThresholdValue);
[==================================================] 100%厉螨 [==================================================] 100%的运行时间:就是估计剩余时间:就是平衡箱标签完成。

计算图像块中包含的标签。

bldsBalanced = boxLabelDatastore(boxLabels,locationSet);balancedDatasetCount = countEachLabel(bldsBalanced);

将另一个直方图覆盖在原始标签计数上,以查看框标签是否平衡。如果通过查看直方图,标签似乎不平衡,则增加的值numObservations

持有;balancedLabels = balancedDatasetCount.Label;balancedCount = balancedDatasetCount.Count;H2 =直方图(“类别”balancedLabels,“BinCounts”, balancedCount);标题(h2。父母,平衡类标签(OverlapThreshold:+ ThresholdValue +“)”);传奇(h2。家长,{“之前”“后”});

图中包含一个轴对象。标题为Balanced class labels (OverlapThreshold: 0.5)的坐标轴对象包含2个类别直方图类型的对象。这些对象表示之前,之后。

测量新平衡的盒标的分布情况。

cvAfter = std(balancedCount)/mean(balancedCount)
cvAfter = 0.4588

输入参数

全部折叠

标记的包围框数据,指定为具有两列的表。

  • 第一列包含边界框,必须是单元格向量。单元格向量中的每个元素包含-by-4矩阵,格式为[xy宽度高度]盒子。

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

为了从真实数据中创建一个盒子标签表,

  1. 使用图片标志贴标签机视频应用程序来标记你的基本真相。将标记的ground truth数据导出到您的工作空间。

  2. 属性创建边界框标签数据存储objectDetectorTrainingData函数。

  3. 您可以获取boxLabelsLabelData属性返回的框标签数据存储objectDetectorTrainingData, (建筑物。LabelData).

的数组指定的标记块图像blockedImage包含像素标签图像的对象。

读取数据的块大小,指定为正整数的两元素行向量,[numrowsnumcols].第一个元素指定块中的行数。第二个元素指定列数。

要返回的块位置数,指定为正整数。

名称-值参数

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

在R2021a之前,使用逗号分隔每个名称和值,并将其括起来的名字在报价。

例子:OverlapThreshold',' 1 '

数组中每个图像的分辨率级别blockedImage对象,指定为正整数标量或B-by-1的正整数向量,其中B数组的长度是blockedImage对象。

重叠阈值,指定为范围[0,1]中的正标量。当边界框和裁剪窗口之间的重叠大于阈值时,控件中的框boxLabels输入的图像被剪切到窗口边框的块上。当重叠量小于阈值时,丢弃盒。当您降低阈值时,对象的一部分可能会被丢弃。若要减少可以在边界处剪切对象的数量,请增加阈值。增加阈值还会导致框标签不平衡。

边界框和裁剪窗口之间的重叠量定义为。

一个 r e 一个 b b o x 一个 w n d o w / 一个 r e 一个 b b o x 一个

显示以数字或逻辑形式指定的进度信息1真正的)或0).将此属性设置为真正的显示信息。

输出参数

全部折叠

平衡框标签,返回为blockLocationSet对象。对象包含numObservations平衡块的位置数量,每个大小blockSize

算法

全部折叠

配平箱标签

为了平衡方框标签,函数对在块图像或大图中较少表示的类进行抽样。方框标签在整个数据集中进行计数,并根据每个类计数进行排序。每个图像大小被分成几个象限,基于blockSize输入值。该算法在每个象限内随机选择几个具有较少代表性的类的块。没有对象的块将被丢弃。一旦选择了指定数量的块,平衡就会停止。

检查余额

通过对比均衡前后标签数的直方图,可以判断均衡是否成功。你也可以检查变异系数值。为获得最佳结果,该值应小于原始值。有关更多信息,请参阅美国国家标准与技术研究所(NIST)网站变异系数获取更多信息。

版本历史

R2020a中引入

全部展开