主要内容

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 (___名称=值设置InputSizeModelName通过使用名称、值对参数来设置对象检测器的属性。名字属性名和价值是对应的值。必须将每个属性名称用引号括起来。

输入参数

全部展开

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

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

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

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

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

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

这个参数设置AnchorBoxes的性质ssdObjectDetector对象。

数据类型:细胞

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

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

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

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

属性

全部展开

该属性是只读的。

分类模型的名称,指定为字符向量或字符串标量。控件的第二列的标题trainingData表格中指定的trainSSDObjectDetector函数。您可以在创建后修改此名称ssdObjectDetector对象。

该属性是只读的。

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

该属性是只读的。

锚箱的尺寸,指定为aP-by-1 cell array forPSSD网络中用于目标检测的特征提取层数。数组的每个元素都包含一个-2锚盒尺寸矩阵,格式为[高度宽度].每个单元格可以包含不同数量的锚框。该值在训练时设置。

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

该属性是只读的。

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

对象的功能

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

例子

全部折叠

本示例演示如何使用预训练的ResNet -50卷积神经网络作为基础网络创建SSD对象检测网络。

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

baseet = resnet50;

使用analyzeNetwork显示基本网络的架构。

analyzeNetwork (basenet)

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

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

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

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

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

basenet = layerGraph(basenet);detector = 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)对象来检测图像中的车辆。探测器是用高速公路上的汽车图像进行训练的。

vehicle检测器= load()“ssdVehicleDetector.mat”“探测器”);探测器= vehicleDetector.detector;

将测试映像读入工作区。

I = imread()“highway.png”);

显示测试图像。

imshow(我);

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

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

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

用检测结果对图像进行注释。

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

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

扩展功能

版本历史

在R2020a中引入