目标检测算法r-cnn(详解)(代码片段)

ZSYL ZSYL     2022-12-21     458

关键词:

学习目标

  • 目标

    • 了解Overfeat模型的移动窗口方法
    • 说明R-CNN的完整结构过程
    • 了解选择性搜索
    • 了解Crop+Warp的作用
    • 知道NMS的过程以及作用
    • 了解候选区域修正过程
    • 说明R-CNN的训练过程
    • 说明R-CNN的缺点

两步走的目标检测:先进行区域推荐,而后进行目标分类

代表R-CNN、SPP-net、Fast R-CNN、Faster R-CNN

对于一张图片当中多个目标,多个类别的时候。前面的输出结果是不定的,有可能是以下有四个类别输出这种情况。或者N个结果,这样的话,网络模型输出结构不定

所以需要一些他的方法解决目标检测(多个目标)的问题,试图将一个检测问题简化成分类问题

1. 目标检测-Overfeat模型

1.1 滑动窗口

  • 目标检测的暴力方法是从左到右、从上到下滑动窗口,利用分类识别目标。
    • 为了在不同观察距离处检测不同的目标类型,我们使用不同大小和宽高比的窗口。如下图所示:

注:这样就变成每张子图片输出类别以及位置,变成分类问题。

但是滑动窗口需要初始设定一个固定大小的窗口,这就遇到了一个问题,有些物体适应的框不一样

  • 所以需要提前设定K个窗口,每个窗口滑动提取M个,总共K x M 个图片,通常会直接将图像变形转换成固定大小的图像,变形图像块被输入 CNN 分类器中,提取特征后,我们使用一些分类器识别类别和该边界框的另一个线性回归器。

1.2 Overfeat模型总结

这种方法类似一种暴力穷举的方式,会消耗大量的计算力量,并且由于窗口大小问题可能会造成效果不准确。但是提供了一种解决目标检测问题的思路

2. 目标检测-R-CNN模型

在CVPR 2014年中Ross Girshick提出R-CNN。

2.1 完整R-CNN结构

不使用暴力方法,而是用候选区域方法(region proposal method),创建目标检测的区域改变了图像领域实现物体检测的模型思路,R-CNN是以深度神经网络为基础的物体检测的模型 ,R-CNN在当时以优异的性能令世人瞩目,以R-CNN为基点,后续的SPPNet、Fast R-CNN、Faster R-CNN模型都是照着这个物体检测思路。

  • 步骤(以AlexNet网络为基准)
    • 1.找出图片中可能存在目标的侯选区域region proposal
    • 2.将候选区域调整为了适应AlexNet网络的输入图像的大小227×227,通过CNN对候选区域提取特征向量,2000个建议框的CNN特征组合成网络AlexNet最终输出:2000×4096维矩阵
    • 3.将2000×4096维特征经过SVM分类器(20种分类,SVM是二分类器,则有20个SVM),获得2000×20种类别矩阵
    • 4.分别对2000×20维矩阵中进行非极大值抑制(NMS:non-maximum suppression)剔除重叠建议框,得到与目标物体最高的一些建议框
    • 5.修正bbox,对bbox做回归微调

2.2 候选区域(Region of Interest)得出

选择性搜索(SelectiveSearch,SS)中,首先将每个像素作为一组。然后,计算每一组的纹理,并将两个最接近的组结合起来。但是为了避免单个区域吞噬其他区域,我们首先对较小的组进行分组。我们继续合并区域,直到所有区域都结合在一起。

下图第一行展示了如何使区域增长,第二行中的蓝色矩形代表合并过程中所有可能的 ROI。

SelectiveSearch在一张图片上提取出来约2000个侯选区域,需要注意的是这些候选区域的长宽不固定。 而使用CNN提取候选区域的特征向量,需要接受固定长度的输入,所以需要对候选区域做一些尺寸上的修改。

2.3 CNN网络提取特征

在侯选区域的基础上提取出更高级、更抽象的特征,这些高级特征是作为下一步的分类器、回归的输入数据。

提取的这些特征将会保存在磁盘当中(这些提取的特征才是真正的要训练的数据

2.4 特征向量训练分类器SVM

  • 1、假设一张图片的2000个侯选区域,那么提取出来的就是2000 x 4096这样的特征向量(R-CNN当中默认CNN层输出4096特征向量)。
  • 2、R-CNN选用SVM进行二分类。假设检测20个类别,那么会提供20个不同类别的SVM分类器,每个分类器都会对2000个候选区域的特征向量分别判断一次,这样得出[2000, 20]的得分矩阵,如下图所示

  • 每个SVM分类器做的事情
    • 判断2000个候选区域是某类别,还是背景

2.5 非最大抑制(NMS)

  • 目的
    • 筛选候选区域,目标是一个物体只保留一个最优的框,来抑制那些冗余的候选框
  • 迭代过程
    • 1、对于所有的2000个候选区域得分进行概率筛选,0.5
    • 2、剩余的候选框
      • 假设图片真实物体个数为2(N),筛选之后候选框为5(P),计算N中每个物体位置与所有P的交并比IoU计算,得到P中每个候选框对应IoU最高的N中一个
      • 如下图,A、C候选框对应左边车辆,B、D、E对应右边车辆

假设现在滑动窗口有:A、B、C、D、E 5个候选框,

  • 第一轮:对于右边车辆,假设B是得分最高的,与B的IoU>0.5删除。现在与B计算IoU,DE结果>0.5,剔除DE,B作为一个预测结果
  • 第二轮:对于左边车辆,AC中,A的得分最高,与A计算IoU,C的结果>0.5,剔除C,A作为一个结果

最终结果为在这个5个中检测出了两个目标为A和B

SS算法得到的物体位置已经固定了,但是我们筛选出的位置不一定真的就特别准确,需要对A和B进行最后的修正

2.6 修正候选区域

那么通过非最大一直筛选出来的候选框不一定就非常准确怎么办?

R-CNN提供了这样的方法,建立一个bbox regressor

  • 回归用于修正筛选后的候选区域,使之回归于ground-truth,默认认为这两个框之间是线性关系,因为在最后筛选出来的候选区域和ground-truth很接近了

修正过程(线性回归)


3. 检测的评价指标

3.1 IoU交并比

任务description输入输出评价标准
Detection and Localization (检测和定位)在输入图片中找出存在的物体类别和位置(可能存在多种物体)图片(image)类别标签(categories)和 位置(bbox(x,y,w,h))IoU (Intersection over Union)
  • IoU(交并比)
    • 两个区域的重叠程度overlap:侯选区域和标定区域的IoU值

  • 通常Correct: 类别正确 且 IoU > 0.5

3.2 平均精确率(mean average precision)map

训练样本的标记:候选框(如RCNN2000个)标记

  • 1.每个ground-truth box有着最高的IoU的anchor标记为正样本
  • 2.剩下的anchor/anchors与任何ground-truth box的IoU大于0.7记为正样本,IoU小于0.3,记为负样本
  • 定义:多个分类任务的AP的平均值

    • mAP = 所有类别的AP之和 / 类别的总个数
    • 注:PR曲线,而AP(average precision)就是这个曲线下的面积(ROC与AUC)
  • 方法步骤:

    • 1、对于其中一个类别C,首先将算法输出的所有C类别的预测框,按预测的分数confidence排序
      • RCNN中就是SVM的输出分数
    • 2、设定不同的k值,选择top k个预测框,计算FP和TP,计算Precision和AP
    • 3、将得到的N个类别的AP取平均,即得到AP;AP是针对单一类别的,mAP是将所有类别的AP求和,再取平均:
  • 首先回顾精确率与召回率

    • 左边一整个矩形中的数表示ground truth之中为1的(即为正确的)数据
    • 右边一整个矩形中的数表示ground truth之中为0的数据
    • 精度precision的计算是用 检测正确的数据个数/总的检测个数
    • 召回率recall的计算是用 检测正确的数据个数/ground truth之中所有正数据个数。

4. R-CNN总结

4.1 流程总结



  • 表现
    • 在VOC2007数据集上的平均精度map达到66%

4.2 缺点

  • 1、训练阶段多:步骤繁琐: 微调网络+训练SVM+训练边框回归器。

  • 2、训练耗时:占用磁盘空间大:5000张图像产生几百G的特征文件。(VOC数据集的检测结果,因为SVM的存在)

  • 3、处理速度慢: 使用GPU, VGG16模型处理一张图像需要47s

  • 4、图片形状变化:候选区域要经过crop/warp进行固定大小,无法保证图片不变形

5. 总结

  • 掌握Overfeat模型思路
    • 滑动窗口
  • 掌握R-CNN的流程
  • 了解R-CNN的缺点
    • 训练耗时
    • 训练阶段多
    • 处理速度慢
    • 图片变形问题

6. 问题

1、NMS的过程描述?以及作用?

2、请说明候选框的修正过程?

3、IoU以及map计算过程

目标检测算法之fastr-cnn算法详解

&创新点  1.规避R-CNN中冗余的特征提取操作,只对整张图像全区域进行一次特征提取  2.用ROIpooling层取代最后一层maxpooling层,同时引入建议框信息,提取相应建议框特征  3.FastR-CNN网络末尾采用了并行的不同全连接层,... 查看详情

自动驾驶感知算法实战4——目标检测网络详解(r-cnnfastr-cnnyolossd等)

...栏:https://blog.csdn.net/charmve/category_12097938.html目录1导言:目标检测的任务表述2.目标检测经典工作回顾2.1两阶段(2-stage)检测模型2.1.1R-CNN:R-CNN系列的开山之作小结2.1.2FastR-CNN:共享卷积运算小结2.1.3FasterR-CNN:两阶段模型的深度化小... 查看详情

自动驾驶感知算法实战4——目标检测网络详解(r-cnnfastr-cnnyolossd等)

...栏:https://blog.csdn.net/charmve/category_12097938.html目录1导言:目标检测的任务表述2.目标检测经典工作回顾2.1两阶段(2-stage)检测模型2.1.1R-CNN:R-CNN系列的开山之作小结2.1.2FastR-CNN:共享卷积运算小结2.1.3FasterR-CNN:两阶段模型的深度化小... 查看详情

目标检测算法fastr-cnn(详解)

FastR-CNN学习目标1.FastR-CNN1.1RoIpooling1.2End-to-Endmodel2.多任务损失-Multi-taskloss3.R-CNN、SPPNet、FastR-CNN效果对比4.FastR-CNN总结5.总结6.问题学习目标目标了解FastR-CNN的结构特点说明RoIpooling的特点了解多任务损失【目标检测算法】改进-SPPNet&... 查看详情

目标检测算法fasterr-cnn(详解)(代码片段)

FasterR-CNN学习目标1.FasterR-CNN2.RPN原理2.1anchors3.FasterRCNN训练3.1FasterR-CNN的训练3.2候选区域的训练4.效果对比5.FasterR-CNN总结6.总结7.问题8.开源kerasFasterRCNN模型介绍学习目标目标了解FasterR-CNN的特点知道RPN的原理以及作用【目标检测算... 查看详情

目标检测算法:selectivesearch(选择性搜索)简述(代码片段)

Selectivesearch是一种基于特征的目标检测算法,在R-CNN中被用来生成候选区域。论文链接:http://www.huppelen.nl/publications/selectiveSearchDraft.pdfcode链接:https://github.com/AlpacaDB/selectivesearch原理简介在图像中寻找物体,可以依据多种特征,... 查看详情

利用更快的r-cnn深度学习进行目标检测(代码片段)

此示例演示如何使用名为“更快r-cnn(具有卷积神经网络的区域)”的深度学习技术来训练对象探测器。概述此示例演示如何训练用于检测车辆的更快r-cnn对象探测器。更快的r-nnn[1]是r-cnn[2]和快速r-nnn[3]对象检测技术的引伸。所... 查看详情

目标检测算法-yolo-v4代码详解(代码片段)

Yolo-V4算法中对网络进行了改进,使用CSPDarknet53。网络结构如下:Yolo-V4与Yolo-V3上相比较:(1)对主干网络进行了修改,将原先的Darknet53改为CSPDarknet53,其中是将激活函数改为Mish激活函数,并且在网络中加入了CSP结构。(2)对特征... 查看详情

详细解读目标检测经典算法-ssd(代码片段)

学习目标:知道SSD的多尺度特征图的网络知道SSD中先验框的生成方式知道SSD的损失函数的设计目标检测算法主要分为两类:Two-stage方法:如R-CNN系列算法,主要思路就是通过SelectiveSearch或者CNN网络产生一系列的稀... 查看详情

从零开始学习目标检测:yolo算法详解(代码片段)

从零开始学习目标检测:YOLO算法详解文章目录从零开始学习目标检测:YOLO算法详解1.🌟什么是目标检测?2.🌟传统的目标检测与基于深度学习的目标检测3.🌟目标检测算法的工作流程4.🌟目标检测可以干什... 查看详情

目标检测算法综述

1.传统的目标检测框架,主要包括三个步骤:(1)利用不同尺寸的滑动窗口框住图中的某一部分作为候选区域;(2)提取候选区域相关的视觉特征。比如人脸检测常用的Harr特征;行人检测和普通目标检测常用的HOG特征等;(3)... 查看详情

模型训练目标检测实现分享四:详解yolov4算法实现(代码片段)

...设计与实践,实践部分包括darknet与pytorch。 本文是目标检测类算法实现分享的第四篇,前面已经写过三篇,感兴趣的同学可以 查看详情

5.使用pytorch预先训练的模型执行目标检测(代码片段)

5.使用PyTorch预先训练的网络执行目标检测这篇博客将介绍如何使用PyTorch预训练的网络执行目标检测,这些网络是开创性的、最先进的图像分类网络,包括使用ResNet的更快R-CNN、使用MobileNet的更快R-CNN和RetinaNet。具有ResNet50... 查看详情

yolov1代码分析——pytorch版保姆级教程(代码片段)

...edict.py八.预测结果前言  前面我们介绍了yolov1-v5系列的目标检测理论部分,以及R-CNN,FastR-CNN,FasterR-CNN,SSD目标检测算法的理论部分,有不懂的小伙伴可以回到前面看看,下面附上链接:目标检测实... 查看详情

selectivesearch(代码片段)

...、单一策略评估 五、代码实现 在基于深度学习的目标检测算法的综述那一节中我们提到基于区域提名的目标检测中广泛使用的选择性搜索算法。并且该算法后来被应用到了R-CNN,SPP-Net,FastR-CNN中。因此我认为还是有研究的... 查看详情

mtcnn人脸识别(代码片段)

...记录下MTCNN论文及Tensorflow的复现过程。感觉人脸检测属于目标检测下的一个方向,不过由通用目标检测改为人脸检测,即多分类改为2分类,且为小目标检测。而且人脸检测还加上了关键点检测,可以依靠关键点增加召回率。主... 查看详情

目标检测算法(r-cnn,fastr-cnn,fasterr-cnn,yolo,ssd,yolov2,yolov3)

...应用到了各个领域,应用场景大体分为三类:物体识别,目标检测,自然语言处理。 目标检测可以理解为是物体识别和物体定位的综合,不仅仅要识别出物体属于哪个分类,更重要的是得到物体在图片中的具体位置。2014年R-... 查看详情

keras深度学习实战(15)——从零开始实现yolo目标检测(代码片段)

Keras深度学习实战(15)——从零开始实现YOLO目标检测0.前言1.YOLO目标检测模型1.1锚框(anchorboxes)1.2YOLO目标检测模型原理2.从零开始实现YOLO目标检测2.1加载数据集2.2计算锚框尺寸2.3创建训练数据集2.4实现YOLO目标检测模型2.5... 查看详情