主要内容

trainYOLOv4ObjectDetector

训练YOLO v4对象检测器

描述

例子

探测器= trainYOLOv4ObjectDetector (trainingData探测器选项返回使用输入指定的只看一次版本4 (YOLO v4)网络训练的对象检测器探测器.输入探测器可以是一个未经训练或预先训练的YOLO v4对象检测器。的选项输入为检测网络指定训练参数。

您还可以使用此语法对预训练的YOLO v4对象检测器进行微调。

探测器= trainYOLOv4ObjectDetector (trainingData检查点选项从保存的检测器检查点恢复训练。

你可以使用这个语法:

  • 添加更多的训练数据并继续训练。

  • 通过增加迭代的最大次数来提高训练的准确性。

探测器信息) = trainYOLOv4ObjectDetector (___还返回关于训练进度的信息,例如每次迭代的训练准确性和学习率。

___= trainYOLOv4ObjectDetector (___名称,值使用一个或多个指定的其他选项名称,值将参数和前面的任何输入配对。

请注意

要运行此函数,您需要使用深度学习工具箱™。

例子

全部折叠

此示例演示如何微调预训练的YOLO v4对象检测器,以检测图像中的车辆。本示例使用在COCO数据集上训练的小型YOLO v4网络。

加载一个预先训练的YOLO v4对象检测器并检查其属性。

探测器= yolov4ObjectDetector (“tiny-yolov4-coco”
net: [1×1 dlnetwork] AnchorBoxes: {2×1 cell} ClassNames: {80×1 cell} InputSize: [416 416 3] ModelName: 'tiny-yolov4-coco'

锚盒数量必须与YOLO v4网络的输出层数保持一致。微小的YOLO v4网络包含两个输出层。

探测器。网络
Layers: [74×1 nnet.cnn.layer.Layer] Connections: [80×2 table] Learnables: [80×3 table] State: [38×3 table] InputNames: {'input_1'} OutputNames: {'conv_31' 'conv_38'} Initialized: 1

准备训练数据

加载一个.mat文件,其中包含用于训练的车辆数据集的信息。存储在.mat文件中的信息是一个表。第一列包含训练图像,其余列包含标记的边界框。

data =负载(“vehicleTrainingData.mat”);trainingData = data.vehicleTrainingData;

指定存储训练样本的目录。在培训数据的文件名中添加全路径。

dataDir = fullfile (toolboxdir (“愿景”),“visiondata”);trainingData。imageFilename = fullfile (dataDir trainingData.imageFilename);

创建一个imageDatastore使用表中的文件。

imd = imageDatastore (trainingData.imageFilename);

创建一个boxLabelDatastore使用表中的标签列。

建筑物= boxLabelDatastore (trainingData(:, 2:结束));

结合数据存储。

ds =结合(imd,建筑物);

指定用于调整训练图像大小的输入大小。类时,训练图像的大小必须是32的倍数tiny-yolov4-coco而且csp-darknet53-coco预训练的YOLO v4深度学习网络。您还必须根据指定的输入大小调整边界框的大小。

inputSize = [224 224 3];

控件来调整训练图像和边界框的大小和缩放preprocessDatahelper函数。另外,将预处理数据转换为a数据存储对象。变换函数。

trainingDataForEstimation =变换(ds, @(数据)preprocessData(数据、inputSize));

估计锚箱

根据训练数据估计锚框。您必须为YOLO v4网络中的每个输出层分配相同数量的锚框。

numAnchors = 6;[主播,meanIoU] = estimateAnchorBoxes(trainingdatafestimtimation,numAnchors);面积=锚(:1)。*锚(:,2);[~, idx] =排序(区域,“下”);锚=锚(idx:);anchorBoxes ={锚(1:3:);锚(4:6 -:)};

配置和培训YOLO v4网络

指定类名并配置预先训练的yolo4深度学习网络,使其对新数据集进行再训练yolov4ObjectDetector函数。

类= {“汽车”};探测器= yolov4ObjectDetector (“tiny-yolov4-coco”、类、anchorBoxes InputSize = InputSize);

方法指定训练选项并在新数据集上重新训练预先训练的YOLO v4网络trainYOLOv4ObjectDetector函数。

选择= trainingOptions (“个”...InitialLearnRate = 0.001,...MiniBatchSize = 16,...MaxEpochs = 40,...BatchNormalizationStatistics =“移动”...ResetInputNormalization = false,...VerboseFrequency = 30);trainedDetector = trainYOLOv4ObjectDetector (ds、探测器、期权);
************************************************************************* 培训YOLO v4意思对象探测器以下对象类:*车辆Epoch Iteration TimeElapsed LearnRate TrainingLoss _____ _________ ___________ _________ ____________ 230 00:01:07 0.001 7.215 4 60 00:01:44 0.001 1.7371 5 90 00:02:21 0.001 0.97954 7 120 00:02:57 0.001 0.65631 8 150 00:03:34 0.001 0.65631 10 180 00:04:10 0.001 1.0774 12 180 00:04:10 0.001 0.4807 13 240 00:05:22 0.001 0.40389 15 270 00:05:59 0.001 0.57931 16 300 00:06:35 0.001 0.90734 18 330 00:07:11 0.001 0.24902 19 360 00:07:48 0.001 0.32441 21 390 00:08:24 0.001 0.23054 23 42000:09:00 0.001 0.70897 24 450 00:09:36 0.001 0.31744 26 480 00:10:12 0.001 0.36323 27 510 00:10:49 0.001 0.13696 29 540 00:11:25 0.001 0.14913 30 570 00:12:01 0.001 0.37757 32 600 00:12:37 0.001 0.36985 34 630 00:13:14 0.001 0.14034 35 660 00:13:50 0.001 0.14731 37 690 00:14:26 0.001 0.15907 38 720 00:15:03 0.001 0.11737 40 750 00:15:40 0.001 0.1855 *************************************************************************检测器训练完成。*************************************************************************

在测试图像中检测车辆

读取测试图像。

我= imread (“highway.png”);

使用微调YOLO v4对象检测器检测测试图像中的车辆,并显示检测结果。

[bboxes, scores, labels] = detect(trainedDetector,I,Threshold=0.05);detectedImg = insertObjectAnnotation(我“矩形”、bboxes、标签);图imshow (detectedImg)

函数targetSize data = preprocessData(数据)I = data{num,1};imgSize =大小(I);bboxes = {num 2}数据;我= im2single (imresize(我targetSize (1:2)));规模= targetSize(1:2)。/ imgSize (1:2);bboxes = bboxresize (bboxes、规模);数据(num 1:2) ={我bboxes};结束结束

输入参数

全部折叠

标记的地面真实图像,指定为一个数据存储。

  • 如果使用数据存储,则必须设置数据,以便使用而且readall函数返回具有两列或三列的单元格数组或表。当输出包含两列时,第一列必须包含边界框,第二列必须包含标签,{盒子标签}。当输出包含三列时,第二列必须包含边界框,第三列必须包含标签。在本例中,第一列可以包含任何类型的数据。例如,第一列可以包含图像或点云数据。

    数据 盒子 标签

    第一列必须是图像。

    形式为[的边界框的- x4矩阵xy宽度高度],其中[x,y]表示边界框的左上角坐标。

    第三列必须是单元格数组,其中包含-by-1包含对象类名的分类向量。数据存储返回的所有类别数据必须包含相同的类别。

    有关更多信息,请参见用于深度学习的数据存储(深度学习工具箱)

预训练或未训练的YOLO v4对象检测器,指定为yolov4ObjectDetector对象。

培训选项,指定为TrainingOptionsSGDMTrainingOptionsRMSProp,或TrainingOptionsADAM对象返回的trainingOptions(深度学习工具箱)函数。为网络训练指定求解器名称和其他选项,请使用trainingOptions(深度学习工具箱)函数。

保存的检测器检查点,指定为yolov4ObjectDetector对象。若要在训练期间定期保存检测器检查点,请指定CheckpointPath.若要控制保存检查点的频率,请参阅CheckPointFrequency而且CheckPointFrequencyUnit培训选项。

要为以前训练过的检测器加载检查点,请从检查点路径加载mat文件。例如,如果CheckpointPath属性指定的对象的选项“checkpath”,您可以使用此代码加载检查点mat文件。“checkpath”当前工作目录中的文件夹名称,在训练期间必须将检测器检查点保存到该文件夹中。

data =负载(“checkpath / net_checkpoint__19__2021_12_29__01_04_15.mat”);检查点= data.net;

mat文件的名称包括迭代号和保存检测器检查点的时间戳。探测器保存在文件的变量。将此文件传递回trainYOLOv4ObjectDetector功能:

yoloDetector = trainYOLOv4ObjectDetector (trainingData、检查点、期权);

名称-值参数

指定可选参数对为Name1 = Value1,…,以=家,在那里的名字参数名称和价值对应的值。名-值参数必须出现在其他参数之后,但对的顺序并不重要。

在R2021a之前,名称和值之间用逗号隔开,并括起来的名字在报价。

例子:“ExperimentManager”“没有”设置“ExperimentManager”“没有”

检测器训练实验监控,指定为实验。监控(深度学习工具箱)对象一起使用实验管理器(深度学习工具箱)可以使用该对象跟踪训练的进度,更新训练结果表中的信息字段,记录训练使用的指标值,生成训练图。有关使用该应用程序的示例,请参见在实验管理器中训练物体检测器

培训期间监控的信息:

  • 每次迭代的训练损失。

  • 每次迭代的学习率。

培训时的验证信息选项输入包含验证数据:

  • 每次迭代的验证损失。

输出参数

全部折叠

训练YOLO v4对象检测器,返回为yolov4ObjectDetector对象。您可以训练一个YOLO v4对象检测器来检测多个对象类。

训练进度信息,作为包含七个字段的结构数组返回。每个领域对应一个训练阶段。

  • TrainingLoss-每次迭代的训练损失。的trainYOLOv4ObjectDetector函数用均方误差计算边界盒回归损失,用交叉熵计算分类损失。

  • BaseLearnRate-每次迭代的学习率。

  • OutputNetworkIteration-返回网络的迭代次数。

  • ValidationLoss-每次迭代的验证损失。

  • FinalValidationLoss-培训结束时的最终验证损失。

每个字段都是一个数字向量,每次训练迭代都有一个元素。没有在特定迭代中计算的值被分配为.该结构包含ValidationLoss而且FinalValidationLoss只有当字段选项指定验证数据。

提示

  • 要生成基本真相,请使用图片标志贴标签机视频要从生成的ground truth创建一个训练数据表,可以使用objectDetectorTrainingData函数。

  • 为了提高预测精度,

    • 增加可以用于训练网络的映像数量。您可以通过数据扩充来扩展训练数据集。有关如何将数据增强应用于预处理的信息,请参见用于深度学习的图像预处理(深度学习工具箱)

    • 选择适合于数据集的锚框来训练网络。您可以使用estimateAnchorBoxes函数直接从训练数据计算锚框。

版本历史

介绍了R2022a

Baidu
map