主要内容

rcnobjectdetector

使用R-CNN深度学习检测器检测对象

描述

rcnobjectdetector对象使用R-CNN(具有卷积神经网络)对象检测器的R-CNN(区域)检测来自图像的对象。要检测图像中的对象,将培训的探测器传递给探测函数。为了对图像区域进行分类,将检测器传递给classifyRegions函数。

的使用rcnobjectdetector需要统计和机器学习工具箱™和深度学习工具箱™。

使用时探测classifyRegions用来rcnobjectdetector,使用CUDA®使英伟达®强烈推荐GPU。GPU显着降低计算时间。GPU的使用需要并行计算工具箱™。有关支持的计算能力的信息,请参阅金宝appGPU支金宝app持情况(并行计算工具箱)

创建

创建一个rcnobjectdetector对象,调用trainrcnnobjectdetector.使用培训数据(需要深入学习工具箱)。

探测器= trainRCNNObjectDetector (trainingData…)

特性

全部展开

表示卷积神经网络(CNN)的系列网络对象,指定为系列网络(深度学习工具箱)Dagnetwork.(深度学习工具箱)。该对象用于R-CNN检测器内。

自定义区域建议函数句柄,指定为函数名。自定义函数Proposalfcn.必须具有以下功能形式:

[bboxes,分数]= proposalFcn(我)

输入论点一世是一个形象。函数必须返回m-By-4阵列。每一排bboxes.包含四个元素的向量,[Xy宽度高度,它指定以像素为单位的边界框的左上角和大小。函数还必须为每个边界框返回一个分数m1的向量。分数越高,表示边界框越有可能包含一个对象。

对象类名称,指定为单元格数组。该数组包含R-CNN检测器被训练去查找的对象类的名称。

此属性是只读的。

边界框回归层名称,指定为字符向量。属性在训练期间设置BoxRegressionLayer的观点trainrcnnobjectdetector.

对象功能

探测 使用R-CNN深度学习检测器检测对象
classifyRegions 使用R-CNN目标检测器对图像区域中的目标进行分类

例子

全部折叠

加载培训数据和网络层。

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

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

imdir = fullfile(matlabroot,“工具箱”'想象''VisionData'......'stopsignimages');addpath(imdir);

设置网络培训选项以使用迷你批量大小为32,以减少GPU内存使用情况。降低InitialLearningRate以降低网络参数改变的速率。当微调预先调整的网络并阻止网络变得太快时,这是有益的。

选择= trainingOptions (“个”......'minibatchsize'32岁的......“InitialLearnRate”,1e-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”,1e-6,......'maxepochs'10......“详细”, 错误的);

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

rcnn = trainrcnnobjectdetector(stopsigns(1:10,:),图层,选项,“NegativeOverlapRange”,[0 0.3]);

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

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

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

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

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

ObjectClasses = {'小狗''猫'};

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

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;

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

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