主要内容

ssdObjectDetector

使用SSD深度学习检测器检测对象

描述

ssdObjectDetector检测图像中的对象,使用单镜头检测器(SSD)对象检测器。为了检测图像中的对象,将训练过的检测器传递给检测函数。您还可以使用经过训练的检测器进行多类对象检测。有关SSD深度学习网络的信息,请参见SSD多盒检测入门

创建

描述

探测器= ssdObjectDetector (aboxes使用SSD深度学习网络创建对象检测器

如果为预训练的SSD深度学习网络,该函数创建预训练的SSD对象检测器。的而且aboxes是用于训练网络的值。

如果是一个未经训练的SSD深度学习网络,该函数创建一个SSD对象检测器用于训练和推理。而且aboxes指定SSD网络训练的对象类和锚盒。

使用trainSSDObjectDetector函数在进行目标检测之前对网络进行训练。

例子

探测器= ssdObjectDetector (baseNetaboxes“DetectionNetworkSource”,通过向基础网络添加检测头来创建SSD对象检测器,baseNet

该函数将检测头添加到指定的特征提取层在基础网络中。要指定特征提取层的名称,使用name-value参数“DetectionNetworkSource”

如果baseNet为预训练的深度学习网络,该函数创建SSD对象检测器,并配置其对指定的对象类和锚框进行迁移学习。

如果baseNet是一个未经训练的深度学习网络,该功能创建一个SSD对象检测器,并将其配置为对象检测。而且aboxes指定SSD网络训练的对象类和锚盒。

在执行对象检测之前,必须在训练数据集上训练检测器。使用trainSSDObjectDetector检测器训练功能。

探测器= ssdObjectDetector (___名称=值设置InputSize而且ModelName使用名称、值对参数来创建对象检测器的属性。名字属性名称和价值对应的值。必须将每个属性名用引号括起来。

输入参数

全部展开

SSD深度学习网络,指定为aLayerGraph(深度学习工具箱)对象。输入网络可以是未经训练的深度学习网络,也可以是预训练的深度学习网络。输入网络不能有损耗层。

用于创建SSD深度学习网络的基础网络LayerGraph(深度学习工具箱)对象。该网络可以是未经训练的深度学习网络,也可以是预训练的深度学习网络。指定此参数时,还必须指定for的值DetectionNetworkSource名称-值参数。

用于训练检测器的对象类的名称,指定为字符串向量、字符向量的单元格数组或分类向量。此参数设置一会的属性ssdObjectDetector对象。

数据类型:字符|字符串|分类

用于训练检测器的锚盒,指定为N-by-1单元格数组。N为SSD深度学习网络输出层数。每个单元格包含一个-by-2矩阵是该层中锚框的数量。中的每一行-by-2矩阵表示[]形式的锚框的大小。高度宽度]。

单元格数组中的第一个元素指定与第一个输出层相关联的锚框,单元格数组中的第二个元素指定与第二个输出层相关联的锚框,依此类推。为保证检测结果准确,第一个输出层指定大锚框,最后一个输出层指定小锚框。也就是说,每个输出层的锚框大小必须按照层在SSD深度学习网络中出现的顺序减小。

此参数设置AnchorBoxes的属性ssdObjectDetector对象。

数据类型:细胞

基本网络中的特征提取层的名称,指定为字符向量的单元格数组或字符串数组。该函数通过向基础网络中的特征提取层的输出添加分类和回归层来创建SSD网络。

例子:Layer = {'conv10','fire9-concat'}

例子:Layer = ["conv10","fire9-concat"]

数据类型:字符|字符串|细胞

属性

全部展开

此属性是只读的。

分类模型的名称,指定为字符向量或字符串标量。类的第二列标题默认设置为名称trainingData表中指定的trainSSDObjectDetector函数。您可以在创建您的ssdObjectDetector对象。

此属性是只读的。

训练过的SSD多盒对象检测网络,指定为DAGNetwork(深度学习工具箱)对象。该对象存储定义SSD检测器中使用的卷积神经网络的层。

此属性是只读的。

锚盒的大小,指定为aP-by-1单元格数组PSSD网络中用于对象检测的特征提取层数。数组的每个元素都包含一个-by-2的锚框大小矩阵,格式为[高度宽度]。每个单元格可以包含不同数量的锚定框。该值在培训期间设置。

您可以使用input参数设置此属性aboxes

此属性是只读的。

训练SSD检测器查找的对象类的名称,指定为单元格数组。您可以使用input参数设置此属性

对象的功能

检测 使用SSD多盒对象检测器检测对象

例子

全部折叠

这个例子展示了如何使用预先训练好的ResNet -50卷积神经网络作为基础网络来创建SSD对象检测网络。

加载一个预先训练好的深度学习网络作为基础网络。本例使用ResNet-50预训练网络作为基础网络。有关其他可用的预训练网络的信息,请参见预训练的深度神经网络(深度学习工具箱)(深度学习工具箱)。

Basenet = resnet50;

使用analyzeNetwork显示基础网络的体系结构。

analyzeNetwork (basenet)

指定类名和锚框,用于训练使用创建的SSD深度学习网络resnet50作为基础网络。

classNames = [“人”“汽车”“狗”];锚定箱= {[30 60;60 30;50 50;100 100],...[40 70;70 40;60 60;120 120],...[50 80;80 60;70 70;140 140]};

指定基本网络中作为检测头的特征提取层的名称。

featureExtractionLayers = [“activation_11_relu”“activation_22_relu”“activation_40_relu”];

使用指定的基本网络和检测头创建SSD对象检测器。

basenet = layerGraph(basenet);检测器= ssdObjectDetector(basenet,classNames,anchorBoxes,DetectionNetworkSource= featureextracactionlayers);

显示和检查SSD对象检测器的属性。

disp(探测器)
ssdObjectDetector with properties: Network: [1x1 DAGNetwork] AnchorBoxes: {3x1 cell} ClassNames: [3x1 string] InputSize: [224 224 3] ModelName: "

使用analyzeNetwork命令,显示SSD网络结构,获取网络层次信息。

analyzeNetwork (detector.Network)

加载预训练的单镜头检测器(SSD)对象来检测图像中的车辆。探测器使用高速公路现场的汽车图像进行训练。

车辆检测仪=负载(“ssdVehicleDetector.mat”“探测器”);探测器=车辆探测器。探测器;

将一个测试映像读入工作区。

I = imread(“highway.png”);

显示测试图像。

imshow(我);

图中包含一个轴对象。axis对象包含一个image类型的对象。

运行预训练的SSD对象检测器检测函数。输出包含边界框、分数和图像中检测到的车辆的标签。标签派生自一会检测器的属性。

[bboxes,scores,labels] = detect(检测器,I)
bboxes =2×4139 78 96 81 99 67 165 146
成绩=2x1个单列向量0.8349 - 0.6302
标签=2 x1分类车车

用检测结果标注图像。

如果~isempty(bboxes) detectedI = insertObjectAnnotation(I,“矩形”、bboxes cellstr(标签);其他的detectedI = insertText(I,[10 10],“不检测”);结束图imshow (detectedI)

图中包含一个轴对象。axis对象包含一个image类型的对象。

扩展功能

版本历史

R2020a中引入