rcnnObjectDetector
使用R-CNN深度学习检测器检测对象
描述
的rcnnObjectDetector
object使用R-CNN(带有卷积神经网络的区域)对象检测器从图像中检测对象。为了检测图像中的对象,将训练过的检测器传递给检测
函数。为了对图像区域进行分类,将检测器传递给classifyRegions
函数。
的使用rcnnObjectDetector
需要统计和机器学习工具箱™和深度学习工具箱™。
当使用检测
或classifyRegions
功能与rcnnObjectDetector
,使用CUDA®使英伟达®强烈推荐GPU。GPU显著减少了计算时间。GPU的使用需要并行计算工具箱™。有关受支持的计算功能的信息,请参见金宝appGPU计算要求(并行计算工具箱).
创建
创建一个rcnnObjectDetector
对象通过调用trainRCNNObjectDetector
函数训练数据(需要深度学习工具箱)。
检测器= trainRCNNObjectDetector(trainingData,…)
属性
网络
- - - - - -系列网络对象
SeriesNetwork
|DAGNetwork
表示卷积神经网络(CNN)的级数网络对象,指定为SeriesNetwork
(深度学习工具箱)或DAGNetwork
(深度学习工具箱).该对象在R-CNN检测器中使用。
RegionProposalFcn
- - - - - -海关区域方案
函数处理
自定义区域建议函数句柄,指定为函数名。自定义函数proposalFcn
必须具有以下功能形式:
[bboxes,scores] = proposalFcn(I)
输入参数我
是一个图像。函数中必须返回矩形包围框米4数组。每行bboxes
包含一个四元素向量,[x,y,宽度,高度],它指定边界框的左上角和大小(以像素为单位)。类中的每个包围框也必须返回一个分数米1的向量。分数越高,表示边界框更有可能包含一个对象。
一会
- - - - - -对象类名
单元阵列
对象类名称,指定为单元格数组。该数组包含R-CNN检测器训练查找的对象类的名称。
BoxRegressionLayer
- - - - - -边界框回归层
特征向量
此属性是只读的。
边界框回归层名称,指定为字符向量。属性在训练期间设置此属性
的观点BoxRegressionLayer
trainRCNNObjectDetector
.
对象的功能
检测 |
使用R-CNN深度学习检测器检测对象 |
classifyRegions |
利用R-CNN物体检测器对图像区域中的物体进行分类 |
例子
火车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对象检测器
使用附加数据恢复训练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对象检测的网络
为两个对象类(狗和猫)创建R-CNN对象检测器。
objectClasses = {“狗”,“猫”};
该网络必须能够对狗、猫和“背景”类进行分类,以便进行训练trainRCNNObjectDetector
.在本例中,添加了一个one来包含背景。
numClassesPlusBackground = numel(objectClasses) + 1;
网络的最后一层全连接层定义了网络可以分类的类的数量。将最终的全连接层设置为输出大小等于类的数量加上一个背景类。
层= [...imageInputLayer([28 28 1]) convolution2dLayer(5,20) fullyConnectedLayer(numClassesPlusBackground);classificationLayer softmaxLayer () ()];
这些网络层现在可以用来训练R-CNN两类对象检测器。
在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中引入
Abrir比如
Tiene una versión modificada de este ejemplo。¿Desea abrir este ejemplo con sus modificaciones?
MATLAB突击队
Ha hecho clic en unenlace que对应一个este commando de MATLAB:
弹射突击队introduciéndolo en la ventana de commandos de MATLAB。Los navegadores web no permission comandos de MATLAB。
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。