主要内容

yolov4ObjectDetector

使用YOLO v4对象检测器检测对象

描述

yolov4ObjectDetector版本4 (YOLO v4)一级对象检测器用于检测图像中的对象。使用这个对象,你可以:

  • 通过使用在COCO数据集上训练的YOLO v4深度学习网络创建预训练的YOLO v4对象检测器。

  • 通过使用任何预训练或未训练的YOLO v4深度学习网络创建自定义YOLO v4对象检测器。

创建

描述

预训练YOLO v4对象检测器

例子

探测器= yolov4ObjectDetector (的名字通过使用在COCO数据集上训练的YOLO v4深度学习网络创建预训练的YOLO v4对象检测器。

自定义YOLO v4对象检测器

探测器= yolov4ObjectDetector (的名字aboxes创建预训练的YOLO v4对象检测器,并将其配置为使用指定的对象类和锚框集执行迁移学习。为了获得最佳结果,您必须在执行检测之前在新的训练图像上训练检测器。使用trainYOLOv4ObjectDetector检测器训练功能。

探测器= yolov4ObjectDetector (aboxes利用深度学习网络创建对象检测器

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

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

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

例子

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

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

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

如果baseNet是一个未经训练的深度学习网络,该函数创建一个YOLO v4对象检测器,并将其配置为对象检测。而且aboxes分别指定对象类和锚框,用于训练YOLO v4网络。

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

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

请注意

要使用在COCO数据集上训练的预训练YOLO v4对象检测网络,必须安装计算机视觉工具箱™模型YOLO v4对象检测.您可以下载和安装YOLO v4对象检测的计算机视觉工具箱模型从Add-On Explorer。有关安装外接程序的详细信息,请参见获取和管理外接组件.要运行此函数,您将需要深度学习工具箱™。

输入参数

全部展开

预训练的YOLO v4深度学习网络的名称,指定为以下其中之一:

  • “csp-darknet53-coco”-预训练YOLO v4深度学习网络,使用CSP-DarkNet-53作为基础网络,在COCO数据集上进行训练。

  • “tiny-yolov4-coco”-预训练YOLO v4深度学习网络,使用小型基础网络创建,并在COCO数据集上进行训练。

数据类型:字符|字符串

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

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

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

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

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

数据类型:细胞

YOLO v4深度学习网络,指定为adlnetwork(深度学习工具箱)对象。输入网络可以是未经训练的深度学习网络,也可以是预训练的深度学习网络。输入网络必须有图像输入层和归一化属性值的图像输入层必须设置为“没有”

用于创建YOLO v4深度学习网络的基础网络,指定为dlnetwork(深度学习工具箱)对象。该网络可以是未经训练的深度学习网络,也可以是预训练的深度学习网络。输入网络必须有图像输入层和归一化属性值的图像输入层必须设置为“没有”

基本网络中的特征提取层的名称,指定为字符向量的单元格数组或字符串数组。该函数通过向基本网络中的特征提取层的输出添加检测头层来创建YOLO v4网络。

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

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

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

属性

全部展开

YOLO v4深度学习网络用于对象检测,存储为dlnetwork(深度学习工具箱)对象。

要检测的对象类名称,存储为分类向量。您可以使用input参数设置此属性

此属性是只读的。

一套锚框,存储为N-by-1单元格数组。单元格中的每个元素都是a2矩阵。中的每一行-by-2矩阵表示锚框的大小,形式为[高度宽度].表示锚框的数量。N为YOLO v4深度学习网络中定义锚框的输出层数。单元格数组中的第一个元素指定第一个输出层的锚框,单元格数组中的第二个元素指定第二个输出层的锚框,依此类推。您必须为每个输出层指定相同数量的锚框。

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

此属性是只读的。

用于训练的图像大小,存储为form [高度宽度]或[高度宽度渠道].若要设置此属性,请在创建对象时指定它。训练图像的大小必须是32的倍数。

例如,检测器= yolov4ObjectDetector(net,classes,aboxes,InputSize=[220 220])

对象检测器的名称,存储为字符向量或字符串标量。若要设置此属性,请在创建对象时指定它。

例如,yolov4ObjectDetector(净、类aboxes ModelName =“customDetector”)将对象检测器的名称设置为“customDetector”

对象的功能

检测 使用YOLO v4对象检测器检测对象

例子

全部折叠

指定预训练的YOLO v4深度学习网络的名称。

name =“tiny-yolov4-coco”

使用预训练的YOLO v4网络创建YOLO v4对象检测器。

探测器= yolov4ObjectDetector(name);

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

disp(探测器)
yolov4ObjectDetector with properties: Network: [1×1 dlnetwork] AnchorBoxes: {2×1 cell} ClassNames: {80×1 cell} InputSize: [416 416 3] ModelName: 'tiny-yolov4-coco'

使用analyzeNetwork以显示YOLO v4网络体系结构并获取有关网络层的信息。

analyzeNetwork (detector.Network)

使用预训练的YOLO v4对象检测器检测未知图像中的对象。

Img = imread(“highway.png”);[bboxes,scores,labels] = detect(检测器,img);

显示检测结果。

detectedImg = insertObjectAnnotation(img,“矩形”、bboxes、标签);图imshow (detectedImg)

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

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

Basenet = resnet50;

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

analyzeNetwork (basenet)

基本网络的第一层是图像输入层。检查基础网络中图像输入层的属性。

basenet.Layers (1)
ans = ImageInputLayer with properties: Name: 'input_1' InputSize:[224 224 3]超参数DataAugmentation: 'none'归一化:'zerocenter' NormalizationDimension: 'auto' Mean: [224×224×3 single]

要创建YOLO v4深度学习网络,必须对基础网络进行以下更改:

  1. 设置归一化的属性ImageInputLayer在基础网络中没有一个”。

  2. 移除完全连接的分类层。

定义一个图像输入层归一化物业价值为'没有一个'和其他属性值与基础网络相同。

imageSize = basenet.Layers(1).InputSize;layerName = basenet.Layers(1).Name;newinputLayer = imageInputLayer(imageSize,“归一化”“没有”“名字”, layerName);

提取基础网络的层图,用于创建YOLO v4深度学习网络。

lgraph = layerGraph(basenet);

移除基础网络中的全连接层。

lgraph = removeLayers(“ClassificationLayer_fc1000”);

用新的输入层替换基础网络中的图像输入层。

lgraph = replaceLayer(lgraph,layerName,newinputLayer);

创建一个dlnetwork对象。

Dlnet = dlnetwork(lgraph);

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

featureExtractionLayers = [“activation_22_relu”“activation_40_relu”];

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

类= {“汽车”“人”};锚定箱= {[122,177;223,84;80,94];...[111, 38岁,33岁,47岁,37岁,18]};

通过使用指定的基本网络和检测头创建YOLO v4对象检测器。

检测器= yolov4ObjectDetector(dlnet,类,锚定箱,DetectionNetworkSource= featureextracactionlayers);

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

disp(探测器)
yolov4ObjectDetector with properties: Network: [1×1 dlnetwork] AnchorBoxes: {2×1 cell} ClassNames: {2×1 cell} InputSize: [224 224 3] ModelName: "

使用analyzeNetwork以显示YOLO v4网络体系结构并获取有关网络层的信息。

analyzeNetwork (detector.Network)

扩展功能

版本历史

R2022a中引入