主要内容

trainYOLOv2ObjectDetector

火车YOLO v2物体探测器

描述

训练探测器

实例

探测器= trainYOLOv2ObjectDetector (trainingData,lgraph,选项)返回使用输入指定的版本2 (YOLO v2)网络体系结构训练的对象检测器lgraph.这个选项Input指定检测网络的训练参数。

实例

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

恢复训练探测器

实例

探测器= trainYOLOv2ObjectDetector (trainingData,检查点,选项)从保存的检测器检查点恢复培训。

您可以使用此语法来:

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

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

微调检测器

探测器= trainYOLOv2ObjectDetector (trainingData,探测器,选项)继续培训YOLO v2对象检测器。使用此语法对检测器进行微调。

多尺度的培训

探测器= trainYOLOv2ObjectDetector (___,“TrainingImageSize”,trainingSizes)除了前面任何语法中的输入参数外,还使用名称-值对指定多尺度训练的图像大小。

额外的属性

探测器= trainYOLOv2ObjectDetector (___,名称、值)使用一个或多个指定的附加选项名称、值对参数和以前的任何输入。

例子

全部崩溃

将车辆检测的训练数据加载到工作区中。

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

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

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

随机洗牌数据进行训练。

rng(0);shuffledIdx=randperm(高度(训练数据));培训数据=培训数据(shuffledIdx,:);

使用表中的文件创建imageDatastore。

imd = imageDatastore (trainingData.imageFilename);

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

blds=boxLabelDatastore(培训数据(:,2:end));

结合数据存储。

ds=联合收割机(imds、blds);

加载预初始化的YOLO v2对象检测网络。

净=负荷(“yolov2VehicleDetector.mat”); lgraph=net.lgraph
lgraph = LayerGraph with properties: Layers: [25×1 net.cnn.layer. layer] Connections: [24×2 table] InputNames: {'input'} OutputNames: {'yolov2OutputLayer'}

检查YOLO v2网络中的各层及其属性。您还可以按照以下步骤创建YOLO v2网络创建YOLO v2对象检测网络

lgraph。层
ans = 25x1 Layer array with layers:1的输入图像输入128 x128x3图片2的conv_1卷积16 3 x3的隆起与步幅[1]和填充[1 1 1 1]3“BN1”批量标准化批量标准化4的relu_1 ReLU ReLU 5“maxpool1”马克斯池2 x2马克斯池步(2 - 2)和填充[0 0 0 0]6‘conv_2卷积32 3 x3的隆起与步幅[1]和填充[1 11 1] 7 BN2的批量标准化批量标准化8 ' relu_2 ReLU ReLU 9“maxpool2”马克斯池2 x2马克斯池步(2 - 2)和填充[0 0 0 0]64 3 x3的conv_3卷积运算与步幅[1]和填充[1 1 1 1]11“BN3”批量标准化批量标准化12的relu_3 ReLU ReLU 13 maxpool3马克斯池2 x2马克斯池步(2 - 2)和填充[0 0 0 0]14 conv_4卷积128 3 x3的隆起与步幅[1]和填充[1 1 1 1]15“BN4”批量标准化批量标准化16的relu_4 ReLU ReLU 17 yolov2Conv1卷积128 3 x3的隆起与步幅[1]和填充“相同”18 yolov2Batch1批量标准化批量正常化19“yolov2Relu1”ReLU ReLU 20 yolov2Conv2卷积128 3 x3的隆起与步幅[1]和填充“相同”21“yolov2Batch2”批量标准化批量标准化22的yolov2Relu2 ReLU ReLU 23 yolov2ClassConv的卷积24 1 x1旋转步[1]和填充[0 0 0 0]24 yolov2Transform YOLO v2变换层意思。使用4个锚点变换图层。25 'yolov2OutputLayer' YOLO v2输出YOLO v2输出4个锚。

配置网络培训选项。

选择= trainingOptions (“个”,...“初始学习率”, 0.001,...“详细”,真的,...“MiniBatchSize”, 16岁,...“MaxEpochs”30岁的...“洗牌”,“永远”,...“VerboseFrequency”30岁的...“检查点路径”, tempdir);

培训YOLO v2网络。

[探测器,信息]= trainYOLOv2ObjectDetector (ds、lgraph选项);
*************************************************************************为以下对象类培训YOLO v2对象检测器:*单CPU车辆培训。|===============================================================================================================================================================================================================================================================================================================================================================================================================================================================历元|迭代|经过的时间|小批量|小批量|基础学习| | | | | |(hh:mm:ss)第二方的第二方的第二方的第二方的第二方的第二方的第二方的第二方的第二方的第二方的第二方的第第二方的第二方的第二方的第二方的第四方的第二方的第四方的第四方的第四方的第四方的第四方的第四方的第二方的第二方的第二方的第二方的第二方的第二方的第二方的第二方的第二方的第四方的第二方的第四方的第二方的第二方的第四方的第二方的第四方的第二方的第四方的第四方的第四方的第二方的第四方的第二方的第四方的第四方的第第四方的第四方的第二方的第四方的第四方的第四方的据据据据据据据据据据据据据据据据据据据|0.0010 | 4 | 60 | 00:00:27 | 1.13 | 1.3 | 0.0010 | 5 | 90 | 00:00:39 | 0.64 | 0.0010 | 7 | 120 | 00:00:51 | 0.65 1240.0010 | 9 |00:01:04 | 0.72 | 0.5 | 0.0010 | | 10 | 180 | 00:01:16 | 0.52 | 0.3 | 0.0010 | | 12 | 210 | 00:01:28 | 0.45 | 0.2 | 0.0010 | | 14 | 240 | 00:01:41 | 0.61 | 0.4 | 0.0010 | | 15 | 270 | 00:01:52 | 0.43 | 0.2 | 0.0010 | | 17 | 300 | 00:02:05 | 0.42 | 0.2 | 0.0010 | | 19 | 330 | 00:02:17 | 0.52 | 0.3 | 0.0010 | | 20 | 360 | 00:02:29 | 0.43 | 0.2 | 0.0010 | | 22 | 390 | 00:02:42 | 0.43 | 0.2 | 0.0010 | | 24 | 420 | 00:02:54 | 0.59 | 0.4 | 0.0010 | | 25 | 450 | 00:03:06 | 0.61 | 0.4 | 0.0010 | | 27 | 480 | 00:03:18 | 0.65 | 0.4 | 0.0010 | | 29 | 510 | 00:03:31 | 0.48 | 0.2 | 0.0010 | | 30 | 540 | 00:03:42 | 0.34 | 0.1 | 0.0010 | |==================================================================================================================================================================探测器培训完成*************************************************************************

检查探测器的属性。

探测器
检测器=Yolov2Object检测器,具有以下属性:型号名称:“车辆”网络:[1×1 DAG网络]训练图像大小:[128]固定盒:[4×2双]类名:车辆

您可以通过检查每个迭代的训练损失来验证训练的准确性。

网格图绘制(info.TrainingLoss)包含(的迭代次数) ylabel (“每个迭代的训练损失”)

将测试映像读入工作区。

img = imread (“detectcars.png”);

在测试图像上运行经过培训的YOLO v2物体检测器,进行车辆检测。

[bboxes,分数]=检测(探测器,img);

显示检测结果。

如果(~isempty(bboxes))img=插入对象注释(img,“矩形”bboxes,分数);终止图imshow(img)

输入参数

全部崩溃

标记地面真实图像,指定为数据存储或表格。

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

    数据 盒子 标签

    第一列可以包含数据,例如点云数据或图像。

    第二列必须是包含M形式的包围盒的- × 5矩阵[x中心,Y中心,宽度,高度,偏航].向量表示每个图像中对象的边界框的位置和大小。

    如果边界框与轴对齐,则无需指定偏航。因此,将框描述为边界M形式的包围盒的- × 4矩阵[x中心,Y中心,宽度,高度].

    第三列必须是包含M-by-1包含对象类名的分类向量。数据存储返回的所有分类数据必须包含相同的类别。

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

  • 如果使用表格,表格必须有两列或多列。表格的第一列必须包含带路径的图像文件名。图像必须是灰度或真彩色(RGB),并且可以是金宝appimread.剩下的每一列必须是包含M-表示单个对象类的by-4矩阵,例如车辆,,或停车标志. 列包含4个元素的双数组M格式中的边框[x,Y,宽度,高度]。该格式指定相应图像中边界框的左上角位置和大小。若要创建地面真值表,可以使用图片标识应用程序或视频贴标机要从生成的ground truth创建一个训练数据表,使用对象训练数据函数。

笔记

使用表格指定训练数据时trainYOLOv2ObjectDetector函数检查这些条件

  • 边界框的值必须是整数。否则,函数会自动将每个非整数值舍入到最接近的整数。

  • 边界框必须不是空的,并且必须在图像区域内。在训练网络时,函数忽略空的边界盒和部分或全部位于图像区域之外的边界盒。

层图,指定为分层图对象。层图包含YOLO v2网络的架构。您可以使用约洛夫2层作用或者,可以使用创建网络层yolov2TransformLayer,yolov2ReorgLayer,yolov2OutputLayer功能。创建YOLO v2网络的详细信息请参见设计YOLO v2检测网络

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

笔记

这个trainYOLOv2ObjectDetector函数不支持以下培训选项:金宝app

  • 这个trainingOptions洗牌值,“一次”“every-epoch”使用数据存储输入金宝app时不支持。

  • 设置时不支持数据存储输入金宝appDispatchInBackground培训选项真正的

保存检测器检查点,指定为Yolov2物体检测器对象。要将检测器保存在每个epoch之后,请设置“检查点路径”使用trainingOptions函数。建议在每个epoch之后保存一个检查点,因为网络训练可能需要几个小时。

要为以前训练过的检测器加载检查点,请从检查点路径加载MAT文件CheckpointPath由指定的对象的属性选项' / checkpath ',可以使用此代码加载检查点MAT文件。

数据=负载(“/ checkpath / yolov2_checkpoint__216__2018_11_16__13_34_30.mat”); 检查点=data.detector;

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

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

以前培训过YOLO v2物体探测器,指定为Yolov2物体检测器对象使用此语法继续使用其他训练数据训练检测器,或执行更多训练迭代以提高检测器精度。

用于多尺度训练的图像大小集,指定为M-by-2矩阵,其中每一行为高度宽度].对于每个训练时期,输入的训练图像被随机调整为其中的一个M在这个集合中指定的图像大小。

如果未指定trainingSizes,该函数将该值设置为YOLO v2网络的图像输入层中的大小。网络将所有训练图像的大小调整为此值。

笔记

输入trainingSizes为多尺度训练指定的值必须大于或等于图像输入层中的输入大小lgraph输入参数。

名称值参数

指定可选的逗号分隔的字符对名称、值参数。的名字是参数名和价值为对应值。的名字必须出现在引号内。您可以按任意顺序指定多个名称和值对参数,如下所示:Name1, Value1,…,的家

例子:“ExperimentManager”,“没有”设定“ExperimentManager”“没有”

探测器培训实验监控,指定为实验。监控(深度学习工具箱)对象以与实验管理器(深度学习工具箱)app。可以使用该对象跟踪培训进度,更新培训结果表中的信息字段,记录培训使用的指标值,生成培训图。

培训期间监控的信息:

  • 每次迭代的训练损失。

  • 每次迭代的训练准确性。

  • 盒回归层的训练均方根误差(RMSE)。

  • 每次迭代的学习率。

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

  • 每次迭代时的验证损失。

  • 每次迭代验证的准确性。

  • 在每个迭代中验证RMSE。

培训结束时的计算指标:

  • 培训结束时的最终验证失败。

  • 最终验证RMSE在训练结束。

输出参数

全部崩溃

训练过的YOLO v2物体探测器,返回为Yolov2物体检测器对象。您可以训练YOLO v2对象检测器来检测多个对象类。

训练进度信息,作为具有7个字段的结构数组返回。每个领域对应于一个训练阶段。

  • 培训损失-每次迭代的训练损失是均方误差(MSE),计算为定位误差、置信度损失和分类损失之和。有关训练损失函数的更多信息,请参阅训练损失

  • TrainingRMSE-训练均方根误差(RMSE)是由每次迭代的训练损失计算得到的RMSE。

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

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

  • ValidationRMSE-每次迭代验证RMSE。

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

  • 最终验证RMSE-培训结束时对RMSE进行最终验证。

每个字段是一个数字向量,每个训练迭代包含一个元素。在特定迭代中未计算的值被赋值为. 结构包含验证损失,验证准确性,ValidationRMSE,FinalValidationLoss,最终验证RMSE仅当选项指定验证数据。

更多关于

全部崩溃

数据预处理

默认情况下,trainYOLOv2ObjectDetector函数通过以下方式预处理训练图像:

  • 调整输入图像的大小以匹配网络的输入大小。

  • 将输入图像的像素值规格化为范围[0,1]。

当使用表指定训练数据时,trainYOLOv2ObjectDetector函数执行数据增强以进行预处理。该函数通过以下方式扩展输入数据集:

  • 横向反映培训数据。在训练数据中水平翻转每个图像的概率为0.5。

  • 通过从连续均匀分布中随机选取的比例因子均匀缩放(缩放)训练数据[1,1.1]。

  • 亮度、色调、饱和度和对比度的随机颜色抖动。

当您使用数据存储指定训练数据时,trainYOLOv2ObjectDetector函数不执行数据扩充。相反,您可以使用变换函数,然后用增强后的训练数据对网络进行训练。有关如何在使用数据存储时应用扩展的更多信息,请参见预处理深度学习数据(深度学习工具箱)

训练损失

在训练期间,YOLO v2目标检测网络优化预测边界框和地面真值之间的MSE损失

K 1. = 0 s 2. J = 0 B 1. J o B J [ ( x x ^ ) 2. + ( Y Y ^ ) 2. ] + K 1. = 0 s 2. J = 0 B 1. J o B J [ ( W W ^ ) 2. + ( H H ^ ) 2. ] + K 2. = 0 s 2. J = 0 B 1. J o B J ( C C ^ ) 2. + K 3. = 0 s 2. J = 0 B 1. J N o o B J ( C C ^ ) 2. + K 4. = 0 s 2. 1. o B J C C L A. s s E s ( P ( C ) P ^ ( C ) ) 2.

哪里:

  • s是网格单元的数量。

  • B是每个网格单元格中包围框的数量。

  • 1. J o B J 如果jth网格单元格中的包围框负责探测物体。否则设置为0。一个网格单元负责检测对象,如果地面真实值与该网格单元格中的边界框的重叠大于或等于0.6。

  • 1. J N o o B J 如果jth网格单元格中的包围框不包含任何对象。否则将其设置为0。

  • 1. o B J 如果在网格单元格中检测到一个对象,是否为1.否则设置为0。

  • K1.,K2.,K3.,K4.是权重。要调整权重,请修改LossFactors属性的yolov2OutputLayer函数。

损失函数可分为三部分:

  • 局部化损失

    损失函数中的第一项和第二项包含了定位损失。它测量预测的边界框和地面真实之间的误差。计算定位损失的参数包括位置、预测边界盒的大小和地面真实值。参数定义如下。

    • ( x , Y ) ,是中心jth相对于栅格单元的边界框

    • ( x ^ , Y ^ ) ,是相对于网格单元的基本事实的中心

    • W H 的宽度和高度是多少jth网格单元格中的包围框,分别。预测的边界框的大小是相对于输入图像的大小指定的。

    • W ^ H ^ 是网格单元中地面真实值的宽度和高度,分别。

    • K1.是本地化损失的权重。增加此值可增加边界框预测错误的权重。

  • 信心丧失

    损失函数中的第三项和第四项包含了信心损失。第三个任期衡量的是客体性(置信度得分)在系统中检测到对象时出错jth网格单元格的包围框. 第四项用于测量在数据中未检测到对象时的对象性错误jth网格单元格的包围框.计算置信损失的参数定义如下:

    • C是该项目的信心分数jth网格单元格中的包围框

    • Ĉ网格单元格中地面真实的置信度是多少

    • K2.在预测的边界框中检测到对象时,对象性错误的权重。您可以调整的值K2.衡量包含对象的网格单元格的置信度。

    • K3.为在预测的边界框中未检测到目标时的目标误差的权重。的值可以调整K3.对不包含对象的网格单元的置信度分数进行加权。

    当不包含对象的网格单元数大于包含对象的网格单元数时,置信度损失可能导致训练发散。要解决此问题,请增加的值K2.并降低值K3.

  • 分类损失

    损失函数中的第五项是分类损失。例如,假设在网格单元格中包含的预测边界框中检测到一个对象.然后,分类损失度量网格单元中每个类别的分类条件概率之间的平方误差.计算分类损失的参数定义如下。

    • P(C)为对象类的条件类概率估计C网格单元中

    • P ^ ( C ) 对象类的实际条件类概率是多少C网格单元中

    • K4.是在网格单元中检测到对象时分类错误的权重。增加此值可增加分类损失的权重。

提示

参考文献

[1] 约瑟夫。R、 S.K.Divvala、R.B.Girshick和F.Ali。“你只看一次:统一的、实时的目标检测。”IEEE计算机视觉与模式识别会议论文集, 779 - 788页。拉斯维加斯,内华达州:CVPR, 2016。

[2] 约瑟夫。阿里。尤罗9000:更好、更快、更强IEEE计算机视觉与模式识别会议论文集,第6517-6525页。檀香山,HI:CVPR,2017年。

在R2019a中引入