主要内容

rcnnObjectDetector

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

描述

rcnnObjectDetectorobject使用R-CNN(带有卷积神经网络的区域)对象检测器从图像中检测对象。为了检测图像中的对象,将训练过的检测器传递给检测函数。为了对图像区域进行分类,将检测器传递给classifyRegions函数。

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

当使用检测classifyRegions功能与rcnnObjectDetector,使用CUDA®使英伟达®强烈推荐GPU。GPU显著减少了计算时间。GPU的使用需要并行计算工具箱™。有关受支持的计算功能的信息,请参见金宝appGPU计算要求(并行计算工具箱)

创建

创建一个rcnnObjectDetector对象通过调用trainRCNNObjectDetector函数训练数据(需要深度学习工具箱)。

检测器= trainRCNNObjectDetector(trainingData,…)

属性

全部展开

表示卷积神经网络(CNN)的级数网络对象,指定为SeriesNetwork(深度学习工具箱)DAGNetwork(深度学习工具箱).该对象在R-CNN检测器中使用。

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

[bboxes,scores] = proposalFcn(I)

输入参数是一个图像。函数中必须返回矩形包围框4数组。每行bboxes包含一个四元素向量,[xy宽度高度],它指定边界框的左上角和大小(以像素为单位)。类中的每个包围框也必须返回一个分数1的向量。分数越高,表示边界框更有可能包含一个对象。

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

此属性是只读的。

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

对象的功能

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

例子

全部折叠

加载训练数据和网络层。

负载(“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, layers, options,“NegativeOverlapRange”, [0 0.3]);
******************************************************************* 培训一个R-CNN对象探测器以下对象类:* stopSign步骤1的3:从27日训练图像提取区域建议……。第三步中的第二步:训练神经网络对训练数据中的对象进行分类…|=========================================================================================| | 时代| |迭代时间| Mini-batch | Mini-batch |基地学习| | | | | | |精度损失速率(秒)  | |=========================================================================================| | 50 | 3 | 9.27 | 0.2895 | 96.88% | 0.000001 | | 100 | | 14.77 | 0.2443 | 93.75% | 0.000001 | | 150 | | 20.29 | 0.0013 | 100.00% | 0.000001 | | | 200 | | 0.000001 | 25.94 | 0.1524 | 96.88%|=========================================================================================| Network training complete. Step 3 of 3: Training bounding box regression models for each object class...100.00%...done. R-CNN training complete. *******************************************************************

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

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

显示最强检测结果。

[score, idx] = max(score);Bbox = Bbox (idx,:);注释= sprintf('%s:(可信度= %f)', label(idx), score);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,:),图层,选项,“NegativeOverlapRange”, [0 0.3]);

从检测器获得训练好的网络层。当您将网络层数组传递给trainRCNNObjectDetector在美国,他们被原样用于继续培训。

网络= rcnn.Network;层=网络。层;

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

rcnnFinal = trainRCNNObjectDetector(stopSigns, layers, options);

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

objectClasses = {“狗”“猫”};

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

numClassesPlusBackground = numel(objectClasses) + 1;

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

层= [...imageInputLayer([28 28 1]) convolution2dLayer(5,20) fullyConnectedLayer(numClassesPlusBackground);classificationLayer softmaxLayer () ()];

这些网络层现在可以用来训练R-CNN两类对象检测器。

创建R-CNN对象检测器,并将其设置为使用已保存的网络检查点。在网络训练期间,每个纪元都会保存一个网络检查点trainingOptions设置“CheckpointPath”参数。如果您的培训课程意外终止,网络检查点非常有用。

加载停止标志训练数据。

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

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

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

属性设置“CheckpointPath”trainingOptions函数。

checkpointLocation = tempdir;选项= trainingOptions(“个”“详细”假的,...“CheckpointPath”, checkpointLocation);

用一些图像训练R-CNN对象检测器。

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

加载一个保存的网络检查点。

wildcardFilePath = fullfile(checkpointLocation,“convnet_checkpoint__ * .mat”);contents = dir(wildcardFilePath);

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

Filepath = fullfile(contents(1).folder,contents(1).name);检查点=加载(文件路径);checkpoint.net
ans = SeriesNetwork with properties: Layers: [15×1 nnet.cnn.layer.Layer]

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

rcnnCheckPoint = rcnnObjectDetector();rcnnCheckPoint。RegionProposalFcn = @ rcnnobjectdetector . proseregions;

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

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

版本历史

在R2016b中引入