主要内容

trainFastRCNNObjectDetector

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

描述

火车一个检测器

例子

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

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

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

恢复训练探测器

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

微调检测器

训练有弦= trainFastRCNNObjectDetector (trainingData探测器选项继续培训探测器,额外的培训数据或执行更多培训迭代以提高探测器精度。

自定义区域的建议

训练有弦= trainFastRCNNObjectDetector (___“RegionProposalFcn”,proposalFcn还可以训练一个定制的区域建议功能,proposalFcn,使用前面的任何输入。如果不指定建议函数,则该函数将使用边缘框的变体[2]算法。

额外的属性

训练有弦= trainFastRCNNObjectDetector (___名称,价值使用一个或多个指定的其他选项名称,价值对论点。

例子

全部收缩

加载培训数据。

data = load('rcnnstopsigns.mat'“stopSigns”'fastrcnlayers');stopSigns = data.stopSigns;fastRCNNLayers = data.fastRCNNLayers;

将满目标添加到图像文件。

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

随机洗牌数据进行训练。

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

使用表中的文件创建IMAGEDATASTORE。

imds = imageageataStore(stopsigns.imagefilename);

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

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

组合数据存储。

Ds = combine(imds, blds);

停止标志训练图像有不同的尺寸。预处理数据以将图像和框中调整为预定义大小。

DS =变换(DS,@(数据)预处理数据(数据,[920 968 3]));

设置网络培训选项。

选项=培训选项(“个”......“MiniBatchSize”10,......'italllearnrate',1e-3,......'maxepochs'10,......'checkpoinspath',Tempdir);

培训快速的R-CNN探测器。培训可能需要几分钟才能完成。

frcnn = trainfastrcnnobjectdetector(ds,fastrcnlayers,选项,......'负极的贪婪',[0 0.1],......“PositiveOverlapRange”(0.7 - 1));
*******************************************************************培训一个Fast R-CNN Object Detector for the following object classes: * stopSign --> Extracting region proposals from training datastore...done. Training on single GPU. |=======================================================================================================| | Epoch | Iteration | Time Elapsed | Mini-batch | Mini-batch | Mini-batch | Base Learning | | | | (hh:mm:ss) | Loss | Accuracy | RMSE | Rate | |=======================================================================================================| | 1 | 1 | 00:00:29 | 0.3787 | 93.59% | 0.96 | 0.0010 | | 10 | 10 | 00:05:14 | 0.3032 | 98.52% | 0.95 | 0.0010 | |=======================================================================================================| Detector training complete. *******************************************************************

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

img = imread (“stopSignTest.jpg”);

运行探测器。

[Bbox,Score,Label] =检测(FRCNN,IMG);

显示检测结果。

detectedImg = insertObjectAnnotation (img,'矩形',bbox,得分);图imshow(detectedimg)

金宝app支持功能

功能targetSize data = preprocessData(数据)%调整图像和包围框的大小为targetSize。scale = targetsize(1:2)./大小(数据{1},[1 2]);数据{1} = IMResize(数据{1},targetsize(1:2));bboxes = round(数据{2});数据{2} = BboxResize(Bboxes,Scale);结尾

输入参数

全部收缩

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

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

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

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

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

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

网络,指定为SeriesNetwork(深度学习工具箱),一系列(深度学习工具箱)对象,分层图(深度学习工具箱)对象,或根据网络名称。对网络进行训练,对定义的对象类进行分类trainingData桌子。的SeriesNetwork(深度学习工具箱)(深度学习工具箱), 和分层图(深度学习工具箱)对象可在深度学习工具箱中使用。

  • 当您指定网络为SeriesNetwork,一系列对象或通过网络名称,通过添加ROI MAX池层和新分类和回归层来自动将网络自动转换为快速R-CNN网络,以支持对象检测。金宝app此外,这是网格化ROI MAX池层的属性设置为网络中最后最大池池层的输出大小。

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

    图层= [imageInputLayer([28 28 3])卷积2dlayer([5 5],10)relulayer()全连接列(10)softmaxlayer()scassificationlayer()];

  • 将网络指定为SeriesNetwork阵列或网络按名称,初始化为创建网络的额外卷积和完全连接的图层的权重'窄正常'

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

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

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

    提示

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

看到开始与R-CNN,快速的R-CNN,更快的R-CNN了解更多关于如何创建一个快速R-CNN网络。

培训选项,由培训选项(深度学习工具箱)函数来自深度学习工具箱。为网络训练指定求解器和其他选项,请使用培训选项

请注意

trainFastRCNNObjectDetector不支持以下培训选项金宝app:

  • 培训选项'一次''每个时代'洗牌组合数据存储区输入不支持选项。金宝app

  • 培训选项'平行线'“multi-gpu”execultenvironment.当您使用组合数据存储输入时,不支金宝app持选项。

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

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

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

data = load('/tmp/faster_rcnn_checkpoint__105__2016_11_18__14_25_08.mat');

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

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

以前接受过快速的R-CNN对象检测器,指定为afastrcnnobjectdetector对象。

区域提议方法,指定为函数句柄。如果不指定区域提议函数,该函数将实现EdgeBoxes的一个变体[2]算法。该功能必须具有表单:

[bboxes,分数]= proposalFcn(我)

输入,中定义的图像trainingData桌子。该函数必须返回矩形绑定框,bboxes,在一个-By-4阵列。每一排bboxes包含一个四元素矢量,[x,y,宽度,高度].这个向量指定了以像素为单位的边界框的左上角和大小。函数还必须为每个边界框返回一个分数-by-1矢量。更高的分数值表明边界框更有可能包含对象。分数用于选择最强的n地区,在哪里n由价值定义NumStrongestRegions

依赖关系

如果不指定自定义建议函数,而使用表格作为输入训练数据,则该函数将使用Edge Boxes算法的变体。如果使用数据存储为多通道图像输入训练数据,则必须指定自定义区域建议函数。

名称值对参数

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

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

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

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

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


一个B边界框。

负面训练样本的边界框重叠比率,指定为逗号分隔对NegativeOverlapRange和一个双元素矢量。向量包含范围的值[0,1]。区域提案与指定范围内的地面真相边界框重叠为负培训样本。

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

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


一个B边界框。

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

区域提案数量从每个训练图像中随机采样,由整数指定。减少样本的区域数以减少内存使用和加速培训。降低价值也可以降低训练准确性。

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

依赖关系

  • SmallestimageMention.属性仅支持表输入训练数据。金宝app若要调整数据存储输入的输入数据的大小,请使用转变功能。

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

如果您未指定值为“FreezebatchNormalization.'时,函数将属性设置为

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

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

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

输出参数

全部收缩

训练快速的R-CNN对象探测器,返回ASfastrcnnobjectdetector对象。

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

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

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

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

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

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

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

  • ValidationRMSE-每次迭代验证RMSE。

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

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

每个字段都是一个数字向量,其中每个训练迭代一个元素。尚未在特定迭代计算的值被分配为.该结构包含验证录ValidationAccuracyValidationRMSEFinalDvalidationLoss., 和FinalValidationRmse.只有当字段选项指定验证数据。

提示

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

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

  • 此功能支持转移学习。金宝app输入时网络按名称,如'resnet50'然后,该功能根据佩带的净定自动将网络转换为有效的FAST R-CNN网络模型resnet50.(深度学习工具箱)模型。或者,使用该方法手动指定自定义快速R-CNN网络LayerGraph(深度学习工具箱)从预先训练的DAG网络中提取的。有关详细信息,请参见创建快速R-CNN对象检测网络

  • 该表描述了如何将每个命名网络转换为一个Fast 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' 在特征提取层之后插入ROI池池。
    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模型

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

参考

[1]吉伦克,罗斯。“快速R-CNN。”IEEE计算机愿景国际会议的诉讼程序.2015年。

[2] Zitnick,C. Lawrence和Piotr美元。“边缘盒子:从边缘找到对象提案。”计算机Vision-ECCV 2014.Springer International Publishing,2014,PP。391-405。

扩展功能

介绍了R2017a