主要内容

trainYOLOv2ObjectDetector

火车YOLO v2意思对象探测器

描述

火车一个检测器

例子

探测器= trainYOLOv2ObjectDetector (trainingData,lgraph,选项)返回一个对象检测器训练使用你只看一次版本2 (YOLO v2意思)网络架构指定的输入lgraph。的选项输入指定的训练参数的检测网络。

例子

(探测器,信息)= trainYOLOv2ObjectDetector (___)还返回培训进展的信息,如每个迭代的训练精度和学习速率。

恢复训练一个检测器

例子

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

你可以使用这个语法:

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

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

调整一个检测器

探测器= trainYOLOv2ObjectDetector (trainingData,探测器,选项)继续培训YOLO v2意思对象探测器。使用这个语法微调探测器。

多尺度的培训

探测器= trainYOLOv2ObjectDetector (___“TrainingImageSize”,trainingSizes)指定多尺度的图像大小培训通过使用一个名称-值对除了输入参数的前面的语法。

额外的属性

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

例子

全部折叠

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

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

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

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

随机洗牌数据进行训练。

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

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

imd = imageDatastore (trainingData.imageFilename);

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

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

结合数据存储。

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

加载一个preinitialized YOLO v2意思对象检测网络。

网=负载(“yolov2VehicleDetector.mat”);lgraph = net.lgraph
lgraph = LayerGraph属性:层:[25×1 nnet.cnn.layer.Layer]连接:[24×2表]InputNames:{“输入”}OutputNames: {“yolov2OutputLayer”}

检查层YOLO v2意思网络及其属性。您还可以创建YOLO v2意思网络按照给出的步骤创建YOLO v2意思对象检测网络

lgraph.Layers
ans x1 = 25层与层:数组输入的图像输入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 1 1 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锚YOLO v2意思转换层。25的yolov2OutputLayer YOLO v2输出YOLO v2意思意思输出4锚。

配置网络培训选项。

选择= trainingOptions (“个”,“InitialLearnRate”,0.001,“详细”,真的,“MiniBatchSize”,16岁,“MaxEpochs”30岁的“洗牌”,“永远”,“VerboseFrequency”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 | 30 | 00:00:14 | 1.35 | 1.8 | 0.0010 | | 4 | 60 | 00:00:27 | 1.13 | 1.3 | 0.0010 | | 90 | | 00:00:39 | 0.64 | 0.4 | 0.0010 | | 120 | | 00:00:51 | 0.65 | 0.4 | 0.0010 | | 150 | | 00:01:04 | 0.72 | 0.5 | 0.0010 | | 180 | | 00:01:16 | 0.52 | 0.3 | 0.0010 | | 210 | | 00:01:28 | 0.45 | 0.2 | 0.0010 | | 240 | | 00:01:41 | 0.61 | 0.4 | 0.0010 | | 270 | | 00:01:52 | 0.43 | 0.2 | 0.0010 | | 300 | | 00:02:05 | 0.42 | 0.2 | 0.0010 | | 19 | 330 | 00:02:17 | 0.52 | 0.3 | 0.0010 | | 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 | | 480 | | 27 00:03:18 | 0.65 | 0.4 | 0.0010 | | 510 | | 29日00:03:31 | 0.48 | 0.2 | 0.0010 | | 540 | | 00:03:42 | 0.34 | 0.1 | 0.0010 | | = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = |检测器训练完成。* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

检查检测器的属性。

探测器
探测器= yolov2ObjectDetector属性:ModelName:“车辆”网络:[1×1 DAGNetwork] TrainingImageSize: 128年[128]AnchorBoxes:[4×2双]一会:车辆

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

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

读一个测试图像到工作区中。

img = imread (“detectcars.png”);

运行训练YOLO v2意思对象探测器测试图像的车辆检测。

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

显示检测结果。

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

输入参数

全部折叠

贴上地面实况图像,指定为一个数据存储或表。

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

    数据 盒子 标签

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

    第二列必须包含的单元阵列5矩阵边界框的形式x中心,y中心,宽度,高度,偏航]。向量代表边界框的位置和大小的对象在每一个图像。

    如果这个边界框是axis-aligned,那么你不需要指定偏航。因此,将被描述为一个边界框4矩阵边界框的形式x中心,y中心,宽度,高度]。

    第三列必须包含的单元阵列1分类向量包含对象类的名字。所有分类数据存储返回的数据必须包含相同的类别。

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

  • 如果你使用一个表,表中必须有两个或两个以上的列。第一列的表必须包含图像文件的名称和路径。图像必须灰度或真彩(RGB),他们可以在任何支持的格式金宝appimread。剩余的每个列必须包含一个细胞向量4矩阵代表一个对象类,如车辆,,或停车标志。列包含第4单元阵列的两倍边界框的格式(x,y,宽度,高度]。格式指定边界框的左上角位置和大小在相应的形象。创建一个地面真值表,您可以使用图片标志应用程序或贴标签机视频应用。创建一个表的训练数据生成的地面实况,使用objectDetectorTrainingData函数。

请注意

当训练数据使用一个表,指定trainYOLOv2ObjectDetector函数检查这些条件

  • 边界框的值必须是整数。否则,函数自动轮每个noninteger值最接近的整数。

  • 边界框不能为空,必须在图像区域内。训练网络时,函数忽略空边框,边框部分或完全以外的地区形象。

层图,指定为一个LayerGraph对象。层图包含YOLO v2意思网络的体系结构。您可以创建这个网络使用yolov2Layers函数。或者,您可以创建网络层使用yolov2TransformLayer,yolov2ReorgLayer,yolov2OutputLayer功能。创建一个自定义的更多细节YOLO v2网络,意思明白了设计一个YOLO v2意思检测网络

训练选项,指定为一个TrainingOptionsSGDM,TrainingOptionsRMSProp,或TrainingOptionsADAM返回的对象trainingOptions(深度学习工具箱)函数。指定网络训练的解决者的名字和其他选项,使用trainingOptions(深度学习工具箱)函数。

请注意

trainYOLOv2ObjectDetector功能不支持这些训练选项:金宝app

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

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

救了探测器检查点,指定为一个yolov2ObjectDetector对象。保存探测器每个时代后,设置“CheckpointPath”名称-值参数时使用trainingOptions函数。拯救一个检查站后每一个时代都是推荐的,因为网络训练可以花费几个小时。

加载一个检查点之前训练检测器,加载MAT-file检查点的路径。例如,如果CheckpointPath指定的对象的属性选项' / checkpath ',您可以加载一个检查点MAT-file使用这段代码。

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

的名字MAT-file包括探测器时的迭代的数量和时间戳检查点得救了。保存在探测器探测器文件的变量。通过这个文件回trainYOLOv2ObjectDetector功能:

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

以前训练YOLO v2意思对象探测器,指定为一个yolov2ObjectDetector对象。使用这种语法继续训练检测器与额外的训练数据或执行迭代更多的培训来提高探测器的准确性。

多尺度的图像大小培训,指定为一个2矩阵,每一行的形式高度宽度]。对于每一个培训时代,输入图像随机大小的一个培训在这个集合中指定图像大小。

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

请注意

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

名称-值参数

指定可选的逗号分隔条名称,值参数。的名字参数名称和吗价值相应的价值。的名字必须出现在引号。您可以指定几个名称和值对参数在任何顺序Name1, Value1,…,的家

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

检测器训练实验监测、指定为一个experiments.Monitor(深度学习工具箱)为使用对象实验管理器(深度学习工具箱)应用。你可以用这个对象的进步跟踪培训,培训结果表,更新信息字段的记录值指标使用的培训,和生产培训的情节。

在训练监控信息:

  • 在每个迭代训练损失。

  • 在每个迭代训练精度。

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

  • 在每个迭代学习速率。

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

  • 在每一次迭代时确认损失。

  • 在每一次迭代时验证精度。

  • 验证RMSE在每个迭代。

计算指标训练结束时:

  • 最终确认损失的培训。

  • 最后验证RMSE末尾的培训。

输出参数

全部折叠

训练YOLO v2意思对象探测器,返回yolov2ObjectDetector对象。你可以训练YOLO v2意思对象探测器探测到多个对象类。

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

  • TrainingLoss——培训损失在每个迭代的均方误差(MSE)计算定位误差的总和,信心丧失,分类损失。关于培训损失函数的更多信息,请参阅培训损失

  • TrainingRMSE——训练均方误差(RMSE)训练的RMSE计算损失在每个迭代。

  • BaseLearnRate在每一次迭代时,学习速率。

  • ValidationLoss在每一次迭代时——确认损失。

  • ValidationRMSE——验证RMSE在每个迭代。

  • FinalValidationLoss——最终验证损失在结束训练。

  • FinalValidationRMSE——最终验证RMSE结束培训。

每个字段是一个数字向量与每训练迭代的一个元素。没有在一个特定的迭代计算出来的值被分配。该结构包含ValidationLoss,ValidationAccuracy,ValidationRMSE,FinalValidationLoss,FinalValidationRMSE只有当字段选项指定验证数据。

更多关于

全部折叠

数据预处理

默认情况下,trainYOLOv2ObjectDetector功能的训练图像进行预处理:

  • 调整输入图像匹配的输入规模网络。

  • 输入图像的像素值正常化躺在[0,1]范围。

当你指定训练数据通过使用一个表,trainYOLOv2ObjectDetector函数执行数据增加预处理。功能增强的输入数据集:

  • 水平反映了训练数据。概率水平翻转每个图像的训练数据是0.5。

  • 均匀缩放(缩放)的训练数据由一个比例因子,从连续均匀分布随机选择的范围[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。

  • K1,K2,K3,K4是权重。权重调整,修改LossFactors通过使用属性的输出层yolov2OutputLayer函数。

损失函数可以分成三个部分:

  • 本地化的损失

    第一和第二项损失函数包括本地化的损失。它测量误差预测之间的边界框和地面真理。本地化的损失计算的参数包括位置,预测边界框的大小,和地面真理。定义如下的参数。

    • ( x , y ) 的中心j相对于网格单元边界框

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

    • w h 的宽度和高度是吗j网格单元的边界框,分别。预测指定边界框的大小相对于输入图像的大小。

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

    • K1是本地化的重量损失。增加这个值增加weightage边界框预测错误。

  • 信心丧失

    第三和第四项损失函数组成的信心丧失。第三项措施客体性(信心得分)对象时检测到的错误j网格单元的边界框。第四项措施客体性错误时,没有检测到对象j网格单元的边界框。参数计算的信心损失定义如下。

    • C信心的分数吗j网格单元的边界框

    • Ĉ是地面真理的信心得分在网格单元

    • K2是对象的重量错误,当检测到一个对象的预测边界框。你可以调整的价值K2衡量信心得分从网格细胞包含对象。

    • K3是对象的重量错误,当一个对象不是发现在预测边界框。你可以调整的价值K3衡量信心得分从网格细胞不包含对象。

    信心丧失会导致训练发散当网格细胞的数量不包含对象不仅仅是包含对象的网格细胞的数量。为了弥补这一点,增加的值K2和减少的值K3

  • 分类损失

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

    • p(c)是对象类的类条件概率估计c在网格单元

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

    • K4是分类错误的重量网格中的对象时检测到细胞。增加这个值增加的weightage分类损失。

提示

引用

[1]约瑟。R, s . k . Divvala r.b Girshick, f·阿里。“你只看一次:统一、实时检测。”In《IEEE计算机视觉与模式识别会议(CVPR),779 - 788页。内华达州拉斯维加斯:CVPR, 2016。

[2]约瑟。R和f·阿里。“YOLO 9000:意思更好、更快、更强”。In《IEEE计算机视觉与模式识别会议(CVPR),6517 - 6525页。你好:火奴鲁鲁CVPR, 2017年。

介绍了R2019a