主要内容

estimateAnchorBoxes

评估深度学习对象检测器的锚盒

描述

例子

anchorBoxes= estimateAnchorBoxes (trainingDatanumAnchors使用训练数据估计指定的锚盒数量。

anchorBoxesmeanIoU) = estimateAnchorBoxes (trainingDatanumAnchors另外返回每个集群中锚框的平均交于并(IoU)值。

例子

全部折叠

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

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

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

建筑物= boxLabelDatastore (trainingData(:, 2:结束));

估计锚盒使用boxLabelDatastore对象。

numAnchors = 5;anchorBoxes = estimateAnchorBoxes(建筑物、numAnchors);

指定图像大小。

inputImageSize = (128228 3);

指定要检测的类的数量。

numClasses = 1;

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

网络= 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)

锚盒是深度学习对象检测器的重要参数,如Faster R-CNN和YOLO v2。锚盒的形状、规模和数量影响着探测器的效率和准确性。

有关更多信息,请参见用于对象检测的锚盒

负荷训练数据

加载车辆数据集,其中包含295张图片和相关的盒子标签。

data =负载(“vehicleTrainingData.mat”);vehicleDataset = data.vehicleTrainingData;

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

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

显示数据集摘要。

总结(vehicleDataset)
变量:imageFilename: 295×1 cell数组的字符向量车辆:295×1 cell

可视化地面真理盒分布

可视化标记框,以便更好地理解数据集中显示的对象大小范围。

将所有的地面真值框合并到一个数组中。

allBoxes = vertcat (vehicleDataset.vehicle {:});

绘制盒子面积和盒子长宽比。

aspectRatio = allBoxes(:,3) ./ allBoxes(:,4);面积= prod (allBoxes (:, 3:4), 2);图散射(区域,aspectRatio)包含(“箱区”) ylabel (”“纵横比(宽/高));标题(“盒子面积与纵横比”

图中显示了几组大小和形状相似的对象,然而,由于这些组是分散的,手动选择锚盒是困难的。估计锚框的更好方法是使用聚类算法,该算法可以使用有意义的指标将类似的框分组在一起。

估计锚箱

估计锚盒从训练数据使用estimateAnchorBoxes函数,该函数使用IoU距离度量。

基于IoU的距离度量不受盒子大小的影响,不像欧几里得距离度量,当盒子大小增加[1]时,欧几里得距离度量会产生更大的误差。此外,使用IoU距离度量可以将长宽比和大小相似的框聚在一起,从而得到适合数据的锚框估计值。

创建一个boxLabelDatastore使用车辆数据集中的地面真值箱。如果训练目标检测器的预处理步骤涉及调整图像的大小,请使用变换bboxresize控件中的边框大小boxLabelDatastore在估计锚盒之前。

trainingData = boxLabelDatastore (vehicleDataset(:, 2:结束));

选择锚的数量和估计锚盒使用estimateAnchorBoxes函数。

numAnchors =5;[anchorBoxes, meanIoU] = estimateAnchorBoxes (trainingData numAnchors);anchorBoxes
anchorBoxes =5×221 27 87 116 67 92 43 61 86 105

选择锚的数量是另一个训练超参数,需要使用经验分析仔细选择。判断估计锚盒的一个质量度量是每个聚类中锚盒的平均IoU。的estimateAnchorBoxes函数使用一个k-表示使用IoU距离度量来计算重叠的聚类算法,1 -bboxOverlapRatio(allBoxes boxInCluster)

meanIoU
meanIoU = 0.8411

IoU的平均值大于0.5保证了锚框与训练数据中的框很好地重叠。增加锚的数量可以改善平均欠条的措施。然而,在目标检测器中使用更多锚盒也会增加计算成本,导致过拟合,导致检测器性能较差。

浏览一系列值并绘制平均IoU与锚框数量的对比图,以衡量锚框数量与平均IoU之间的权衡。

maxNumAnchors = 15;meanIoU = 0 ([maxNumAnchors, 1]);主播= cell(maxNumAnchors, 1);k = 1: maxNumAnchors估计锚和平均欠条。[anchorBoxes {k}, meanIoU (k)] = estimateAnchorBoxes (trainingData k);结束图的阴谋(1:maxNumAnchors meanIoU,“o”) ylabel (“意思是借据”)包含(“锚”)标题(“锚点数目与平均欠条数目”

使用两个锚箱会导致平均IoU值大于0.65,而使用超过7个锚箱只会对平均IoU值产生边际改善。考虑到这些结果,下一步是使用2到6之间的值来训练和评估多个目标探测器。这种经验分析有助于确定满足应用程序性能需求(如检测速度或准确性)所需的锚盒数量。

输入参数

全部折叠

训练数据,指定为返回具有两列或多列的单元格数组或表的数据存储。包围框必须在单元格数组中- × 4矩阵的格式[xy宽度高度].

该数据存储必须是以下数据存储之一:

  • 一个boxLabelDatastore格式[盒子标签

  • 图片盒子标签} -一个组合的数据存储。例如,使用结合洛桑国际管理发展学院建筑物).

函数返回的锚框数量,指定为整数。

输出参数

全部折叠

锚盒,返回为N2矩阵,N是锚框的数量,每个条目都有格式[高度宽度].使用numAnchors指定锚盒的数量。

距离度量,作为标量值返回。距离度量提供每个簇中锚定框的联合平均交点(IoU)值。为确保锚箱与培训数据中的锚箱重叠良好meanIoU值必须大于0.5。的k-表示聚类算法使用IoU距离度量,通过方程计算重叠1-bboxOverlapRatiobox1, box2).

介绍了R2019b