此示例演示如何使用名为“更快r-cnn(具有卷积神经网络的区域)”的深度学习技术来训练对象探测器。

概述

此示例演示如何训练用于检测车辆的更快r-cnn对象探测器。更快的r-nnn [1]是r-cnn [2]和快速r-nnn [3]对象检测技术的引伸。所有这三种技术都使用卷积神经网络(cnn)。它们之间的区别在于它们如何选择要处理的区域以及如何对这些区域进行分类.r-cnn和快速r-概算在运行美国有线电视新闻网之前使用区域建议算法作为预处理步骤。提议算法通常是技术例如edgox [4]或选择性搜索[5],是独立的美国有线电视新闻网。在快速r-cnn的情况下,与运行cnn相比,使用这些技术成为处理瓶颈。更快的r-cnn通过使用美国有线电视新闻网实施区域提案机制来解决这一问题,从而使区域提案成为美国有线电视新闻网培训和预测步骤的一部分。

在该中心中, 使用trainFasterRCNNObjectDetector , 自机视觉系统工具箱 tm .该方案:

  • 为我服务。

  • 网络 (cnn)。

  • 把他放在

  • h. p。

  • 爱的人

* 请将设备与设备、设备和设备

已经成功,有3.0 或高价值使用需要并行计算工具箱™。

为我服务

本示例使用包含295张图像的小型车辆数据集。每个图像包含一个或两个标记的车辆实例。一个小的数据集对于探索更快的r-cnn训练过程很有用,但实际上,需要更多的标记图像来训练一个强大的探测器。

%加载车辆数据集
data = load('fasterRCNNVehicleTrainingData.mat');
vehicleDataset = data.vehicleTrainingData;

训练数据存储在表中。第一列包含图像文件的路径。其余列包含车辆的roi标签。

%显示数据集的前几行。
vehicleDataset(1:4,:)

ans = 4×2表imageFilename车辆   __________________________ ____________'vehicles / image_00001.jpg'[1x4 double]'vehicles / image_00002.jpg'[1x4 double]'vehicles / image_00003.jpg'[1x4 double]'vehicles / image_00004.jpg'[1x4 double]

显示数据集中的一个图像,以了解它所包含的图像类型。

%将完整路径添加到本地车辆数据文件夹。
dataDir = fullfile(toolboxdir('vision'),'visiondata');
vehicleDataset.imageFilename = fullfile(dataDir,vehicleDataset.imageFilename);%阅读其中一张图片。
我= imread(vehicleDataset.imageFilename {10});%插入ROI标签。
I = insertShape(I,'Rectangle',vehicleDataset.vehicle {10});%调整大小并显示图像。
我= imresize(I,3);
数字
imshow(I)

将数据集拆分为训练检测器的训练集和评估检测器的测试集。选择60%的培训数据。使用其余的进行评估。

%将数据拆分为训练和测试集。
idx = floor(0.6 * height(vehicleDataset));
trainingData = vehicleDataset(1:idx,:);
testData = vehicleDataset(idx:end,:);

创建一个卷积神经网络(cnn)

美国有线电视新闻网是更快的r-cnn物体探测器的基础。使用深度学习工具箱™功能逐层创建cnn。

imageInputLayer,它定义了输入层的类型和大小。对于分类任务,输入大小通常是训练图像的大小。对于检测任务,cnn需要分析图像的较小部分,因此输入大小必须与数据集中最小的对象相似。在此数据集中,所有对象都大于[16 16],因此请选择[32 32]的输入大小。此输入大小是cnn需要解析的处理时间和空间细节量之间的平衡。

%创建图像输入图层。
inputLayer = imageInputLayer([32 32 3]);

接下来,定义网络的中间层。中间层由convolution2dLayerreluLayer单元和maxPooling2dLayer的重复块组成。这些层构成了卷积神经网络的核心组成部分。

%定义卷积层参数。
filterSize = [3 3];
numFilters = 32;%创建中间层。
middleLayers = [convolution2dLayer(filterSize,numFilters,'Padding',1)   reluLayer()convolution2dLayer(filterSize,numFilters,'Padding',1)  reluLayer() maxPooling2dLayer(3,'Stride',2)    ]。

您可以通过重复这些基本图层来创建更深的网络。但是,为了避免过早地向下采样数据,请将池层的数量保持在较低的水平。在网络早期进行向下采样会丢弃对学习有用的图像信息。

有线电视美国新闻网的求最后一层通常由fullyConnectedLayer状语从句:softmaxLayer组成。

finalLayers = [%添加具有64个输出神经元的完全连接的层。此图层的输出大小%将是一个长度为64的数组。fullyConnectedLayer(64)%添加ReLU非线性。reluLayer()%添加最后一个完全连接的图层。此时,网络必须%生成可用于测量输入图像%是否属于对象类或背景之一的输出。使用随后的损耗层进行该测量%。fullyConnectedLayer(宽度(vehicleDataset))%添加softmax损耗图层和分类图层。 softmaxLayer()classificationLayer()
]。

合并输入,中间和最终图层。

layers = [inputLayermiddleLayersfinalLayers]

layers = 带有图层的11x1图层数组:1''图像输入带有'zerocenter'标准化的32x32x3图像2''卷积32 3x3卷积,步幅[1 1]和填充[1 1 1 1]3''ReLU ReLU4''卷积32 3x3卷积,步幅[1 1]和填充[1 1 1 1]5''ReLU ReLU6''Max Pooling 3x3 max pooling with stride [2 2]和padding [0 0 0 0]7''完全连接64完全连接层8''ReLU ReLU9''完全连接2完全连接层10''Softmax softmax11''分类输出crossentropyex

配置培训选项

trainFasterRCNNObjectDetector步骤训练探测器。前两个步骤培训了该地区的建议和检测网络,用于更快的r-cnn。最后两个步骤将前两个步骤中的网络组合在一起,以便创建一个用于检测的网络[1]。每个训练步骤可以有不同的收敛速度,因此为每个步骤指定独立的训练选项是有益的。若要指定网络培训选项,请使用 trainingOptions 。

步骤1的选项%optionsStage1
= trainingOptions('sgdm',... 'MaxEpochs',10,... 'MiniBatchSize',1,...... 'InitialLearnRate',1e-3,...... 'CheckpointPath', TEMPDIR);步骤2的选项%optionsStage2
= trainingOptions('sgdm',... 'MaxEpochs',10,... 'MiniBatchSize',1,...... 'InitialLearnRate',1e-3,...... 'CheckpointPath', TEMPDIR);步骤3的选项%optionsStage3
= trainingOptions('sgdm',... 'MaxEpochs',10,... 'MiniBatchSize',1,...... 'InitialLearnRate',1e-3,...... 'CheckpointPath', TEMPDIR);%选项步骤4. optionsStage4
= trainingOptions('sgdm',... 'MaxEpochs',10,... 'MiniBatchSize',1,...... 'InitialLearnRate',1e-3,...... 'CheckpointPath', TEMPDIR);options = [optionsStage1optionsStage2optionsStage3optionsStage4]。

在这里,前两个步骤的学习速率设置为高于最后两个步骤。由于最后两个步骤是微调步骤,因此网络权重的修改速度可能比前两个步骤慢。对于更快的r-cnn训练,迷你批处理大小必须为1,每次迭代都会从一个训练图像处理多个图像区域。

此外,'CheckpointPath'设置为所有培训选项的临时位置。通过此名称值对,可以在训练过程中节省部分训练的检测器。如果培训中断(例如由于停电或系统故障),您可以从保存的检查点恢复培训。

火车更快r-cnn

现在已经定义了cnn和训练选项,您可以使用trainFasterRCNNObjectDetector训练探测器。

在训练过程中,从训练图像中处理多个图像区域。每个图像的图像区域数由'NumRegionsToSample'“控制。'PositiveOverlapRange''NegativeOverlapRange'名称 - 值对控制用于训练的图像区域。正训练样本是指那些与地面真相框重叠0.6到1.0的样本,用联合度量的边界框交点来衡量。负训练样本是那些重叠0到0.3的样本。应通过在验证集中测试训练的检测器来选择这些参数的最佳值。

对于更快的r-cnn培训,强烈建议使用一个并行的matlab工作人员池,以减少培训时间。trainFasterRCNNObjectDetector您的并行首选项设置,自动创建并使用并行池。确保在培训之前启用了并行池的使用。

高度推荐具有cvida™以上计算能力的nvidia™依照gpu进行培训。

为了运动此示例时节省时间,将从磁盘加载预培训的网络。要自己训练网络,请将此处显示的doTrainingAndEval变量设置为真。

%运行
%示例时,从磁盘加载经过训练的网络以节省时间。将此标志设置为true以训练网络。
doTrainingAndEval = false;if doTrainingAndEval%设置随机种子以确保示例训练可重复性。RNG(0);%训练更快的R-CNN探测器。选择BoxPyramidScale为1.2以允许%以获得更精细的多尺度对象检测分辨率。detector = trainFasterRCNNObjectDetector(trainingData,layers,options,... 'NegativeOverlapRange',[0 0.3],... 'PositiveOverlapRange',[0.6 1],... 'NumRegionsToSample',[256 128 256 128],.. 。'BoxPyramidScale',1.2);
else %负载预训练检测器的例子。detector = data.detector;
结束

若要快速验证训练,请在测试图像上运行检测器。

%读取测试图像。
I = imread(testData.imageFilename {1});%运行检测器。
[bboxes,scores] = detect(detector,I);%注释图像中的检测。
I = insertObjectAnnotation(I,'rectangle',bboxes,scores);
数字
imshow(I)

尽管测试一张图像显示出很有希望的结果,但并非所有测试图像都能产生检测结果。请在整个测试集中评估检测器,请按照下一节中概述的评估程序进行操作。

使用测试集评估检测器

计算机视觉系统工具箱™提供对象检测器评估功能,以测量常见的指标,如evaluateDetectionPrecision平均精度()和对数平均漏诊率()。在这里,使用平均精度度量。平均精度提供了一个数字,其中包含了检测器进行正确分类的能力(精度)和检测器查找所有相关对象的能力(召回)。evaluateDetectionMissRate

检测器评估的第一步是通过在测试装置上运行检测器来收集检测结果。为了避免较长的评估时间,将从磁盘加载结果。将上一节doTrainingAndEval标志设置为真,以便在本地执行评估。

if doTrainingAndEval%在测试集中的每个图像上运行检测器并收集结果。resultsStruct = struct([]);for i = 1:height(testData)%阅读图像。I = imread(testData.imageFilename {i});%运行检测器。[bbox,分数,标签] =检测(检测器,I);%收集结果。resultsStruct(i).Boxes = bboxes;resultsStruct(i).Scores =得分;resultsStruct(i)。标签=标签;结束%将结果转换为表格。results = struct2table(resultsStruct);
else %从磁盘加载结果。results = data.results;
结束%从测试数据中提取预期的边界框位置。
expectedResults = testData(:,2:end);%使用“平均精度”度量标准评估对象检测器。
[ap,recall,precision] = evaluateDetectionPrecision(results,expectedResults);

精确召回(pr)曲线突出了探测器在不同召回水平下的精度。理想情况下,所有召回级别的精度为1. 在网络中使用其他图层有助于提高平均精度,但可能需要额外的培训数据和更长的培训时间。

%绘图精度/召回曲线
数字
图(召回,精度)
xlabel('召回')
ylabel('精确')
网格上
的标题(sprintf的('平均精密=%.2f',AP))

总结

这个例子展示了如何使用深度学习来训练车辆检测器。您可以按照类似的步骤为交通标志,行人或其他物体训练探测器。

引用

[1]任,s。,k。他,r。gershick和j。太阳。“更快的řCN:d ----使用区域建议网络实现实时目标检测”。模式分析与机器智能的IEEE交易。第39卷,第6期,2017年6月,1137至1149年页。

[2] girshick,r。,j。donahue,t。达雷尔和j。malik。“用于精确对象检测和语义分割的丰富特征层次结构。2014年ieee计算机视觉和模式识别会议论文集。俄亥俄州哥伦布市,2014年6月,580-587页。

[3] girshick,r。“快速r-nnn”。2015年ieee计算机视觉国际会议论文集。智利圣地亚哥,2015年12月,第1440-1448页。

[4] zitnick,cl,p。美元。“边缘框:边缘从定位对象建议欧洲计算机视觉会议。瑞士苏黎世,2014年9月,第3391-405页。

[5] uijlings,jrr,kea van de sande,t。gevers和awm meulders。“选择性搜索对象识别。国际计算机视觉杂志。第104卷,第2期,2013年9月,154-171页。

关注公众号: MATLAB基于模型的设计 (ID:xaxymaker) ,每天推送MATLAB学习最常见的问题,每天进步一点点,业精于勤荒于嬉。

打开微信扫一扫哦!

转载于:https://www.cnblogs.com/52geek/p/10427890.html

利用更快的r-cnn深度学习进行目标检测相关推荐

  1. pascal行人voc_利用Pascal VOC目标检测数据深度学习进行目标检测

    利用 Pascal VOC 目标检测数据深度学习进行目标检测 穆玉理 [期刊名称] <通讯世界> [年 ( 卷 ), 期] 2018(000)005 [摘要] 随着信息社会的发展 , 尤其 ...

  2. 基于深度学习的目标检测的研究进展2

    普通的深度学习监督算法主要是用来做分类,如图1(1)所示,分类的目标是要识别出图中所示是一只猫.而在ILSVRC(ImageNet Large Scale Visual Recognition Cha ...

  3. 独家总结| 基于深度学习的目标检测详解

    欢迎关注微信公众号[计算机视觉联盟] 获取更多前沿AI.CV资讯                                                基于深度学习的目标检测 基于深度学习的目 ...

  4. 学习笔记之——基于深度学习的目标检测算法

    国庆假期闲来无事~又正好打算入门基于深度学习的视觉检测领域,就利用这个时间来写一份学习的博文~本博文主要是本人的学习笔记与调研报告(不涉及商业用途),博文的部分来自我团队的几位成员的调研报告(由于隐私 ...

  5. 深度学习之目标检测综述

      这里是自己这几天读过的几篇论文的笔记,美其名曰为"综述".   当年AlexNet 掀起 CNN 网络热潮,深度学习也逐渐被应用到目标检测(object detection)中 ...

  6. 基于深度学习的目标检测综述(单阶段、多阶段、FPN变体、旋转目标检测等)

    随着深度学习的发展,基于深度学习的目标检测方法因其优异的性能已经得到广泛的使用.目前经典的目标检测方法主要包括单阶段(YOLO.SSD.RetinaNet,还有基于关键点的检测方法等)和多阶段方法(F ...

  7. 病虫害模型算法_基于深度学习的目标检测算法综述

    sigai 基于深度学习的目标检测算法综述 导言 目标检测的任务是找出图像中所有感兴趣的目标(物体),确定它们的位置和大小,是机器视觉领域的核心问题之一.由于各类物体有不同的外观,形状,姿态,加上成像 ...

  8. 综述 | 基于深度学习的目标检测算法

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:计算机视觉life 导读:目标检测(Object Det ...

  9. 基于深度学习的目标检测研究进展

    前言 开始本文内容之前,我们先来看一下上边左侧的这张图,从图中你看到了什么物体?他们在什么位置?这还不简单,图中有一个猫和一个人,具体的位置就是上图右侧图像两个边框(bounding-box)所在的位 ...

  10. AI综述专栏 | 基于深度学习的目标检测算法综述

    https://www.toutiao.com/a6685618909275488780/ 2019-04-30 17:35:53 关注微信公众号:人工智能前沿讲习, 重磅干货,第一时间送达 AI综述 ...

最新文章

  1. 【译】CSS动画 vs JS动画
  2. 安全无小事,责任大于天。
  3. 用CSV文件读写数据的两种方式(转)
  4. 想要成为算法工程师,需要具备开发能力?-开课吧
  5. Harmony OS — ToastDialog提示对话框
  6. LINUX SHELL中,如何查找某些文件并删除
  7. 电梯里的爱情华科oj
  8. Norton Internet Security 序列号提取(卡饭)
  9. python就业前景不好_Python就业发展前景分析
  10. 实现jquery双击图片放大
  11. MathType 快捷键隐藏章节符
  12. 《Adobe Illustrator CS6中文版经典教程(彩色版)》目录—导读
  13. 干货|红蓝攻防实战演练技术汇总
  14. 深度学习论文笔记:Fast R-CNN
  15. moonseo怎么样?--致我逝去的3年seo青春!
  16. draw.io 画流程图的神器
  17. Java 判断输入的数字最大值
  18. PictureSelector(强大的图片选择器)
  19. java集成测试_到底什么是集成测试?
  20. 基于android停车管理app,基于Android的城市智能停车APP设计与研究

热门文章

  1. java 导出excel带多种颜色
  2. 说说 iphone 数据线(充电线) 原装正品和仿制品、假货等的区别
  3. 苹果和android充电线一根,非常实用!一根充电线,同时搞定苹果、安卓、Type-c,出门带它就够了...
  4. 【JVM学习-3.6】JVM运行时数据区--方法区
  5. Springboot学习1——通过JPA访问MySQL数据库
  6. 线下门店如何进行私域运营
  7. 关于研究鼠标绘制平滑曲线的阶段总结
  8. 计算机勾兑双绝是谁发明,那些跟你说“勾兑酒”是酒精酒的人,都是在不懂装懂...
  9. 从视网膜到视皮层——视觉系统知多少
  10. TwinCAT3安装完成后使用过程中遇到的问题