7、R-CNN系列

R-CNN系列

链接: 目标检测
各类方法主要的创新点

  • 1.RCNN解决的是用CNN网络对每个proposal region进行特征提取
  • 2.SPP-RCNN实现了对整个图片进行特征提取,然后再在feature map寻找特定的proposal region, 并提出了特征金字塔池化来解决不同大小proposal region输出到固定尺寸的问题。
  • 3.Fast-RCNN实现了卷积网络的权重共享,使用RoI pooling来保持多尺度输入(SPP-RCNN), 并去除了SVM分类器,改用softmax实现了端到端。
  • 4.Faster-RCNN提出了RPN, 用卷积层提取proposal region,实现了端到端训练

参考连接:https://blog.csdn.net/qq_34826149/article/details/109465069

1、R-CNN

选择性搜索候选框----正负样本提取(IOU筛选即nms)------抠图CNN提取特征----SVM分类(极大值抑制进一步筛选)-----边框回归(将筛选出来的进行调整)

候选区域提出阶段(Proposal):采用selective-search方法,从一幅图像生成1K~2K个候选区域;
特征提取:对每个候选区域,使用CNN进行特征提取;
分类:每个候选区域的特征放入分类器SVM,得到该候选区域的分类结果;
回归:候选区域的特征放入回归器,得到bbox的修正量。

R-CNN的简要步骤如下:

  • 输入测试图像。
  • 候选区域:利用选择性搜索Selective Search算法在图像中从下到上提取2000个左右的可能包含物体的候选区域Region Proposal。
  • 特征提取:因为取出的区域大小各自不同,所以需要将每个Region Proposal缩放(warp)成统一的227x227的大小并输入到CNN,将CNN的fc7层的输出作为特征。
  • 分类:将每个Region Proposal提取到的CNN特征输入到SVM进行分类。
  • 回归:候选区域的特征放入回归器,得到bbox的修正量。
    在这里插入图片描述
    1)Selective Search 选择性搜索
    遵循简单即是美的原则,只负责快速地生成可能是物体的区域,而不做具体的检测。选择搜索算法的思路很简单,就是输入一个图像,然后通过一些图像分割算法将其分割为很多个小块,这些小块组成一个集合R。在R中对所有相邻的块求相似度,得到新的集合S。对集合S中相似度最高的两个块R1, R2进行合并可以得到新的块R_new,加入R中,同时删除S中所有与R1或R2有关的相似度,然后计算R_new和所有相邻区域的相似度,加入S。如此重复迭代计算,直到集合S中不再包含任何元素即可。
    2)Region Proposal候选区域
    使用了Selective Search1方法从一张图像生成约2000-3000个候选区域。基本思路如下:
  • 使用一种过分割手段,将图像分割成小区域,查看现有小区域,合并可能性最高的两个区域。重复直到整张图像合并成一个区域位置,输出所有曾经存在过的区域,候选区域生成和后续步骤相对独立,实际可以使用任意算法进行。
  • 合并规则
    优先合并以下四种区域:
    颜色(颜色直方图)相近的
    纹理(梯度直方图)相近的
    合并后总面积小的
    合并后,总面积在其BBOX中所占比例大的

3)crop&warp
CNN一般都含有卷积部分和全连接部分,其中,卷积层不需要固定尺寸的图像,而全连接层是需要固定大小的输入。所以当全连接层面对各种尺寸的输入数据时,就需要对输入数据进行crop(crop就是从一个大图扣出网络输入大小的patch,比如227×227),或warp(把一个边界框bounding box(红框)的内容resize成227×227)等一系列操作以统一图片的尺寸大小,比如224224(ImageNet)、3232(LenNet)、96*96等。

在这里插入图片描述
所以才如你在上文中看到的,在R-CNN中,“因为取出的区域大小各自不同,所以需要将每个Region Proposal缩放(warp)成统一的227x227的大小并输入到CNN”。

4)SVM分类
单个SVM实现的是二分类,分类器阶段由多个SVM组合而成。比如总共有20种不同的物体(加1种背景),那么分类阶段必须要有21个SVM:第1个SVM的输出是该候选区域属于分类1的概率;第2个SVM的输出是该候选区域属于分类2的概率;……;第21个SVM的输出是该候选区域属于背景的概率。

参考连接:
https://blog.csdn.net/weixin_41510260/article/details/99189794
https://blog.csdn.net/qq_32172681/article/details/100090365

瓶颈:
每一个region proposal 都需要resize成固定大小。
对每个region proposals 都做一次CNN计算,计算量太大。
每个region proposal经过CNN网络提取出来的特征得保留下来,用于训练SVM分类,占用过多的物理内存,训练分成多个阶段 region select + CNN特征提取 + SVM分类 + 边框回归。无法实现端到端训练。

2、Spp-Net

针对R-CNN瓶颈:每一个region proposal 都需要resize成固定大小;对每个region proposals 都做一次CNN计算,计算量太大。SPP-Net相对于R-CNN主要做了两点改进:1. 对整张图进行一次特征提取 2. 引用了空间金字塔
在这里插入图片描述

  • 1.结合空间金字塔方法实现CNNs的多尺度输入
    SPP Net的第一个贡献就是在最后一个卷积层后,接入了金字塔池化层,保证传到下一层全连接层的输入固定。换句话说,在普通的CNN机构中,输入图像的尺寸往往是固定的(比如224*224像素),输出则是一个固定维数的向量。SPP Net在普通的CNN结构中加入了ROI池化层(ROI Pooling),使得网络的输入图像可以是任意尺寸的,输出则不变,同样是一个固定维数的向量。简言之,CNN原本只能固定输入、固定输出,CNN加上SSP之后,便能任意输入、固定输出。

  • 2.只对原图提取一次卷积特征
    在R-CNN中,每个候选框先resize到统一大小,然后分别作为CNN的输入,这样是很低效的。而SPP Net根据这个缺点做了优化:只对原图进行一次卷积计算,便得到整张图的卷积特征feature map,然后找到每个候选框在feature map上的映射patch,将此patch作为每个候选框的卷积特征输入到SPP layer和之后的层,完成特征提取工作。
    如此这般,R-CNN要对每个区域计算卷积,而SPPNet只需要计算一次卷积,从而节省了大量的计算时间,比R-CNN有一百倍左右的提速。

瓶颈:
缺点还是在于分类器使用SVM, 不能端到端训练,且需要磁盘存储大量的特征。
分阶段训练,训练过程复杂。

3、Fast-RCNN

Fast R-CNN的网络将图像和region proposal作为输入,经过卷积层得到feature map后,经过特定RoI pooling后输出固定大小的特征图,然后输入到全连接层,通过全连接层后的特征用SVM进行分类。
与R-CNN不同:

  • 特征提取:对整张图片进行特征提取得到相应的特征图
  • RoI Pooling:参照spp使用RoI pooling来保持多尺度的输入。利用特征池化(RoI Pooling) 的方法进行特征尺度变换, 这种方法可以有任意大小图片的输入, 使得训练过程更加灵活、 准确。
  • 多任务损失:用同一个网络,同时进行分类和回归任务。 将分类与回归网络放到一起训练, 并且为了避免SVM分类器带来的单独训练与速度慢的缺点, 使用了Softmax函数进行分类。
    在这里插入图片描述

瓶颈:
在region proposal模块还是用selective search, 并且只能在CPU中运行这个算法,这个阶段还可以改进。

4、Faster-RCNN

  Faster RCNN是Fast RCNN的修改版本,二者之间的主要区别在于,Fast RCNN使用选择性搜索来生成感兴趣区域,而Faster RCNN使用“区域提议网络”,即RPN。RPN将图像特征映射作为输入,并生成一组提议对象,每个对象提议都以对象分数作为输出。
  • 第一阶段生成图片中待检测物体的anchor矩形框(对背景和待检测物体进行二分类)
  • 第二阶段对anchor框内待检测物体进行分类。
    Faster RCNN可以看作 RPN+Fast RCNN,其中RPN使用CNN来生成候选区域,并且RPN网络可以认为是一个使用了注意力机制的候选区域选择器。
    在这里插入图片描述

RPN
不同于耗时极长的选择性搜索,RPN网络使用神经网络进行候选框提取,这是Faster-RCNN的精髓。
将传统的候选区域生成方法使用卷积运算来代替,使用卷积来生成候选区域使得RPN具有一定注意力机制,效果与前几代的RCNN相比,提升明显。在生成候选区域的时候会生成anchors,然后内部通过判别函数判断anchors属于前景还是后景,然后通过边框回归来进行第一次调整anchors获取准确的候选区域。
首先,RPN网络接受任意尺寸大小的feat map作为输入,然后会生成9K个anchor,并且RPN有两个输出,一个是anchor的类别信息,也就是该anchor是背景还是前景(只要有要识别的物品就属于前景),还有一个输出是该anchor的位置偏移信息(如果该anchor是背景,则该输出不重要)。

瓶颈:商用的话速度依然是问题,需要模型轻量化或者one-stage算法

5、Mask-RCNN

简单直观:整个Mask R-CNN算法的思路很简单,就是在原始Faster-rcnn算法的基础上面增加了FCN来产生对应的MASK分支。即Faster-rcnn + FCN,更细致的是 RPN + ROIAlign + Fast-rcnn + FCN。
高速和高准确率:为了实现这个目的,作者选用了经典的目标检测算法Faster-rcnn和经典的语义分割算法FCN。Faster-rcnn可以既快又准的完成目标检测的功能;FCN可以精准的完成语义分割的功能,这两个算法都是对应领域中的经典之作。Mask R-CNN比Faster-rcnn复杂,但是最终仍然可以达到5fps的速度,这和原始的Faster-rcnn的速度相当。由于发现了ROI Pooling中所存在的像素偏差问题,提出了对应的ROIAlign策略,加上FCN精准的像素MASK,使得其可以获得高准确率。

易于使用:整个Mask R-CNN算法非常的灵活,可以用来完成多种任务,包括目标分类、目标检测、语义分割、实例分割、人体姿态识别等多个任务,这将其易于使用的特点展现的淋漓尽致。我很少见到有哪个算法有这么好的扩展性和易用性,值得我们学习和借鉴。除此之外,我们可以更换不同的backbone architecture和Head Architecture来获得不同性能的结果。
在这里插入图片描述

  1. Mask R-CNN算法步骤
    首先,输入一幅你想处理的图片,然后进行对应的预处理操作,或者预处理后的图片;
    然后,将其输入到一个预训练好的神经网络中(ResNeXt等)获得对应的feature map;
    接着,对这个feature map中的每一点设定预定个的ROI,从而获得多个候选ROI;
    接着,将这些候选的ROI送入RPN网络进行二值分类(前景或背景)和BB回归,过滤掉一部分候选的ROI;
    接着,对这些剩下的ROI进行ROIAlign操作(即先将原图和feature map的pixel对应起来,然后将feature map和固定的feature对应起来);
    最后,对这些ROI进行分类(N类别分类)、BB回归和MASK生成(在每一个ROI里面进行FCN操作)。
  2. Mask R-CNN架构分解
    在这里,我将Mask R-CNN分解为如下的3个模块,Faster-rcnn、ROIAlign和FCN。然后分别对这3个模块进行讲解,这也是该算法的核心。
  3. Faster-rcnn
  4. FCN
    在这里插入图片描述
    FCN算法是一个经典的语义分割算法,可以对图片中的目标进行准确的分割。其总体架构如上图所示,它是一个端到端的网络,主要的模快包括卷积和去卷积,即先对图像进行卷积和池化,使其feature map的大小不断减小;然后进行反卷积操作,即进行插值操作,不断的增大其feature map,最后对每一个像素值进行分类。从而实现对输入图像的准确分割。具体的细节请参考该链接。
    参考连接:https://blog.csdn.net/WZZ18191171661/article/details/79453780
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值