主要内容

trainYOLOv2ObjectDetector

火车yolo v2对象探测器

描述

火车一个检测器

例子

探测器= trainyolov2objectdetector(trainingDataLGRAPH.选项返回培训的对象探测器,只使用输入指定的版本2(yolo v2)网络​​架构LGRAPH.这个选项输入指定检测网络的训练参数。

例子

探测器信息] = trainYOLOv2ObjectDetector(___还返回有关培训进度的信息,例如每次迭代的培训准确性和学习率。

恢复训练探测器

例子

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

你可以使用这个语法:

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

  • 提高通过增加迭代的最大数量的训练精度。

微调检测器

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

多尺度培训

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

例子

全部折叠

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

data =负载('vevicletrainingdata.mat');培训数据=数据。车辆培训数据;

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

dataDir=fullfile(toolboxdir(“愿景”),'VisionData');trainingData。我mageFilename = fullfile(dataDir,trainingData.imageFilename);

随机洗牌数据进行训练。

rng (0);shuffledIdx = randperm(高度(trainingData));trainingData = trainingData (shuffledIdx:);

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

IMDS = imageageAtastore(trainingData.ImageFilename);

使用表中的标签列创建BoxLabeldAtastore。

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

组合数据存储。

Ds = combine(imds, blds);

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

网=负载(“yolov2VehicleDetector.mat”);lgraph = net.lgraph
LGRAPHE=LayerGraph,属性:Layers:[25×1 nnet.cnn.layer.layer]连接:[24×2表格]输入名称:{'input'}输出名称:{'YOLOV2OUTPUTTALYER'}

检查YOLO V2网络中的图层及其属性。您还可以按照所提供的步骤创建YOLO V2网络创建YOLO V2目标检测网络

lgraph.Layers
ANS = 25×层阵列层:1 '输入' 图像输入128x128x3图像2 'conv_1' 卷积16分3×3的卷积与步幅[1 1]和填充[1 1 1 1] 3 'BN1' 批量标准化批正常化4 'relu_1'RELU RELU 5 'maxpool1' 最大池2x2的最大蓄留与步幅[2 2]和填充[0 0 0 0] 6 'conv_2' 卷积32分3×3的卷积与步幅[1 1]和填充[1 1 1 1] 7“BN2'批量标准化批正常化8 'relu_2' RELU RELU 9 'maxpool2' 最大池2x2的最大蓄留与步幅[2 2]和填充[0 0 0 0] 10 'conv_3' 卷积64分3×3的卷积与步幅[1 1]和填充[1 1 1 1] 11 'BN3' 批量标准化批正常化12 'relu_3' RELU RELU 13 'maxpool3' 最大池2x2的最大蓄留与步幅[2 2]和填充[0 0 0 0] 14 'conv_4' 卷积128 3x3的与步幅[1 1]和填充[1 1 1 1] 15 'BN4' 批量标准化批正常化16 'relu_4' RELU RELU 17 'yolov2Conv1' 卷积128分的3×3的卷积与步幅[1 1卷积]和p一个dding 'same' 18 'yolov2Batch1' Batch Normalization Batch normalization 19 'yolov2Relu1' ReLU ReLU 20 'yolov2Conv2' Convolution 128 3x3 convolutions with stride [1 1] and padding 'same' 21 'yolov2Batch2' Batch Normalization Batch normalization 22 'yolov2Relu2' ReLU ReLU 23 'yolov2ClassConv' Convolution 24 1x1 convolutions with stride [1 1] and padding [0 0 0 0] 24 'yolov2Transform' YOLO v2 Transform Layer. YOLO v2 Transform Layer with 4 anchors. 25 'yolov2OutputLayer' YOLO v2 Output YOLO v2 Output with 4 anchors.

配置网络培训选项。

选择= trainingOptions ('SGDM'......“InitialLearnRate”,0.001,......“放牧”,真的,......'MiniBatchSize'16,......'maxepochs',30,......“洗牌”'绝不'......“详细频率”,30,......“CheckpointPath”,Tempdir);

培训YOLO v2网络。

[探测器,信息] = Trainyolov2ObjectDetector(DS,LGraph,选项);
************************************************************************* 培训YOLO v2意思对象探测器以下对象类:*车辆培训单CPU。|========================================================================================| | 时代| |迭代时间| Mini-batch | Mini-batch |基地学习  | | | | ( hh: mm: ss) | RMSE | |率损失  | |========================================================================================| | 1 | 1 | 00:00:01 | 7.13 | 50.8 | 0.0010 | | 2 |3.0|00:00:14 | 1.35 | 1.8 | 0.0010 | | 4 | 60 | 00:00:27 | 1.13 | 1.3 | 0.0010 | | 5 | 90 | 00:00:39 | 0.64 | 0.4 | 0.0010 | | 7 | 120 | 00:00:51 | 0.65 | 0.4 | 0.0010 | | 9 | 150 | 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 | |========================================================================================| Detector training complete. *************************************************************************

检查探测器的属性。

探测器
detector = yolov2ObjectDetector带有属性:ModelName: 'vehicle' Network: [1×1 DAGNetwork] TrainingImageSize: [128 128] AnchorBoxes: [4×2 double] ClassNames: vehicle

您可以通过检查每个迭代训练损失验证训练精度。

图图(info.TrainingLoss)网格xlabel('迭代数量')ylabel('每次迭代的训练损失'

将测试图像读入工作区。

IMG = imread('detectcars.png');

运行车辆检测测试图像的训练YOLO V2对象检测器。

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

显示检测结果。

如果(~isempty(bboxes)) img = insertObjectAnnotation(img,“矩形”,bboxes,分数);结束图imshow (img)

输入参数

全部折叠

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

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

    数据 盒子 标签
    第一列可以包含数据,例如点云数据或图像。 第二列必须是一个单元阵列,其中包含-形式的边界框的by-5矩阵[x中央y中央宽度高度偏航].矢量代表每个图像中对象的边界框的位置和大小。 第三列必须是包含的单元数组-包含对象类名的by-1分类向量。数据存储返回的所有分类数据必须包含相同的类别。

    欲了解更多信息,请参阅用于深度学习的数据存储(深学习工具箱)

  • 如果使用表,则该表必须有两个或更多列。表的第一列必须包含带有路径的图像文件名。图像必须是灰度或真彩色(RGB),他们可以在任何格式的支持金宝appImread..每个剩余列必须是包含的单元格向量-by-4矩阵,表示单个对象类,例如车辆, 或者停止标志这个columns contain 4-element double arrays of格式的边界框[xy宽度高度].该格式指定了相应图像中边界框的左上角位置和大小。要创建一个地面真值表,可以使用图片标志应用程序或贴标签机视频应用程序。若要从产生地面实况训练数据表,使用objectDetectorTrainingData函数。

请注意

当使用表指定训练数据时,trainYOLOv2ObjectDetector功能检查这些条件

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

  • 边界框不能为空,且必须在图像区域内。而训练网络,该函数忽略空包围盒并且位于部分或完全的图像区域外的边界框。

图层图,指定为LayerGraph对象。层图描述了YOLO v2的网络结构。您可以使用yolov2Layers函数。或者,您可以使用yolov2TransformLayeryolov2reorglayer., 和yolov2OutputLayer职能。有关创建自定义YOLO V2网络的更多详细信息,请参阅设计一个YOLO V2探测网

培训选项,指定为TrainingOptionsSGDM.培训选项RMSPROP, 或者培训选项ADAM对象返回的培训选项(深学习工具箱)函数。要指定网络培训的求解名称和其他选项,请使用培训选项(深学习工具箱)函数。

请注意

trainYOLOv2ObjectDetector功能不支持以下培训选项:金宝app

  • 培训选项洗牌价值观,“一次”'每个时代'在使用数据存储输金宝app入时不支持。

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

保存的检查点检测器,指定为yolov2ObjectDetector对象。在每个时代保存探测器,设置“CheckpointPath”的名称-值参数培训选项函数。建议在每个epoch之后保存一个检查点,因为网络训练可能需要几个小时。

要为先前训练过的检测器加载检查点,请从检查点路径加载mat -文件。例如,如果检查点路径指定的对象的属性选项“/checkpath”,您可以使用此代码加载检查点mat文件。

data =负载('/checkpath/yolov2_checkpoint__216__2018_11_16__13_34_30.mat');检查点= data.detector;

MAT文件的名称包括探测器检查点时的迭代号和时间戳。探测器保存在探测器该文件的变量。通过这个文件回trainYOLOv2ObjectDetector功能:

yoloDetector=trainYOLOv2ObjectDetector(训练数据、检查点、选项);

以前训练的YOLO V2对象检测器,指定为ayolov2ObjectDetector对象。使用此语法继续使用额外的训练数据训练检测器,或执行更多的训练迭代以提高检测器的准确性。

用于多尺度训练的图像尺寸集合,指定为-by-2矩阵,其中每行的形式如下[高度宽度].对于每个训练时期,输入训练图像被随机地调整到的一个此集中指定的图像大小。

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

请注意

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

输出参数

全部折叠

受过训练的YOLO V2对象检测器,返回yolov2ObjectDetector对象。你可以训练YOLO V2对象检测器来检测多个对象类。

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

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

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

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

  • ValidationLoss- 在每次迭代确认损失。

  • 验证rmse.- 验证RMSE在每次迭代。

  • 最终验证损失- 在培训结束时最终确认的损失。

  • FinalValidationRMSE-培训结束时的最终验证RMSE。

每个字段是一个数字向量,每个训练迭代有一个元素。在特定迭代中未计算的值被指定为这个年代truct containsValidationLossValidationAccuracy验证rmse.最终验证损失, 和FinalValidationRMSE只有当字段选项指定验证数据。

更多关于

全部折叠

数据预处理

默认情况下,trainYOLOv2ObjectDetector函数对训练图像进行预处理:

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

  • 将输入图像的像素值归一化,使其位于[0,1]范围内。

当你使用一个表指定训练数据中,trainYOLOv2ObjectDetector函数执行预处理的数据增强。该函数扩充到输入数据集:

  • 水平地反映训练数据。训练数据中每幅图像水平翻转的概率为0.5。

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

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

使用数据存储指定培训数据时,trainYOLOv2ObjectDetector函数不执行数据增强。方法来增强数据存储中的训练数据转变功能然后,用增强培训数据训练网络。有关如何在使用数据存储时应用增强的更多信息,请参阅应用增强到数据存储中的培训数据(深学习工具箱)

培训损失

在训练过程中,YOLO v2目标检测网络优化了预测边界盒与地面真实值之间的MSE损失。损失函数定义为

K 1 σ. 0 年代 2 σ. j 0 B 1 j o b j x - x 2 + y - y 2 + K 1 σ. 0 年代 2 σ. j 0 B 1 j o b j w - w 2 + h - h 2 + K 2 σ. 0 年代 2 σ. j 0 B 1 j o b j C - C 2 + K 3. σ. 0 年代 2 σ. j 0 B 1 j n o o b j C - C 2 + K 4 σ. 0 年代 2 1 o b j σ. c c l 一个 年代 年代 e 年代 p c - p c 2

地点:

  • 年代为网格单元格的数量。

  • B是每个网格单元中的边界框数。

  • 1 j o b j 为1,如果j网格细胞中的边界框负责检测的对象。否则,它被设置为0甲网格单元负责检测对象,如果地面真实值与该网格单元格中的边界框的重叠大于或等于0.6。

  • 1 j n o o b j 为1,如果j网格细胞中的边界框不包含任何对象。否则设置为0。

  • 1 o b j 如果在网格单元中检测到对象,则为1。否则将其设置为0。

  • K1K2K3., 和K4是权重。要调整权重,修改有源器通过使用yolov2OutputLayer函数。

损失函数可分为三部分:

  • 本地化的损失

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

    • x y ,是中心的中心j相对于网格单元格的包围框

    • x y ,是相对于网格单元格的地面真理的中心

    • w h 是宽度和高度j网格细胞中的边界框,分别。预测的边界框的尺寸是相对于输入图像尺寸指定。

    • w h 网格单元格中地面的宽度和高度是真实的吗,分别。

    • K1为本地化损失的权重。增加这个值可以增加边界框预测错误的权重。

  • 信心损失

    损失函数中的第三个和第四项包括置信损失。第三个术语测量对象(置信度评分)中检测到对象时的错误j网格单元的边界框这个fourth term measures the objectness error when no object is detected in thej网格单元的边界框这个p一个rameters for computing the confidence loss are defined as follows.

    • C是自信心得分吗j网格细胞中的边界框

    • Ĉ是网格细胞中实际真相的信心得分

    • K2为在预测的边界框中检测到目标时,目标误差的权重。的值可以调整K2从包含对象的网格单元权衡信心分数。

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

    当不包含对象的网格单元数大于包含对象的网格单元数时,置信度损失会导致训练发散。为了补救这一点,增加价值为K2并降低值K3.

  • 分类损失

    损失函数中的第五个术语包括分类损失。例如,假设在网格单元中包含的预测边界框中检测到对象这个n,the classification loss measures the squared error between the class conditional probabilities for each class in grid cell这个p一个rameters for computing the classification loss are defined as follows.

    • pc)为对象类所估计的条件的类概率c在网格单元

    • p c 是对象类的实际条件类概率c在网格单元

    • K4为在网格单元中检测到目标时分类误差的权重。增加此值以增加分级损失的权重。

提示

工具书类

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

[2]约瑟。R和f。“YOLO 9000:更好、更快、更强。”在在IEEE会议计算机视觉与模式识别(CVPR)论文集, 6517 - 6525页。檀香山,HI: CVPR, 2017。

介绍了R2019a