主要内容

trainFasterRCNNObjectDetector

训练一个更快的R-CNN深度学习对象检测器

描述

火车一个检测器

例子

训练有弦= trainfasterrcnnobjectdetector(trainingData网络选项使用深度学习训练更快的R-CNN(卷积神经网络区域)目标检测器。你可以训练一个更快的R-CNN检测器来检测多个对象类。

此功能要求您拥有深度学习工具箱™。建议您也有并行计算工具箱™与CUDA一起使用®使英伟达®GPU。有关支持的计算能力的信息,请参见万博1manbetxGPU支万博1manbetx持情况(并行计算工具箱)

训练有弦信息) = trainFasterRCNNObjectDetector (___还返回关于培训进度的信息,例如每次迭代的培训损失和准确性。

恢复训练探测器

训练有弦= trainfasterrcnnobjectdetector(trainingData检查点选项从探测器检查点恢复培训。

调整一个检测器

训练有弦= trainfasterrcnnobjectdetector(trainingData探测器选项继续训练一个更快的R-CNN对象检测器,带有额外的微调选项。将此语法与额外的训练数据一起使用,或执行更多的训练迭代,以提高检测器的准确性。

额外的属性

训练有弦= trainfasterrcnnobjectdetector(___名称,价值使用一个或多个指定的其他选项名称,价值对参数和任何先前的输入。

例子

全部收缩

加载培训数据。

data = load(“fasterRCNNVehicleTrainingData.mat”);trainingData = data.vehicleTrainingData;trainingData。我米一个geFilename = fullfile(toolboxdir(“愿景”),“visiondata”...trainingData.imageFilename);

随机抽搐数据进行培训。

RNG(0);shuffledidx = randperm(高度(trainingdata));trainingdata = trainingdata(shuffledidx,:);

使用表中的文件创建一个图像数据存储。

IMDS = imageageAtastore(trainingData.ImageFilename);

使用表中的标签列创建框标签数据存储。

BLDS = BoxLabeldAtastore(TrainingData(:,2:结束));

组合数据存储。

Ds = combine(imds, blds);

设置网络层。

lgraph = layerGraph (data.detector.Network);

配置培训选项。

选项=培训选项(“个”...“MiniBatchSize”, 1...'italllearnrate'1 e - 3,...“MaxEpochs”7...“VerboseFrequency”,200,...'checkpoinspath', tempdir);

火车探测器。训练需要几分钟。调整负重叠范围和正重叠范围,以确保训练样本与地面真实紧密重叠。

检测器= trainFasterRCNNObjectDetector(ds, lgraph, options,...'负极的贪婪', 0.3 [0],...“PositiveOverlapRange”(0.6 - 1));
************************************************************************* Training a Faster R-CNN Object Detector for the following object classes: * vehicle Training on single GPU. Initializing input data normalization. |=============================================================================================================================================| | Epoch | Iteration | Time Elapsed | Mini-batch | Mini-batch | Mini-batch | RPN Mini-batch | RPN Mini-batch | Base Learning | | | | (hh:mm:ss) | Loss | Accuracy | RMSE | Accuracy | RMSE | Rate | |=============================================================================================================================================| | 1 | 1 | 00:00:00 | 0.8771 | 97.30% | 0.83 | 91.41% | 0.71 | 0.0010 | | 1 | 200 | 00:01:15 | 0.5324 | 100.00% | 0.15 | 88.28% | 0.70 | 0.0010 | | 2 | 400 | 00:02:40 | 0.4732 | 100.00% | 0.15 | 92.19% | 0.63 | 0.0010 | | 3 | 600 | 00:04:03 | 0.4776 | 97.14% | 0.09 | 96.88% | 0.59 | 0.0010 | | 3 | 800 | 00:05:23 | 0.5269 | 97.44% | 0.18 | 89.06% | 0.68 | 0.0010 | | 4 | 1000 | 00:06:44 | 0.9749 | 100.00% | | 85.16% | 1.00 | 0.0010 | | 5 | 1200 | 00:08:07 | 1.1952 | 97.62% | 0.13 | 77.34% | 1.27 | 0.0010 | | 5 | 1400 | 00:09:24 | 0.6577 | 100.00% | | 76.38% | 0.72 | 0.0010 | | 6 | 1600 | 00:10:46 | 0.6951 | 100.00% | | 90.62% | 0.94 | 0.0010 | | 7 | 1800 | 00:12:08 | 0.5341 | 96.08% | 0.09 | 86.72% | 0.53 | 0.0010 | | 7 | 2000 | 00:13:26 | 0.3333 | 100.00% | 0.12 | 94.53% | 0.61 | 0.0010 | | 7 | 2065 | 00:13:52 | 1.0564 | 100.00% | | 71.09% | 1.23 | 0.0010 | |=============================================================================================================================================| Detector training complete. *******************************************************************

在测试图像上测试更快的R-CNN检测器。

img = imread (“highway.png”);

运行探测器。

[bbox, score, label] =检测(检测,img);

显示检测结果。

detectedimg = insertshape(img,'矩形',bbox);图imshow(detectedimg)

输入参数

全部收缩

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

每个边界框必须采用以下格式[xy宽度高度].

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

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

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

  • 如果使用表,则表必须具有两个或多个列。表的第一列必须包含具有路径的图像文件名。图像必须是灰度或TRUECOLOR(RGB),它们可以以任何格式支持万博1manbetxImread..每个剩余列必须是包含的单元格向量-B-4表示单个对象类的矩阵,例如车辆,或停车标志.列包含4个元素的双数组格式的边界框[xy宽度高度].该格式指定了相应图像中边界框的左上角位置和大小。要创建一个地面真值表,可以使用图片标志应用程序或视频贴图要从生成的ground truth创建一个训练数据表,使用objectDetectorTrainingData功能。

网络,指定为SeriesNetwork(深度学习工具箱),数组(深度学习工具箱)对象,分层图(深度学习工具箱)对象,或根据网络名称。对网络进行训练,对定义的对象类进行分类trainingData表格使用SeriesNetwork(深度学习工具箱)(深度学习工具箱), 和分层图(深度学习工具箱)对象,你必须有深度学习工具箱。

  • 当您指定网络为SeriesNetwork,数组该函数通过添加region proposal network (RPN)、ROI max pooling层以及新的分类和回归层来支持对象检测,将网络转换为Faster R-CNN网络。万博1manbetx此外,GridSize属性设置为网络中最后一个最大池化层的输出大小。

  • 的数组(深度学习工具箱)对象必须包含一个支持对象类数量的分类层,再加上一个背景类。万博1manbetx使用此输入类型自定义每一层的学习速率。数组的一个例子(深度学习工具箱)对象:

    layers = [imageInputLayer([28 28 3])卷积2dlayer ([5 5],10) reluLayer() fulllyconnectedlayer (10) softmaxLayer() classificationLayer()];

  • 将网络指定为SeriesNetwork目的,数组,或按网络名称,附加卷积和全连接层的权重被初始化为'窄正常'.该函数添加了这些权重来创建网络。

  • 网络名称必须是以下有效的网络名称之一。您还必须安装相应的附加组件。

    网络名称 特征提取层名称 ROI池汇集层输出 描述
    alexnet(深度学习工具箱) “relu5” [6 6] 最后的最大池层由ROI MAX池层替换
    vgg16(深度学习工具箱) “relu5_3” 7 [7]
    vgg19(深度学习工具箱) “relu5_4”
    squeezenet(深度学习工具箱) “fire5-concat” (14日14)
    resnet18(深度学习工具箱) 'res4b_relu' 在特征提取层之后插入感兴趣区域池化层。
    resnet50(深度学习工具箱) 'activation_40_relu'
    Resnet101.(深度学习工具箱) 'res4b222_relu'
    googlenet(深度学习工具箱) “inception_4d-output”
    mobilenetv2(深度学习工具箱) “block_13_expand_relu”
    inceptionv3(深度学习工具箱) '混合7' 17 [17]
    inceptionresnetv2(深度学习工具箱) “block17_20_ac”

  • LayerGraphobject必须是一个有效的Faster R-CNN对象检测网络。你可以使用Fasterrcnlayers.功能创建一个LayerGraph目标训练一个定制的更快的R-CNN网络。

    提示

    如果您的网络是一个DAGNetwork,可以使用分层图(深度学习工具箱)函数将网络转换为LayerGraph对象。然后,创建一个自定义的Faster R-CNN网络创建更快的R-CNN对象检测网络的例子。

有关创建更快的R-CNN网络的更多信息,请参见开始与R-CNN,快速的R-CNN,更快的R-CNN

培训选项,由此返回培训选项(深度学习工具箱)功能(需要深度学习工具箱)。为网络培训指定求解器和其他选项,使用培训选项

请注意

trainFasterRCNNObjectDetector不支持以下培训选项万博1manbetx:

  • 设置时不支持数据存储区输入万博1manbetxDispatchInBackground培训选择真的

此外,如果您使用组合数据存储输入,该函数不支持以下培训选项:万博1manbetx

  • '一次''每个时代'值的洗牌的参数

  • '平行线'“multi-gpu”值的ExecutionEnvironment的参数

保存检测器检查点,指定为fasterRCNNObjectDetector对象。在每个时代保存探测器,设置'checkpoinspath'属性时使用培训选项功能。建议在每个时代保存检查点,因为网络培训可能需要几个小时。

要加载先前培训的检测器的检查点,请从检查点路径加载MAT文件。例如,如果'checkpoinspath'财产选项“/ tmp”,加载检查点mat -文件使用:

data = load(“/ tmp / faster_rcnn_checkpoint__105__2016_11_18__14_25_08.mat”);

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

frcnn = trainFasterRCNNObjectDetector (stopSigns,...data.detector选项);

以前培训的R-CNN对象检测器更快,指定为afasterRCNNObjectDetector对象。使用此语法继续培训具有额外培训数据的探测器或执行更多培训迭代以提高探测器精度。

名称值对参数

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

例子:“PositiveOverlapRange”,(0.75 - 1)

训练方法,指定为逗号分隔对,由'训练方法”,要么“端到端”要么“四步”

  • “端到端”—同时训练区域提议和区域分类子网络。

  • “四步”—分四步分别训练region proposal和region classification子网络。

界定框重叠比率为正训练样本,指定为逗号分隔的配对组成“PositiveOverlapRange”以及以下其中之一:

  • 一个2元素矢量,指定所有四个训练阶段的相同重叠比率。

  • 一个2×2矩阵,仅用于端到端训练方法。矩阵的第一行定义了区域提案子网的重叠比率。第二行定义区域分类子网的重叠比率。

  • 一个4乘2的矩阵,仅用于四步训练法。矩阵的每一行指定了四个训练阶段的重叠比率。

取值范围是[0,1]。在指定范围内与地面真相边界框重叠的区域建议用作正训练样本。

用于两者的重叠率积极的宽容NegativeOverlapRange被定义为:

一个 r e 一个 一个 B 一个 r e 一个 一个 B


一个B边界框。

负训练样本的包围盒重叠率,指定为逗号分隔对,由'NegativeOverlapRange'和以下之一。

  • 一个2元素矢量,指定重叠比率。

  • 一个2×2矩阵,仅用于端到端训练方法。矩阵的第一行定义了区域提案子网的重叠比率。第二行定义区域分类子网的重叠比率。

  • 一个4乘2的矩阵,仅用于四步训练法。矩阵的每一行指定了四个训练阶段的重叠比率。

取值范围是[0,1]。在指定范围内与地面真值包围盒重叠的区域建议作为负训练样本。

用于两者的重叠率积极的宽容NegativeOverlapRange被定义为:

一个 r e 一个 一个 B 一个 r e 一个 一个 B


一个B边界框。

用于生成训练样本的最强区域建议的最大数量,指定为逗号分隔对,由'numstrontearch'一个正整数。减少此值以加速培训准确性成本的处理时间。要使用所有区域提案,请将此值设置为

从每个训练图像随机采样的区域提案数量,指定为整数,1×2向量或1×4向量。使用1-by-2向量进行端到端培训。使用1-by-4向量进行四步培训。减少样本的区域数量,以减少内存使用和加速培训。降低价值也可以降低训练准确性。

当你设置训练方法' 到“端到端”,区域提议的数量可以设置为1乘2的向量。向量的第一个元素必须是区域提议子网络的采样区域数。第二个元素必须是区域分类子网络的采样区域数。

当你设置训练方法' 到“四步”,区域提案的数量可以设置为1×4向量。的th元素指定要采样的区域数量th培训步骤。

指定为由逗号分隔的对组成的最小图像维的宽度或高度的长度'smallestimagedimension'一个正整数。调整训练图像的大小,使其最短维数的长度等于指定的整数。默认情况下,训练图像不会调整大小。调整训练图像的大小有助于减少在训练图像较大时使用的计算成本和内存。典型值范围为400-600像素。

依赖关系

  • SmallestimageMention.属性仅支持表输入培万博1manbetx训数据。要调整数据存储输入的输入数据的大小,请使用转变功能。

构建区域提议网络(RPN)锚盒金字塔的最小锚盒尺寸,指定为逗号分隔对,由“MinBoxSizes”2矩阵。每一行定义[高度宽度]一个锚箱。

默认值“汽车”设置使用了地面真实数据中每个类的边界框的最小尺寸和中值宽高比。为了去除冗余的盒大小,该函数将保留那些交集大于并集的值小于或等于0.5的盒。这种行为确保使用最少数量的锚盒来覆盖所有对象的大小和高宽比。

当锚盒是基于MinBoxSizes,th锚箱尺寸为:

round(MinBoxSizes(i,:) .* BoxPyramidScale,^ (0:NumBoxPyramidLevels-1)')

依赖关系

  • 如果您将网络指定为a,则无法使用此属性LayerGraph如果你从一个检测器检查点继续训练。

  • MinBoxSizes属性仅支持表格格式万博1manbetx的输入培训。要估计数据存储输入的锚框,请使用estimateAnchorBoxes功能。

锚盒金字塔比例因子用于先后上档次的锚盒尺寸,指定为逗号分隔对组成'boxpyramidscale'和一个标量。建议取值范围为1 ~ 2。增加这个值以获得更快的结果。减少数字以获得更大的准确性。

依赖关系

  • boxpyramidscale.属性仅支持表格式的万博1manbetx输入培训数据。要估计数据存储输入的锚框,请使用estimateAnchorBoxes功能。

锚盒金字塔中的级别数,指定为逗号分隔对组成“NumBoxPyramidLevels”和一个标量。选择一个值,确保多尺度锚盒的大小与地面真实数据中的对象的大小具有可比性。

默认设置“汽车”根据地面真实数据中对象的大小选择层次的数量。级别的数量被选择,以覆盖对象的大小范围。

依赖关系

  • NumBoxPyramidLevels属性仅支持表格式的万博1manbetx输入培训数据。要估计数据存储输入的锚框,请使用estimateAnchorBoxes功能。

训练期间的冷冻批归一化,指定为逗号分隔的对,包含'FreezebatchNormalization.”,真的要么错误的.该值表示在培训期间是否冻结输入层到网络。将此值设置为真的如果你接受的是小批量的培训。小批量会导致对批量均值和方差的较差估计,而这是有效批量标准化所必需的。

如果不指定'的值FreezebatchNormalization.',该函数将属性设置为:

  • 真的如果“小匹匹匹匹配的name-value参数培训选项(深度学习工具箱)函数小于8

  • 错误的如果“小匹匹匹匹配的name-value参数培训选项(深度学习工具箱)功能大于或等于8

您必须为'指定值FreezebatchNormalization.“覆盖此默认行为。

输出参数

全部收缩

训练更快的R-CNN对象检测器,返回为fasterRCNNObjectDetector对象。

培训进度信息,作为具有八个字段的结构数组。每个字段对应于训练阶段。

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

  • TrainingAccuracy- 训练在每次迭代时设置精度。

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

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

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

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

  • ValidationRMSE-每次迭代验证RMSE。

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

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

每个字段是一个数字向量,每个训练迭代包含一个元素。在特定迭代中未计算的值被赋值为.该结构包含验证录ValidationAccuracyValidationRMSEFinalValidationLoss, 和FinalValidationRmse.仅当田间的时候选项指定验证数据。

提示

  • 为了加快训练数据的预处理,trainFastRCNNObjectDetector基于并行首选项设置自动创建和使用并行池。有关设置这些首选项的详细信息,请参见平行的偏好设置.使用并行计算首选项需要并行计算工具箱。

  • VGG-16、VGG-19、ResNet-101和Inception-ResNet-v2是大型模型。使用大图像进行训练会产生“内存不足”的错误。为了减少这些错误,尝试以下一个或多个选项:

  • 此功能支持转移学习。万博1manbetx输入时网络按名称,如'resnet50',然后自动将网络转换为基于预训练的Faster R-CNN网络模型resnet50(深度学习工具箱)模型。或者,通过使用使用方法手动指定自定义R-CNN网络LayerGraph(深度学习工具箱)从预先训练的DAG网络中提取的。有关详细信息,请参见创建更快的R-CNN对象检测网络

  • 该表描述了如何将每个命名的网络转换为一个更快的R-CNN网络。特征提取层名称指定了ROI池层要处理的层。ROI输出大小指定了ROI池化层输出的特征映射的大小。

    网络名称 特征提取层名称 ROI池汇集层输出 描述
    alexnet(深度学习工具箱) “relu5” [6 6] 最后的最大池层由ROI MAX池层替换
    vgg16(深度学习工具箱) “relu5_3” 7 [7]
    vgg19(深度学习工具箱) “relu5_4”
    squeezenet(深度学习工具箱) “fire5-concat” (14日14)
    resnet18(深度学习工具箱) 'res4b_relu' 在特征提取层之后插入感兴趣区域池化层。
    resnet50(深度学习工具箱) 'activation_40_relu'
    Resnet101.(深度学习工具箱) 'res4b222_relu'
    googlenet(深度学习工具箱) “inception_4d-output”
    mobilenetv2(深度学习工具箱) “block_13_expand_relu”
    inceptionv3(深度学习工具箱) '混合7' 17 [17]
    inceptionresnetv2(深度学习工具箱) “block17_20_ac”

    有关如何修改网络转换为更快的R-CNN网络的信息,请参见设计一个R-CNN,快速的R-CNN,和一个更快的R-CNN模型

  • 在训练期间,从训练图像处理多个图像区域,每个图像的图像区域的数量由NumRegionsToSample财产。的积极的宽容NegativeOverlapRange属性控制哪些图像区域用于训练。正训练样本是那些与地面真值框重叠0.6到1.0的样本,通过边界框的相交-联合度量(IoU)来度量。负训练样本是那些重叠为0到0.3的样本。通过在验证集中测试训练过的检测器来选择这些属性的值。

    重叠值 描述
    积极的宽容设置(0.6 - 1) 正训练样本设置为与地面真值框重叠0.6到1.0的样本,由边界框IoU度量度量。
    NegativeOverlapRange设置0.3 [0] 将负训练样本设置为与ground truth box重叠的样本值为0到0.3。

    如果你设置了积极的宽容(0.6 - 1)然后,该功能将正面训练样本设置为与地面真相框重叠的样本0.6到1.0,由边界框IOU度量测量。如果你设置了NegativeOverlapRange0.3 [0],则函数将负训练样本设置为与ground truth box重叠的样本值为0 ~ 0.3。

  • 使用培训选项(深度学习工具箱)函数来启用或禁用详细打印。

兼容性考虑因素

全部展开

R2019B的行为更改

参考文献

[1]任,S.,K。他,R.Girschick和J. Sun.“更快的R-CNN:通过区域提案网络实时对象检测。”神经信息处理系统研究进展.28日,2015卷。

[2] Girshick, R。“快速R-CNN。”IEEE计算机视觉国际会议论文集, 1440 - 1448。智利圣地亚哥:IEEE, 2015。

R.格希克、J.多纳休、T.达雷尔和J.马利克。精确目标检测和语义分割的丰富特征层次2014 IEEE计算机视觉与模式识别会议论文集,580-587。哥伦布,哦:IEEE,2014。

C. L.齐特尼克和P. Dollar。"边缘框:从边缘定位对象"计算机Vision-ECCV 2014, 391 - 405。瑞士苏黎世:ECCV, 2014。

扩展功能

介绍了R2017a