主要内容

estimateAnchorBoxes

用于深度学习对象探测器的锚箱

描述

例子

anchorBoxes= estimateAnchorBoxes (TrainingData.numAnchors使用培训数据估计指定的锚框。

anchorBoxesmeanIoU] = extimateanchorboxes(TrainingData.numAnchors另外返回每个集群中锚框的平均交于并(IoU)值。

例子

全部收缩

此示例显示如何使用包含培训数据的表来估算锚框。第一列包含训练图像,剩余列包含标记的边界框。

data =负载('vevicletrainingdata.mat');trainingData = data.vehicletRainingData;

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

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

估计锚盒使用boxLabelDatastore目的。

numanchors = 5;anchorboxes = extimateanchorboxes(BLD,Numanchors);

指定图像大小。

InputImagesize = [128,228,3];

指定要检测的类的数量。

numclasses = 1;

使用预先使用的Reset-50网络作为YOLO V2网络的基础网络。

网络= resnet50 ();

指定要用于特征提取的网络层。你可以使用分析函数查看网络中的所有图层名称。

FeatureLayer =.'activation_49_relu'

创建YOLO V2对象检测网络。

Lgraph = Yolov2Layers(InputImagesize,Numcrasses,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)

锚盒是深度学习对象探测器的重要参数,如更快的R-CNN和YOLO V2。锚箱的形状,缩放和数量会影响探测器的效率和准确性。

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

负载培训数据

加载车辆数据集,其中包含295个图像和关联的框标签。

data =负载('vevicletrainingdata.mat');vehicleDataset = data.vehicleTrainingData;

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

datadir = fullfile(toolboxdir(“愿景”),“visiondata”);vevicledataset.imagefilename = fullfile(datadir,vevicledataset.imagefilename);

显示数据集摘要。

摘要(车辆题目)
变量:imagefilename:295×1个字符向量阵列车辆:295×1个细胞

可视化地面真相盒分布

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

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

Allboxes = VertCAT(车辆ledledataset.vehicle {:});

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

Aspectratio = Allboxes(:,3)./ Allboxes(:,4);区域= Prod(Allboxes(:,3:4),2);图分散(区域,aspectratio)xlabel(“箱区”)ylabel(”“纵横比(宽/高));标题(“框面积与纵横比”

该图显示了几组具有相似尺寸和形状的物体,因为该组被展开,手动选择锚箱是困难的。估算锚框的更好方法是使用群集算法,可以使用有意义的指标将类似的框分组。

估算锚箱

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

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

创建一个boxLabelDatastore在车辆数据集中使用地面真相框。如果用于训练对象检测器的预处理步骤涉及调整图像的大小,请使用转变bboxresize.调整边界框中的大小boxLabelDatastore在估计锚盒之前。

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

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

Numanchors =.5;[anchorboxes,meaniou] = extimateanchorboxes(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

大于0.5的平均值可确保锚盒在训练数据中的框中重叠。增加锚点的数量可以改善平均iou测量。然而,在物体检测器中使用更多锚盒也可以增加计算成本并导致过度拟合,这导致差的检测器性能差。

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

Maxnumanchors = 15;Meaniou = Zeros([Maxnumanchors,1]);锚盒=细胞(Maxnumanchors,1);k = 1: maxNumAnchors%估计锚和平均值。[anchorBoxes {k}, meanIoU (k)] = estimateAnchorBoxes (trainingData k);结束图绘图(1:Maxnumanchors,Meaniou,“o”)ylabel(“意思是借据”)xlabel(“锚”) 标题(“锚点数目与平均欠条数目”

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

输入参数

全部收缩

培训数据,指定为数据存储,返回具有两个或多个列的单元格数组或表。边界框必须是单元格数组-4格式的矩阵[xy宽度高度]。

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

  • 一个boxLabelDatastore格式[盒子标签

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

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

输出参数

全部收缩

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

距离度量,作为标量值返回。距离度量提供每个群集中的锚框的平均交叉联合(iou)值。确保锚盒在培训数据中的盒子中均匀地重叠,meanIoU值必须大于0.5。的k- 模拟算法使用iou距离度量来计算使用等式的重叠1-bboxoverlapratiobox1,box2.)。

介绍了R2019b