主要内容

估计锚箱

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

描述

例子

锚箱=估计锚箱(TrainingData.,努曼彻斯)使用培训数据估计指定的锚框。

[锚箱,卑鄙] = extimateanchorboxes(TrainingData.,努曼彻斯)此外,还返回每个簇中锚定框的联合平均交点(IoU)值。

例子

全部收缩

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

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

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

blds=boxLabelDatastore(培训数据(:,2:end));

使用以下公式估算锚箱:Boxlabeldata商店目的。

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,属性为:层:[182×1 nnet.cnn.layer.layer]连接:[197×2表]输入名称:{'input_1'}输出名称:{'yolov2OutputLayer'}

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

分析网络(lgraph)

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

有关更多信息,请参阅用于目标检测的锚盒.

负载培训数据

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

数据=负载('vevicletrainingdata.mat'); vehicleDataset=数据。vehicleTrainingData;

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

datadir = fullfile(toolboxdir(“愿景”),“视觉数据”);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(“纵横比(宽度/高度)”);标题(“框面积与纵横比”)

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

估算锚箱

估算锚箱,从训练数据使用估计锚箱函数,该函数使用联合上的交点(IoU)距离度量。

与欧几里德距离度量不同,基于IoU的距离度量对长方体大小是不变的,欧几里德距离度量随着长方体大小的增加而产生更大的误差[1]。此外,使用IoU距离度量将导致具有相似长宽比和大小的框聚集在一起,从而产生适合数据的锚定框估计。

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

trainingData=boxLabelDatastore(车辆数据集(:,2:end));

选择锚的数量和估计锚盒使用估计锚箱功能。

Numanchors =5.;[anchorboxes,meaniou] = extimateanchorboxes(TrainingData,Numanchors);锚箱
锚箱=5×221 27 87 116 67 92 43 61 86 105

选择锚的数量是另一个训练超参数,需要使用实证分析进行仔细选择。判断估计锚箱的一个质量指标是每个集群中锚箱的平均IoU估计锚箱函数使用K-使用IoU距离度量的均值聚类算法,使用公式计算重叠,1 -bboxOverlapRatio(所有盒子,包括盒子).

卑鄙
平均IOU=0.8411

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

扫描一系列值并绘制平均IoU与锚框数量的关系图,以测量锚数量与平均IoU之间的权衡。

Maxnumanchors = 15;Meaniou = Zeros([Maxnumanchors,1]);锚盒=细胞(Maxnumanchors,1);对于k=1:maxNumAnchors%估计锚和平均值。[anchorBoxes{k},meanIoU(k)]=估计的anchorBoxes(训练数据,k);结束图绘图(1:Maxnumanchors,Meaniou,“-o”)ylabel(“平均借据”)xlabel(“锚的数量”) 标题(“锚数量与平均IoU”)

使用两个锚箱会导致平均IoU值大于0.65,而使用7个以上锚箱只会使平均IoU值略有改善。鉴于这些结果,下一步是使用2到6之间的值来训练和评估多个目标探测器。此实证分析有助于确定满足应用程序性能要求(如检测速度或精度)所需的锚箱数量。

输入参数

全部收缩

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

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

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

输出参数

全部收缩

锚盒,返回为N-by-2矩阵,其中N是锚框的数量,每个条目都有格式[高度,宽度]。用努曼彻斯指定定位框的数量。

距离度量,作为标量值返回。距离度量提供了每个集群中锚盒的平均并交(IoU)值。为确保锚定框与训练数据中的框良好重叠卑鄙值必须大于0.5。该K- 模拟算法使用iou距离度量来计算使用等式的重叠1.-bboxOverlapRatio(box1,box2.)。

在R2019b中引入