主要内容

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深度学习网络,指定为LayerGraph(深度学习工具箱)对象。输入网络可以是未经训练的深度学习网络,也可以是经过训练的深度学习网络。输入网络不能有损耗层。

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

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

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

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

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

此参数设置AnchorBoxes财产的ssdObjectDetector对象。

数据类型:细胞

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

例子:层={‘conv10’,‘fire9-concat}

例子:层=(“conv10”、“fire9-concat”)

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

属性

全部展开

此属性是只读的。

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

此属性是只读的。

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

此属性是只读的。

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

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

此属性是只读的。

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

对象的功能

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

例子

全部折叠

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

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

basenet = resnet50;

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

analyzeNetwork (basenet)

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

一会= [“人”“汽车”“狗”];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]};

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

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

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

basenet = layerGraph (basenet);探测器= ssdObjectDetector (basenet,一会,anchorBoxes DetectionNetworkSource = featureExtractionLayers);

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

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

使用analyzeNetwork命令,查看SSD设备网络结构,获取网络层次信息。

analyzeNetwork (detector.Network)

加载一个预训练的单镜头检测器(SSD)对象来检测图像中的车辆。这个检测器是用高速公路上的汽车图像训练的。

vehicleDetector =负载(“ssdVehicleDetector.mat”“探测器”);探测器= vehicleDetector.detector;

将测试映像读入工作空间。

我= imread (“highway.png”);

显示测试图像。

imshow(我);

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

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

[bboxes、分数、标签]=检测(探测器,我)
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)

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

扩展功能

版本历史

介绍了R2020a

Baidu
map