主要内容

trainRCNNObjectDetector

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

描述

例子

探测器= thathrcnnobjectdetector(trainingData网络选项训练基于R-CNN(卷积神经网络区域)的目标检测器。该函数使用深度学习训练检测器检测多个目标类。

R-CNN的此实现不会为每个对象类培训SVM分类器。

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

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

探测器= thathrcnnobjectdetector(___,'RegionProposalfcn.',proposalfcn)可选地使用自定义区域建议函数训练R-CNN检测器。

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

例子

全部折叠

负载训练数据和网络层。

负载(“rcnnStopSigns.mat”“stopSigns”“层”

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

imdir = fullfile(matlabroot,“工具箱”'想象'“visiondata”...'stopsignimages');目录(imDir);

设置网络训练选项使用32个小批量来减少GPU内存的使用。降低InitialLearningRate,降低网络参数的变化速率。当对预先训练的网络进行微调并防止网络变化过快时,这是有益的。

选择= trainingOptions (“个”...“MiniBatchSize”32岁的...“InitialLearnRate”1 e-6...“MaxEpochs”10);

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

rcnn = trainRCNNObjectDetector(stopSigns, layer, options,“NegativeOverlapRange”,[0 0.3]);
******************************************************************* 培训一个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);

显示最强检测结果。

[得分,Idx] = Max(得分);bbox = bbox(idx,:);注释= sprintf('%s :(信心=%f)'标签(idx),得分);detectedImg = insertObjectAnnotation (img,“矩形”bbox,注释);图imshow (detectedImg)

从路径中删除映像目录。

rmpath(imdir);

使用其他数据恢复培训R-CNN对象探测器。为了说明此过程,将使用一半的地面真实数据来初始培训检测器。然后,使用所有数据恢复培训。

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

负载(“rcnnStopSigns.mat”“stopSigns”“层”) stopSigns。imageFilename = fullfile (toolboxdir ('想象'),“visiondata”...stopSigns.imageFilename);选择= trainingOptions (“个”...“MiniBatchSize”32岁的...“InitialLearnRate”1 e-6...“MaxEpochs”10...“详细”、假);

用部分地面真相训练R-CNN探测器。

rcnn = trainRCNNObjectDetector(stopSigns(1:10,:), layers, options,“NegativeOverlapRange”,[0 0.3]);

从检测器上获取训练过的网络层。当你将一个网络层数组传递给trainRCNNObjectDetector,它们用作继续培训。

网络= rcnn.Network;层= network.Layers;

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

rcnnfinal = thathrcnnobjectdetector(stopsigns,图层,选项);

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

对象类= {'小狗''猫'};

该网络必须能够分类狗,猫,和一个“背景”类,以便训练使用trainRCNNObjectDetector.在本例中,添加了一个1来包含背景。

numclassesplacebrackground = numel(objectClasses)+ 1;

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

层= [...imageInputLayer([28 28 1])卷积2dlayer(5,20)全连接列(numclassesplackground);softmaxlayer()classificationlayer()];

这些网络层现在可以用来训练R-CNN两级目标检测器。

创建一个R-CNN对象检测器,并设置它使用保存的网络检查点。在网络训练过程中,每个阶段都保存一个网络检查点trainingOptions设置CheckpointPath参数。网络检查点在你的训练过程意外终止时很有用。

加载停止标志训练数据。

负载(“rcnnStopSigns.mat”“stopSigns”“层”

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

stopSigns。imageFilename = fullfile (toolboxdir ('想象'),“visiondata”...stopSigns.imageFilename);

属性设置CheckpointPathtrainingOptions功能。

checkpointLocation = tempdir;选择= trainingOptions (“个”“详细”假的,...“CheckpointPath”,检查点位置;

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

: rcnn = trainRCNNObjectDetector (stopSigns(1:3),层,选项);

加载已保存的网络检查点。

wildcardfilepath = fullfile(checkpointlocation,“convnet_checkpoint__ * .mat”);内容= dir (wildcardFilePath);

加载其中一个检查点网络。

filepath = fullfile(内容(1).folder,contents(1).name);checkpoint = load(filepath);checkpoint.et.
ans = SeriesNetwork with properties: Layers: [15×1 net.cnn.layer. layer]

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

rcnnCheckPoint = rcnnObjectDetector ();rcnnCheckPoint。RegionProposalFcn = @rcnnObjectDetector.proposeRegions;

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

rcnnCheckPoint。网络= checkpoint.net
rcnnCheckPoint = rcnnObjectDetector with properties: Network: [1×1 SeriesNetwork] ClassNames: {'stopSign' ' 'Background'} RegionProposalFcn: @rcnnObjectDetector. proproserregions . properties

输入参数

全部折叠

标记为地面真相图像,指定为具有两个或多个列的表。

如果使用表,则该表必须有两个或更多列。表的第一列必须包含带有路径的图像文件名。图像必须是灰度或真彩色(RGB),他们可以在任何格式的支持金宝appimread.剩下的每一列必须是包含m-by-4矩阵,表示单个对象类,例如车辆,或停车标志.列包含4元件双数组m格式中的边框[Xy宽度高度]。该格式指定相应图像中边界框的左上角位置和大小。要创建一个地面真相表,可以使用图像贴标器应用程序或视频贴图要从生成的ground truth创建一个训练数据表,使用ObjectDetortRaringData.功能。

表变量名定义了对象类名。创建地面真值表,使用图像贴标器小于32x32的盒子不用于培训。

网络,指定为系列网络(深度学习工具箱),数组(深度学习工具箱)对象,AlayerGraph(深度学习工具箱)对象,或根据网络名称。对网络进行训练,对定义的对象类进行分类trainingData表格这系列网络(深度学习工具箱)(深度学习工具箱),layerGraph(深度学习工具箱)对象可在深度学习工具箱中使用。

  • 当您指定网络为系列网络,数组对象或通过网络名称,通过添加新的分类和回归层来支持对象检测,网络将自动转换为R-CNN网络。金宝app

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

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

  • 当您指定网络为系列网络数组或网络的名称,卷积和全连接层的权重被初始化为“narrow-normal”

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

  • 分层图对象必须是有效的R-CNN对象检测网络。你也可以用a分层图培训自定义R-CNN网络的对象。

R-CNN,FAST R-CNN和更快的R-CNN入门了解更多关于如何创建R-CNN网络的信息。

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

笔记

trainRCNNObjectDetector不支持这些培训选项金宝app:

  • 验证数据ValidationFrequency,或ValidationPatience选项

名称-值对的观点

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

例子:'积极透过的'(0.5 - 1)

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

两者的重叠比率PositiveOverlapRangeNegativeOverlapRange被定义为:

一种 R. E. 一种 一种 B. 一种 R. E. 一种 一种 B.


一种B.是边界框。

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

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

自定义区域建议函数句柄,指定为逗号分隔对,由'RegionProposalfcn.'和函数名。如果未指定自定义区域建议函数,则为边缘盒算法的默认变体[3],设置在rcnnObjectDetector,使用。一个自定义Proposalfcn.必须具有以下功能形式:

[bboxes,分数]= proposalFcn(我)

输入,一世,是定义的图像groundTruth表格函数必须返回m4数组。每一行的bboxes.包含四个元素的向量,[Xy宽度高度,它指定以像素为单位的边界框的左上角和大小。函数还必须为每个边界框返回一个分数m1的向量。分数越高,表示边界框越有可能包含一个对象。这些分数用于选择最强的区域,您可以在NumStrongestRegions

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

如果名字是'汽车', 然后trainRCNNObjectDetector根据输入网络的类型自动从输入网络中选择一个层:

  • 如果输入网络是一个系列网络或者一个数组对象,然后该功能选择最后一个卷积图层。

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

输出参数

全部折叠

训练过的基于r - cnn的目标检测器,返回为rcnnObjectDetector对象。您可以训练R-CNN检测器来检测多个对象类。

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

  • TrainingLoss-每次迭代的训练损失。这是用来训练R-CNN网络的分类和回归损失的组合。

  • 训练造成的训练- 在每次迭代时培训精度

  • BaseLearnRate- 每次迭代的学习率

限制

  • R-CNN的此实现不会为每个对象类培训SVM分类器。

提示

  • 加速数据预处理进行培训,trainRCNNObjectDetector自动创建和使用一个并行池基于您的平行的偏好设置.这需要并行计算工具箱。

  • VGG-16、VGG-19、ResNet-101和Inception-ResNet-v2是大型模型。使用大图像进行训练可能会产生“内存不足”的错误。为了减轻这些错误,在调用之前,手动调整图像和边界框地面真实数据的大小trainRCNNObjectDetector

  • 支持迁移学习。金宝app当网络通过名称输入时,例如'resnet50',然后该软件根据预磨损自动将网络转换为有效的R-CNN网络模型resnet50(深度学习工具箱)模型。或者,手动指定自定义的R-CNN网络使用分层图(深度学习工具箱)从预先训练的DAG网络中提取的。看创建R-CNN对象检测网络

  • 使用trainingOptions(深度学习工具箱)功能要启用或禁用详细打印。

参考文献

R.格希克、J.多纳休、T.达雷尔和J.马利克。精确目标检测和语义分割的丰富特征层次计算机愿景和模式识别的IEEE会议的诉讼程序.2014,第580-587页。

[2] Girshick, R.“Fast R-CNN”。IEEE计算机视觉国际会议论文集.2015年,页1440 - 1448。

兹特尼克,C.劳伦斯和P. Dollar。"边缘框:从边缘定位对象"计算机视觉eccv,施普林格2014年,页391 - 405。

扩展功能

介绍在R2016B.