文档帮助中心文档
评估深度学习对象检测器的锚盒
anchorBoxes = estimateAnchorBoxes (trainingData numAnchors)
[anchorBoxes, meanIoU] = estimateAnchorBoxes (trainingData numAnchors)
例子
anchorBoxes= estimateAnchorBoxes (trainingData,numAnchors)使用训练数据估计指定的锚盒数量。
anchorBoxes= estimateAnchorBoxes (trainingData,numAnchors)
anchorBoxes
trainingData
numAnchors
[anchorBoxes,meanIoU) = estimateAnchorBoxes (trainingData,numAnchors)另外返回每个集群中锚框的平均交于并(IoU)值。
[anchorBoxes,meanIoU) = estimateAnchorBoxes (trainingData,numAnchors)
meanIoU
全部折叠
这个示例使用:
这个例子展示了如何使用包含训练数据的表来估计锚框。第一列包含训练图像,其余列包含标记的边界框。
data =负载(“vehicleTrainingData.mat”);trainingData = data.vehicleTrainingData;
创建一个boxLabelDatastore对象,使用来自训练数据的标记边界框。
boxLabelDatastore
建筑物= boxLabelDatastore (trainingData(:, 2:结束));
估计锚盒使用boxLabelDatastore对象。
numAnchors = 5;anchorBoxes = estimateAnchorBoxes(建筑物、numAnchors);
指定图像大小。
inputImageSize = (128228 3);
指定要检测的类的数量。
numClasses = 1;
YOLO v2网络使用预培训的ResNet-50网络作为基础网络。
网络= resnet50 ();
指定用于特征提取的网络层。你可以使用analyzeNetwork函数查看网络中所有层的名称。
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距离度量。
estimateAnchorBoxes
基于IoU的距离度量不受盒子大小的影响,不像欧几里得距离度量,当盒子大小增加[1]时,欧几里得距离度量会产生更大的误差。此外,使用IoU距离度量可以将长宽比和大小相似的框聚在一起,从而得到适合数据的锚框估计值。
创建一个boxLabelDatastore使用车辆数据集中的地面真值箱。如果训练目标检测器的预处理步骤涉及调整图像的大小,请使用变换和bboxresize控件中的边框大小boxLabelDatastore在估计锚盒之前。
变换
bboxresize
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).
1 -
bboxOverlapRatio
(allBoxes boxInCluster)
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矩阵的格式[x,y,宽度,高度].
该数据存储必须是以下数据存储之一:
一个boxLabelDatastore格式[盒子,标签]
{图片,盒子,标签} -一个组合的数据存储。例如,使用结合(洛桑国际管理发展学院,建筑物).
结合
洛桑国际管理发展学院
建筑物
函数返回的锚框数量,指定为整数。
锚盒,返回为N2矩阵,N是锚框的数量,每个条目都有格式[高度,宽度].使用numAnchors指定锚盒的数量。
距离度量,作为标量值返回。距离度量提供每个簇中锚定框的联合平均交点(IoU)值。为确保锚箱与培训数据中的锚箱重叠良好meanIoU值必须大于0.5。的k-表示聚类算法使用IoU距离度量,通过方程计算重叠1-bboxOverlapRatio(box1, box2).
1
box1, box2
fasterRCNNObjectDetector
yolov2Layers
この例の変更されたバージョンがあります。編集された方の例を開きますか吗?
次のMATLABコマンドに対応するリンクがクリックされました。
コマンドをMATLABコマンドウィンドウに入力して実行してください。WebブラウザーはMATLABコマンドをサポートしていません。
选择一个网站,在那里获得翻译的内容,并看到当地的活动和优惠。根据您的位置,我们建议您选择:.
你也可以从以下列表中选择一个网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。
与当地办事处联系