主要内容

trainFastRCNNObjectDetector

火车快速R-CNN深学习对象探测器

描述

火车一个检测器

例子

trainedDetector= trainFastRCNNObjectDetector (trainingData,网络,选项)火车快速R-CNN与卷积神经网络(地区)对象探测器使用深度学习。你可以训练一个快速R-CNN检测器检测多个对象类。

这个函数需要深度学习工具箱™。也建议您使用CUDA并行计算工具箱™®使英伟达®GPU。关于支持计算能力的信息,看到万博1manbetxGPU的万博1manbetx支持版本(并行计算工具箱)

(trainedDetector,信息)= trainFastRCNNObjectDetector (___)还返回培训进展的信息,如培训损失和准确性,为每个迭代。

恢复训练一个检测器

trainedDetector= trainFastRCNNObjectDetector (trainingData,检查点,选项)从探测器检查点恢复训练。

调整一个检测器

trainedDetector= trainFastRCNNObjectDetector (trainingData,探测器,选项)持续训练检测器与额外的训练数据或执行更多的训练迭代提高探测器的准确性。

自定义区域的建议

trainedDetector= trainFastRCNNObjectDetector (___“RegionProposalFcn”,proposalFcn)选择火车一个定制的地区建议功能,proposalFcn,使用任何先前的输入。如果你不指定一个提议函数,那么这个函数使用箱子边缘的一种变体[2]算法。

额外的属性

trainedDetector= trainFastRCNNObjectDetector (___,名称,值)使用指定的一个或多个额外的选项名称,值对参数。

例子

全部折叠

负荷训练数据。

data =负载(“rcnnStopSigns.mat”,“stopSigns”,“fastRCNNLayers”);stopSigns = data.stopSigns;fastRCNNLayers = data.fastRCNNLayers;

fullpath添加到图像文件。

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

随机洗牌数据进行训练。

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

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

imd = imageDatastore (stopSigns.imageFilename);

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

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

结合数据存储。

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

停车标志训练图像有不同的大小。预处理的数据来调整图像和盒子一个预定义的大小。

ds =变换(ds, @(数据)preprocessData(数据,[920 968 3]));

设置网络培训选项。

选择= trainingOptions (“个”,“MiniBatchSize”10“InitialLearnRate”1 e - 3,“MaxEpochs”10“CheckpointPath”,tempdir);

火车快速R-CNN探测器。训练可以花几分钟来完成。

frcnn = trainFastRCNNObjectDetector (ds、fastRCNNLayers选项,“NegativeOverlapRange”,0.1 [0],“PositiveOverlapRange”(0.7 - 1));
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *培训快速R-CNN对象探测器以下对象类:* stopSign - - >从训练数据存储中提取区域建议……。培训单一的GPU。| = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = | | | |时代迭代时间| Mini-batch | Mini-batch | Mini-batch |基地学习| | | | (hh: mm: ss) | | |精度损失RMSE |率| | = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = | | 1 | 1 | 00:00:29 | 0.3787 | 93.59% | 0.96 | 0.0010 | | 10 | | 00:05:14 | 0.3032 | 98.52% | 0.95 | 0.0010 | | = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = |检测器训练完成。* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

测试快R-CNN探测器测试图像。

img = imread (“stopSignTest.jpg”);

运行探测器。

[bbox,分数,标签]=检测(frcnn, img);

显示检测结果。

detectedImg = insertObjectAnnotation (img,“矩形”bbox,分数);图imshow (detectedImg)

万博1manbetx支持功能

函数targetSize data = preprocessData(数据)% targetSize调整图像和边界框。规模= targetSize (1:2)。{1}/大小(数据,[1 - 2]);{1}= imresize数据(数据{1},targetSize (1:2));bboxes =圆(数据{2});{2}= bboxresize数据(bboxes、规模);结束

输入参数

全部折叠

贴上地面真理,指定为一个数据存储或表。

必须将每个边界框的格式(xy宽度高度]。

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

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

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

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

网络,作为一个指定SeriesNetwork(深度学习工具箱)一个数组的(深度学习工具箱)对象,layerGraph(深度学习工具箱)对象,或通过网络名称。网络训练分类中定义的对象类trainingData表。的SeriesNetwork(深度学习工具箱),(深度学习工具箱),layerGraph(深度学习工具箱)深度学习工具箱对象是可用的。

  • 当你指定网络SeriesNetwork一个数组的对象,或通过网络名称,网络会自动转换成快速R-CNN网络通过添加一个ROI马克斯池层,和新的分类和回归层支持对象检测。万博1manbetx此外,GridSize财产的ROI马克斯池层是设置为最后的输出大小马克斯汇聚层网络。

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

    层= [imageInputLayer([3] 28日28日)convolution2dLayer (5 [5], 10) reluLayer () fullyConnectedLayer (10) softmaxLayer () classificationLayer ());

  • 当你指定网络SeriesNetwork,数组,或网络的名字,权重为您添加额外的卷积和全层创建网络初始化“narrow-normal”

  • 网络名称必须是以下有效的网络名称。您还必须安装相应的插件。

    网络名称 特征提取层名称 ROI池层OutputSize 描述
    alexnet(深度学习工具箱) “relu5” (6 - 6) 去年马克斯池层是取代了ROI马克斯池层
    vgg16(深度学习工具箱) “relu5_3” 7 [7]
    vgg19(深度学习工具箱) “relu5_4”
    squeezenet(深度学习工具箱) “fire5-concat” (14日14)
    resnet18(深度学习工具箱) “res4b_relu” ROI池层特征提取后插入层。
    resnet50(深度学习工具箱) “activation_40_relu”
    resnet101(深度学习工具箱) “res4b22_relu”
    googlenet(深度学习工具箱) “inception_4d-output”
    mobilenetv2(深度学习工具箱) “block_13_expand_relu”
    inceptionv3(深度学习工具箱) “mixed7” 17 [17]
    inceptionresnetv2(深度学习工具箱) “block17_20_ac”

  • LayerGraph对象必须是一个有效的快速R-CNN对象检测网络。你也可以使用LayerGraph对象来训练一个定制的快速R-CNN网络。

    提示

    如果你的网络是一个DAGNetwork,可以使用layerGraph(深度学习工具箱)网络转换成一个函数LayerGraph对象。然后,创建一个自定义快速R-CNN网络所描述的创建快速R-CNN对象检测网络的例子。

看到开始使用R-CNN、快速R-CNN和R-CNN更快了解更多关于如何创建一个快速R-CNN网络。

训练选项,返回的trainingOptions(深度学习工具箱)从深度学习工具箱函数。指定网络培训解决者和其他选项,使用trainingOptions

请注意

trainFastRCNNObjectDetector不支持这些训练选项万博1manbetx:

  • trainingOptions“一次”“every-epoch”洗牌选项不支持数据存储输入相结合。万博1manbetx

  • trainingOptions“平行”“multi-gpu”ExecutionEnvironment选项不支持当你使用数据存储输入相万博1manbetx结合。

  • 当你设置不支持数据存储的输入万博1manbetxDispatchInBackground培训选项真正的

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

加载一个检查点之前训练检测器,加载MAT-file检查点的路径。例如,如果“CheckpointPath”的属性选项“/ tmp”,加载一个检查站MAT-file使用:

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

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

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

以前训练快速R-CNN对象探测器,指定为一个fastRCNNObjectDetector对象。

地区的建议方法,指定为一个函数处理。如果你不指定一个区域建议函数,函数实现EdgeBoxes的一种变体[2]算法。函数必须形式:

[bboxes,分数]= proposalFcn(我)

输入,,是一个图像中定义trainingData表。函数必须返回矩形框,bboxes,在一个4数组。每一行的bboxes包含一个研制出向量,(x, y,宽度、高度)。这个向量指定边界框的左上角和大小像素。函数必须返回一个为每一个边界框在一个分数1的向量。更高的分数值表明,边界框更有可能包含一个对象。用于选择最强的得分n地区,n被定义为的价值NumStrongestRegions

依赖关系

如果你不指定一个自定义建议功能和使用一个表输入训练数据时,该函数使用一个盒子边缘算法的变异。如果您使用多通道图像的输入训练数据的数据存储,您必须指定一个自定义区域建议功能。

名称-值对的观点

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

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

边界框重叠比率为积极的训练样本,指定为逗号分隔组成的“PositiveOverlapRange”和一个双元素向量。向量包含值区间[0,1]。重叠区域的建议与地面真理边界框指定范围内作为积极的训练样本。

重叠率的使用PositiveOverlapRangeNegativeOverlapRange被定义为:

一个 r e 一个 ( 一个 B ) 一个 r e 一个 ( 一个 B )


一个B边界框。

边界框重叠率-训练样本,指定为逗号分隔组成的NegativeOverlapRange和一个双元素向量。向量包含值区间[0,1]。重叠区域的建议与地面真理边界框指定范围内作为消极的训练样本。

重叠率的使用PositiveOverlapRangeNegativeOverlapRange被定义为:

一个 r e 一个 ( 一个 B ) 一个 r e 一个 ( 一个 B )


一个B边界框。

最大数量的最强的地区建议用于生成训练样本,指定为逗号分隔组成的“NumStrongestRegions”和一个正整数。降低这个值来加快处理时间为代价的训练精度。建议使用所有地区,设置这个值

数量的地区建议随机从每个训练样本图像,指定一个整数。减少区域样本的数量减少内存使用量和加速训练。减少价值还可以减少训练精度。

最小的图像尺寸的长度,宽度或高度,指定为逗号分隔组成的“SmallestImageDimension”和一个正整数。训练图像的大小,这样的长度最短尺寸等于指定的整数。默认情况下,训练图片不做调整。调整训练图像有助于减少计算成本和记忆训练时使用大图片。典型值的范围从400 - 600像素。

依赖关系

  • SmallestImageDimension属性仅支持输入训练数据表。万博1manbetx调整数据存储的输入数据输入,使用变换函数。

冷冻批规范化培训期间,指定为逗号分隔两人组成的“FreezeBatchNormalization”,真正的。值表示是否输入层到网络冻结在训练上。将这个值设置为真正的如果你训练一个小mini-batch大小。小批量大小导致不良批均值和方差的估计,需要有效的批处理规范化。

如果你不指定一个值为“FreezeBatchNormalization”,设置属性的函数

  • 真正的如果“MiniBatchSize的名称参数trainingOptions(深度学习工具箱)函数小于8

  • 如果“MiniBatchSize的名称参数trainingOptions(深度学习工具箱)函数是大于或等于8

您必须指定一个值为“FreezeBatchNormalizationoveride这种默认行为。

输出参数

全部折叠

训练快速R-CNN对象探测器,作为一个返回fastRCNNObjectDetector对象。

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

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

  • TrainingAccuracy在每一次迭代时,训练集精度。

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

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

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

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

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

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

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

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

提示

  • 为训练加速数据预处理,trainFastRCNNObjectDetector自动创建并使用一个平行池基于并行的偏好设置。关于这些首选项设置的更多细节,请参阅平行的偏好设置。使用并行计算偏好需要并行计算工具。

  • VGG-16、VGG-19 resnet - 101和Inception-ResNet-v2大型模型。训练和大图像能产生“内存溢出”错误。为了减轻这些错误,试着一个或多个选项:

  • 这个函数支持转移学习。万博1manbetx当你输入一个网络的名字,等“resnet50”,那么函数自动将网络转换成一个有效的快速的基于pretrained R-CNN网络模型resnet50(深度学习工具箱)模型。另外,手动指定一个自定义快速R-CNN网络使用LayerGraph(深度学习工具箱)从一个pretrained DAG网络。更多细节,请参阅创建快速R-CNN对象检测网络

  • 此表描述了如何将每个命名网络转换成一个快速R-CNN网络。特征提取层名称指定层由ROI池处理层。ROI的输出大小指定大小的ROI池的特征图谱输出层。

    网络名称 特征提取层名称 ROI池层OutputSize 描述
    alexnet(深度学习工具箱) “relu5” (6 - 6) 去年马克斯池层是取代了ROI马克斯池层
    vgg16(深度学习工具箱) “relu5_3” 7 [7]
    vgg19(深度学习工具箱) “relu5_4”
    squeezenet(深度学习工具箱) “fire5-concat” (14日14)
    resnet18(深度学习工具箱) “res4b_relu” ROI池层特征提取后插入层。
    resnet50(深度学习工具箱) “activation_40_relu”
    resnet101(深度学习工具箱) “res4b22_relu”
    googlenet(深度学习工具箱) “inception_4d-output”
    mobilenetv2(深度学习工具箱) “block_13_expand_relu”
    inceptionv3(深度学习工具箱) “mixed7” 17 [17]
    inceptionresnetv2(深度学习工具箱) “block17_20_ac”

    修改和网络转换成一个快速R-CNN网络,看到的设计一个R-CNN、快速R-CNN和更快的R-CNN模型

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

引用

[1]Girshick,罗斯。“快速R-CNN。”《IEEE计算机视觉国际会议。2015年。

[2]Zitnick c·劳伦斯,彼得亚雷美元。“边缘盒:从边缘定位对象的建议。”电脑Vision-ECCV 2014。施普林格国际出版,2014年,页391 - 405。

扩展功能

介绍了R2017a