主要内容

rcnnObjectDetector

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

描述

rcnnObjectDetector对象检测对象从一个图像,使用R-CNN检测器与卷积神经网络(地区)对象。检测对象在一个图像,通过训练检测器检测函数。分类的图像区域,通过检测器classifyRegions函数。

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

当使用检测classifyRegions功能与rcnnObjectDetector使用CUDA®使英伟达®GPU是强烈推荐。GPU大大减少了计算时间。使用GPU的并行计算需要工具箱™。关于支持计算能力的信息,看到万博1manbetxGPU的万博1manbetx支持版本(并行计算工具箱)

创建

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

探测器= trainRCNNObjectDetector (trainingData…)

属性

全部展开

系列网络对象代表卷积神经网络(CNN),指定为一个SeriesNetwork(深度学习工具箱)DAGNetwork(深度学习工具箱)。中使用的对象是R-CNN探测器。

自定义区域建议处理函数,指定为一个函数的名字。自定义函数proposalFcn必须有以下函数形式:

[bboxes,分数]= proposalFcn(我)

输入参数是一个形象。函数必须返回矩形边框的4数组。每一行的bboxes包含一个研制出向量,x,y,宽度,高度),指定一个边界框的左上角和大小(以像素为单位)。函数必须返回一个为每一个边界框在一个分数1的向量。更高的分数表明,边界框更有可能包含一个对象。

对象类名称,指定为一个单元阵列。该数组包含对象类的名称R-CNN探测器被训练。

这个属性是只读的。

边界框回归层名称,指定为一个特征向量。这个属性设置在训练使用BoxRegressionLayer的观点trainRCNNObjectDetector

对象的功能

检测 使用R-CNN深学习检测器检测对象
classifyRegions 分类对象在图像区域使用R-CNN对象探测器

例子

全部折叠

负荷训练数据和网络层。

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

映像目录添加到MATLAB路径。

imDir = fullfile (matlabroot,“工具箱”,“愿景”,“visiondata”,“stopSignImages”);目录(imDir);

设置网络训练选项使用mini-batch 32减少GPU内存使用量的大小。降低InitialLearningRate减少的速率网络参数改变。这是有益的在微调pre-trained网络和阻止网络改变过快。

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

火车R-CNN探测器。训练可以花几分钟来完成。

rcnn = trainRCNNObjectDetector (stopSigns层,选择,“NegativeOverlapRange”0.3 [0]);
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *培训R-CNN对象探测器以下对象类:* stopSign步骤1的3:从27日训练图像提取区域建议……。步骤2的3:在训练数据训练神经网络分类对象……| = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = | | | |时代迭代时间| Mini-batch | Mini-batch |基地学习| | | |(秒)| | |精度损失速率| | = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = | | 3 | 50 | 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 | | 25.94 | 0.1524 | 96.88% | 0.000001 | | = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = |网络训练完成。步骤3的3:训练边界框回归模型为每个对象类……100.00%……做的。R-CNN培训完成。* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

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

img = imread (“stopSignTest.jpg”);[bbox,分数,标签]=检测(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),层,选择,“NegativeOverlapRange”0.3 [0]);

从探测器得到训练的网络层。当你通过网络层的数组trainRCNNObjectDetector按原样使用,他们继续训练。

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

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

rcnnFinal = trainRCNNObjectDetector (stopSigns层,选项);

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

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

网络必须能够分类两种狗,猫,和“背景”类以被训练使用trainRCNNObjectDetector。在这个例子中,添加了一个包括背景。

numClassesPlusBackground =元素个数(对象类)+ 1;

最后一个完全连接的网络层定义了类的数量,网络可以进行分类。组最后一个完全连接层有一个输出尺寸等于类+背景类的数量。

层= [imageInputLayer([1] 28日28日)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”);内容= dir (wildcardFilePath);

负载的一个检查站网络。

(1).folder filepath = fullfile(内容,内容(1). name);检查点=负载(filepath);checkpoint.net
ans = SeriesNetwork属性:层:[15×1 nnet.cnn.layer.Layer]

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

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

检查点设置网络保存网络。

rcnnCheckPoint。网络= checkpoint.net
rcnnCheckPoint = rcnnObjectDetector属性:网络:[1×1 SeriesNetwork]一会:{“stopSign”“背景”}RegionProposalFcn: @rcnnObjectDetector.proposeRegions
介绍了R2016b