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

此示例演示如何使用名为“更快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 = [
    inputLayer
    middleLayers
    finalLayers
    ]
layers =
  带有图层的11x1图层数组:

     1‘‘图像输入带有‘zerocenter‘标准化的32x32x3图像
     2‘‘卷积32 3x3卷积,步幅[1 1]和填充[1 1 1 1]
     3‘‘ReLU ReLU
     4‘‘卷积32 3x3卷积,步幅[1 1]和填充[1 1 1 1]
     5‘‘ReLU ReLU
     6‘‘Max Pooling 3x3 max pooling with stride [2 2]和padding [0 0 0 0]
     7‘‘完全连接64完全连接层
     8‘‘ReLU ReLU
     9‘‘完全连接2完全连接层
    10‘‘Softmax softmax
    11‘‘分类输出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 = [
    optionsStage1
    optionsStage2
    optionsStage3
    optionsStage4
    ]。

在这里,前两个步骤的学习速率设置为高于最后两个步骤。由于最后两个步骤是微调步骤,因此网络权重的修改速度可能比前两个步骤慢。对于更快的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

时间: 2024-08-11 07:48:58

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

基于深度学习的目标检测

普通的深度学习监督算法主要是用来做分类,如图1(1)所示,分类的目标是要识别出图中所示是一只猫.而在ILSVRC(ImageNet Large Scale Visual Recognition Challenge)竞赛以及实际的应用中,还包括目标定位和目标检测等任务.其中目标定位是不仅仅要识别出来是什么物体(即分类),而且还要预测物体的位置,位置一般用边框(bounding box)标记,如图1(2)所示.而目标检测实质是多目标的定位,即要在图片中定位多个目标物体,包括分类和定位.比如对图1(3

第二十八节、基于深度学习的目标检测算法的综述

在前面几节中,我们已经介绍了什么是目标检测,以及如何进行目标检测,还提及了滑动窗口,bounding box.以及IOU,非极大值抑制等概念. 这里将会综述一下当前目标检测的研究成果,并对几个经典的目标检测算法进行概述,本文内容来自基于深度学习的目标检测,在后面几节里,会具体讲解每一种方法. 在深度度学习的目标检测算法兴起之前,传统的目标检测算法是怎样的呢? 传统的目标检测一般使用滑动窗口的框架,主要包括三个步骤: 利用不同尺寸的滑动窗口框住图中的某一部分作为候选区域: 提取候选区域相关的视觉特

4. 基于深度学习的目标检测算法的综述(转)

4. 基于深度学习的目标检测算法的综述(转) 原文链接:https://www.cnblogs.com/zyly/p/9250195.html 目录 一 相关研究 1.选择性搜索(Selective Search) 2.OverFeat 二.基于区域提名的方法 1.R-CNN 2.SPP-Net 3.Fast R-CNN 4.Faster R-CNN 5.R-FCN 三 端对端的方法 1.YOLO 2.SSD 四 总结 在前面几节中,我们已经介绍了什么是目标检测,以及如何进行目标检测,还提及了滑

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

前言 开始本文内容之前,我们先来看一下上边左侧的这张图,从图中你看到了什么物体?他们在什么位置?这还不简单,图中有一个猫和一个人,具体的位置就是上图右侧图像两个边框(bounding-box)所在的位置.其实刚刚的这个过程就是目标检测,目标检测就是"给定一张图像或者视频帧,找出其中所有目标的位置,并给出每个目标的具体类别". 目标检测对于人来说是再简单不过的任务,但是对于计算机来说,它看到的是一些值为0~255的数组,因而很难直接得到图像中有人或者猫这种高层语义概念,也不清楚目标出现在

目标检测梳理:基于深度学习的目标检测技术演进:R-CNN、Fast R-CNN、Faster R-CNN(转)

基于深度学习的目标检测技术演进:R-CNN.Fast R-CNN.Faster R-CNN(转) 原文链接:https://www.cnblogs.com/skyfsm/p/6806246.html object detection我的理解,就是在给定的图片中精确找到物体所在位置,并标注出物体的类别.object detection要解决的问题就是物体在哪里,是什么这整个流程的问题.然而,这个问题可不是那么容易解决的,物体的尺寸变化范围很大,摆放物体的角度,姿态不定,而且可以出现在图片的任何地方

深度学习之目标检测常用算法原理+实践精讲

第1章 课程介绍本章节主要介绍课程的主要内容.核心知识点.课程涉及到的应用案例.深度学习算法设计通用流程.适应人群.学习本门课程的前置条件.学习后达到的效果等,帮助大家从整体上了解本门课程的整体脉络. 第2章 目标检测算法基础介绍本章节主要介绍目标检测算法的基本概念.传统的目标检测算法.目前深度学习目标检测主流方法(one-stage.two-stage.多任务网络).相关算法的基本流程.算法性能的评价指标.不同算法的优缺点和性能比较等,并结合实际的应用场景和案例来介绍目标检测算法的重要性和实用

深度学习之目标检测常用算法原理+实践精讲 YOLO / Faster RCNN / SSD / 文本检测 / 多任务网络

深度学习之目标检测常用算法原理+实践精讲 YOLO / Faster RCNN / SSD / 文本检测 / 多任务网络 资源获取链接:点击这里 第1章 课程介绍 本章节主要介绍课程的主要内容.核心知识点.课程涉及到的应用案例.深度学习算法设计通用流程.适应人群.学习本门课程的前置条件.学习后达到的效果等,帮助大家从整体上了解本门课程的整体脉络. 1-1 课程导学 第2章 目标检测算法基础介绍 本章节主要介绍目标检测算法的基本概念.传统的目标检测算法.目前深度学习目标检测主流方法(one-sta

sql Python R sas 深度学习体会

SQL:个人认为sql是数据工作的必备语言,sql语言在常用的数据库中基本都是通用的,学会了使用一种即可. 转载请注明出处:http://www.cnblogs.com/SSSR/p/7016660.html SAS: sas是学习统计的一门好语言,为什么这么说呢?因为现在的统计书籍很多都是用sas实现的,从原理到实现有很多本书可以阅读,还有sas公司这样子优秀的公司进行支持. 但是 但是 但是 sas真心不好学习,他的编程思想与其他语言有那么点不同,很多人把宏比作其他语言的函数,但我认为万万不

(转) 深度学习在目标跟踪中的应用

深度学习在目标跟踪中的应用 原创 2016-09-05 徐霞清 深度学习大讲堂 点击上方“深度学习大讲堂”可订阅哦!深度学习大讲堂是高质量原创内容的平台,邀请学术界.工业界一线专家撰稿,致力于推送人工智能与深度学习最新技术.产品和活动信息! 开始本文之前,我们首先看上方给出的3张图片,它们分别是同一个视频的第1,40,80帧.在第1帧给出一个跑步者的边框(bounding-box)之后,后续的第40帧,80帧,bounding-box依然准确圈出了同一个跑步者.以上展示的其实就是目标跟踪(vis