主要内容

trainrcnnobjectdetector

训练R-CNN深度学习目标检测器

描述

例子

探测器= trainRCNNObjectDetector (培训数据网络选择权训练基于R-CNN(带卷积神经网络的区域)的目标检测器。该函数使用深度学习来训练检测器检测多个对象类。

R-CNN的这种实现并不为每个目标类训练支持向量机分类器。

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

探测器= trainRCNNObjectDetector (___名称,价值返回一个探测器对象,其可选输入属性由一个或多个指定名称,价值对参数。

探测器= trainRCNNObjectDetector (___,'RegionProposalFcn”,proposalFcn)可选地使用自定义区域建议函数训练R-CNN检测器。

探测器信息) = trainRCNNObjectDetector (___还返回每个迭代的培训进度信息,例如培训损失和准确性。

例子

全部收缩

加载培训数据和网络层。

加载('rcnnstopsigns.mat'“stopSigns”'层'

将图像目录添加到MATLAB路径中。

imDir = fullfile (matlabroot,'工具箱'“愿景”“视觉数据”...“stopSignImages”); addpath(imDir);

将网络训练选项设置为使用最小批量大小32以减少GPU内存使用。降低InitialLearningRate可降低网络参数的更改速率。这在微调预先训练的网络时非常有用,并可防止网络更改过快。

选项=培训选项(“sgdm”...“MiniBatchSize”,32,...'italllearnrate',1e-6,...'maxepochs'10);

训练R-CNN探测器。训练可能需要几分钟才能完成。

rcnn = thathrcnnobjectdetector(stopsigns,图层,选项,'负极的贪婪'0.3 [0]);
******************************************************************* 培训一个R-CNN对象探测器以下对象类:* stopSign步骤1的3:从27日训练图像提取区域建议……。步骤2:训练神经网络对训练数据中的对象进行分类…|=========================================================================================| | 时代| |迭代时间| Mini-batch | Mini-batch |基地学习| | | | | | |精度损失速率(秒)  | |=========================================================================================| | 50 | 3 | 9.27 | 0.2895 | 0.000001 | 96.88%| | 100 | | 14.77 | 0.2443 | 93.75% | 0.000001 | | 150 | | 20.29 | 0.0013 | 100.00% | 0.000001 | | 200 | | 25.94 | 0.1524 | 0.000001 | 96.88%  | |=========================================================================================| 网络训练完成。步骤3:训练每个对象类的边界盒回归模型。R-CNN培训完成。*******************************************************************

在测试图像上测试R-CNN探测器。

img=imread('stopSignTest.jpg');[bbox,score,label] =检测(rcnn,img,“MiniBatchSize”、32);

显示最强的检测结果。

[score, idx] = max(score);Bbox = Bbox (idx,:);注释= sprintf ('%s:(置信度= %f)',标签(idx),分数);detectedImg=插入对象注释(img,'长方形',bbox,annotation);图imshow(检测到的img)

从路径中删除映像目录。

rmpath (imDir);

使用额外的数据恢复训练R-CNN目标检测器。为了说明这一过程,将使用一半的地面真实数据来初步训练探测器。然后,使用所有的数据恢复训练。

加载训练数据并初始化训练选项。

加载('rcnnstopsigns.mat'“stopSigns”'层')stopsigns.imageFilename = fullfile(toolboxdir(“愿景”),“视觉数据”...stopSigns.imageFilename);选项=培训选项(“sgdm”...“MiniBatchSize”,32,...'italllearnrate',1e-6,...'maxepochs'10,...“冗长”,假);

将R-CNN探测器与地面真相的一部分训练。

rcnn=列车RCNNObjectDetector(停车标志(1:10,:)、图层、选项、,'负极的贪婪'0.3 [0]);

从检测器上获取训练过的网络层。当你将一个网络层数组传递给trainrcnnobjectdetector在美国,它们被原样用于继续培训。

网络= rcnn.network;图层= network.layers;

使用所有培训数据恢复培训。

rcnnFinal = trainRCNNObjectDetector(stopSigns, layers, options);

为两个对象类创建一个R-CNN对象检测器:狗和猫。

对象类={“狗”“猫”};

网络必须能够对狗、猫和“背景”类进行分类,以便使用trainrcnnobjectdetector。在此示例中,添加了一个背景。

numClassesPlusBackground = nummel (objectClasses) + 1;

网络的最后一个完全连接的层定义了网络可以分类的类的数量。将最终完全连接的层设置为输出大小等于类数加上背景类。

层=[...imageInputLayer([28 28 1])卷积2dlayer (5,20) fulllyconnectedlayer (numClassesPlusBackground);classificationLayer softmaxLayer () ()];

这些网络层现在可以用来训练一个R-CNN二类目标探测器。

创建R-CNN对象检测器并将其设置为使用已保存的网络检查点。在网络培训期间,每纪元保存网络检查站培训选项'CheckPointPath'参数设置。如果您的培训会话意外终止,网络检查站很有用。

加载停止标志训练数据。

加载('rcnnstopsigns.mat'“stopSigns”'层'

添加图像文件的完整路径。

stopSigns.imageFilename=fullfile(toolboxdir(“愿景”),“视觉数据”...stopSigns.imageFilename);

使用培训选项函数。

检查点位置=临时目录;选项=培训选项(“sgdm”“冗长”,错误的,...'checkpoinspath', checkpointLocation);

用几张图片训练R-CNN目标检测器。

rcnn = trainrcnnobjectdetector(stopsigns(1:3,:),图层,选项);

加载保存的网络检查点。

wildcardFilePath = fullfile (checkpointLocation,'convnet_checkpoint __ *。垫子');内容= dir (wildcardFilePath);

加载一个检查点网络。

(1) .folder filepath = fullfile(内容,内容(1). name);检查点=负载(filepath);checkpoint.net
ANS =带有属性的系列网络:图层:[15×1 nnet.cnn.layer.Layer]

创建一个新的R-CNN对象检测器,并设置它使用保存的网络。

rcncheckpoint = rcnnobjectdetector();rcnncheckpoint.regionproposalfcn = @ rcnnobjectdetector.propoSeregions;

将网络设置为保存的网络检查点。

rcnnCheckPoint。网络= checkpoint.net
RCNNCheckPoint = RCNObjectDetector具有属性:网络:[1×1系列网络] ClassNames:{'stopsign''背景'} regionPoposalfcn:@ rcnnobjectdetector.proposeregions

输入参数

全部收缩

标记的地面真像,指定为一个有两个或更多列的表。

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

表变量名称定义对象类名。要创建地面真相表,请使用图片标志小于32×32的应用程序框不用于培训。

网络,指定为SeriesNetwork(深度学习工具箱),数组(深度学习工具箱)对象,分层图(深度学习工具箱)对象,或按网络名称。对网络进行训练,以对中定义的对象类进行分类培训数据桌子。的SeriesNetwork(深度学习工具箱)(深度学习工具箱), 和分层图(深度学习工具箱)对象在深度学习工具箱中可用。

  • 当您将网络指定为SeriesNetwork,数组通过添加新的分类和回归层来支持对象检测,网络将自动转换为R-CNN网络。万博1manbetx

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

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

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

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

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

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

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

请注意

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

  • ValidationData验证频率验证耐心选择权

名称值对参数

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

例子:“PositiveOverlapRange”(0.5 - 1)

包围盒重叠范围的正训练样本比率,指定为逗号分隔对,由'积极的宽容'和一个二元向量。该向量包含范围为[0,1]的值。在指定范围内与地面真值包围盒重叠的区域建议作为正训练样本。

用于两者的重叠率积极的宽容负超视距被定义为:

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


一个B边界框。

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

用于生成训练样本的最强区域建议的最大数量,指定为逗号分隔对,由'天体区'和一个整数。降低这个值可以加快处理时间,尽管这样做会降低训练的准确性。要使用所有区域提议,请将此值设置为

自定义区域建议函数句柄,指定为逗号分隔对,由'RegionProposalFcn'和函数名称。如果未指定自定义区域提议功能,则边缘框算法的默认变体[3],设置目标检测器,已使用。自定义proposalFcn必须具有以下功能形式:

[bboxes,分数]= proposalFcn(我)

输入,中定义的图像groundTruth桌子。该函数必须返回矩形边界框-by-4阵列。每行bboxes包含四个元素的向量,[xy宽度高度,它指定以像素为单位的边界框的左上角和大小。函数还必须为每个边界框返回一个分数-by-1向量。分数越高,表示边界框越可能包含对象。分数用于选择最强的区域,您可以在中指定天体区

框回归层名称,指定为逗号分隔的配对组成BoxRegressionLayer.'和一个字符矢量。有效值是“汽车”或者输入网络中一层的名称。这一层的输出激活被用作特征来训练一个回归模型来精炼检测到的包围盒。

如果名称是“汽车”,然后trainrcnnobjectdetector根据输入网络的类型自动从输入网络中选择一层:

  • 如果输入网络是一个SeriesNetwork或一系列对象,然后函数选择最后一个卷积层。

  • 如果输入网络是一个LayerGraph,然后该函数选择最后一个完全连接层的源。

输出参数

全部收缩

训练有素的基于R-CNN的目标探测器,作为目标检测器目的。您可以培训R-CNN检测器来检测多个对象类。

培训信息,作为带有以下字段的结构返回。每个字段是一个数字向量,每个训练迭代包含一个元素。在特定迭代中未计算的值表示为

  • 培训俱乐部- 每次迭代训练损失。这是用于培训R-CNN网络的分类和回归损耗的组合。

  • TrainingAccuracy-每次迭代的训练集精度

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

限制

  • R-CNN的这种实现并不为每个目标类训练支持向量机分类器。

提示

  • 为了加快训练数据的预处理,trainrcnnobjectdetector自动创建和使用一个并行池基于您的并行偏好设置.这需要并行计算工具箱。

  • VGG-16,VGG-19,Resnet-101和Inception-Resnet-V2是大型型号。使用大图像的培训可能会产生“内存中的错误”错误。要缓解这些错误,请在呼叫之前手动调整图像大小以及边界框地面真实数据trainrcnnobjectdetector

  • 此功能支持转移学习。万博1manbetx按名称输入网络时,例如“resnet50”,然后软件根据预先训练的网络自动将网络转换为有效的R-CNN网络模型resnet50(深度学习工具箱)模型。或者,使用该方法手动指定自定义R-CNN网络LayerGraph(深度学习工具箱)从预磨料的DAG网络中提取。看到创建R-CNN对象检测网络

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

参考文献

[1] Girshick,R.,J. Donahue,T. Darrell和J. Malik。“丰富的特征层次结构,用于准确对象检测和语义细分。”计算机视觉与模式识别会议论文集.2014年,页580 - 587。

[2] 快速R-CNNIEEE计算机视觉国际会议记录2015年,第1440-1448页。

兹特尼克,C.劳伦斯和P. Dollar。"边缘框:从边缘定位对象"计算机Vision-ECCV,Springer国际出版。2014,第391-405页。

扩展能力

介绍了R2016b