RCNN 家族综述

这篇笔记总结了R-CNN、Fast R-CNN、Faster R-CNN和Mask R-CNN的工作原理与演进。RCNN利用选择性搜索提取候选区域,Fast R-CNN通过共享特征提取提高了速度,Faster R-CNN引入区域生成网络RPN进一步加速,而Mask R-CNN则增加了掩码分支,实现了实例分割。
摘要由CSDN通过智能技术生成

前言

这篇笔记主要是想记录一下,这前不久看的几篇论文,R-CNN、Fast R-CNN、Faster R-CNN和Mask R-CNN。目的是为了总结和纠正在笔记中出现的错误。

CNN

自从 AlexNet 获得 ILSVRC 2012 挑战赛冠军后,用 CNN 进行分类成为主流。传统的目标检测使用的方法主要有两种,一种是使用一系列不同大小、不同高宽比的窗口,在待检测的图像中从左到右,从上到下,依次遍历,并将每次遍历得到的结果都丢到CNN中提取特征。

15050749-e9db76a36c5e7515

另一种方法是将待检测的图片切割为固定的区域,并将每个区域看作是单独的图片,放到CNN中提取特征,进而分类.

显而易见,这两种方法有许多问题,例如大小和长宽比已经写死了,无法检测出形状大小比较特殊的目标;同时由于原本只需要检测一张,现在需要检测的数量增加了很多,会造成大量的算力浪费.

RCNN

和在大量区域上工作不同,RCNN算法提出在图像中创建多个边界框(候选区域(Region Proposal),感兴趣区域(Region of Interest)),检查这些边框中是否含有目标物体。RCNN使用选择性搜索(Selective Search )来从一张图片中提取这些边框。

15050749-efc1e491307e5d25

上图是选择性搜索算法的示意图,算法的流程如下:

  • 根据图的贪心算法,将一个个的像素块组成了像素块,再将每个像素块作为一组,
  • 随后,计算各组每一组与相邻组之间的颜色,纹理,尺寸,形状之间的相似度,并设定一个阈值,如果相似度大于这个阈值,那么这两组就会合并为新的一组.
  • 特别要注意的是,为了避免单个区域吞噬其他区域,我们首先对较小的组进行分组.
  • 这样不断进行下去,直到没有相似度达到阈值或者图片已经归为一组.

顾名思义:RCNN = region + CNN,RCNN 最大的变动就是在CNN的基础上添加了候选区域推荐的方法.

image-20201118220438913

上图是RCNN的示意图,可以看出他的步骤如下:

  • 输入一张图片
  • 使用选择性搜索,提取大约2000个候选区域
  • 将这些候选区域都放缩至定长尺寸的图片
  • 随后,将这些处理后的图片,分别放到一个CNN种提取特征
  • 训练支持向量机(SVM)来辨别目标物体和背景。对每个类别,我们都要训练一个二元SVM。
  • 训练一个线性回归模型,为每个辨识到的物体生成更精确的边界框。

RCNN使用的选择性搜索,对比之前暴力的方法,精度和效率都提高了很多.

然而RCNN也出现了许多的问题,例如:

  • 需要提取2000个候选区域,这些区域之间有很大一部分都是重叠的,
  • 其次这些候选区域分别放到CNN中,这会导致计算过慢

Fast RCNN

于是为了解决上述问题,Fast RCNN就出来了.既然我们不想对每个区域都放到CNN中提取特征,能不能只对待测图片进行一次特征提取,随后在这个得到的特征图种在进行选择性搜索呢?

但是我们能直接使用特征图代替原图来检测目标吗?答案是可以的,如下图,对于原图种的特征(车轮,车窗)在提取特征后仍然能够很好的保留.

image-20201118222355364

image-20201118222524290

上图是Fast RCNN的步骤图,他的步骤可以描述为如下:

  • 输入一张图片
  • 把这张图片放到神经网络中,并在最后一层加入候选区域的信息(这些区域是根据选择性搜索提取的),生成了许多感兴趣的区域.(实际上是两路并行的)
  • 由于卷积是是一个下采样的过程,可能尺寸会发生不是整数的情况下,Fast RCNN将其量化到最接近的整数
  • 接下来把所有在特征图中的候选区域放缩至放到ROI Pooling层中,进一步提取特征
  • 对于获得的每一个候选区域的特征都,放到全连接层中,分别使用softmax,和线性回归分别输出类别和边界框.

至于ROI Pooling中的操作,可以大致用下图来解释.

image-20201119095820146

首先一个候选区域在特征图中的位置并不是一个整数,ROI Layer层会将它量到到整数,其次在进行Pooling(池化)的过程中,也会出现结果不为整数的情况,所以作者又做了一次规整.这两次规整造成了精度的缺失,这也是后序Mask RCNN的一个改进方向.

计算量巨大的特征提取过程从 For 循环中移出来了,因此速度得到显著提升。Fast R-CNN 的训练速度是 R-CNN 的 10 倍,预测速度是后者的 150 倍。

但是Fast RCNN仍然有局限性,例如:

  • 仍然使用选择性搜搜来寻找ROI,这个算法在 CPU 上运行且速度很慢。在测试中,Fast R-CNN 需要 2.3 秒来进行预测,其中 2 秒用于生成 2000 个 ROI。因此区域生成的计算成为整个检测网络的瓶颈。
  • 其次就是ROI Pooling层中的不对准问题.

Faster RCNN

与其使用固定的算法得到候选区域,不如让网络自己学习自己的候选区域应该是什么。因此,Faster R-CNN 采用与 Fast R-CNN 相同的设计,只是它用区域生成网络(Region Proposal Network,RPN)代替了候选区域方法。新的候选区域网络(RPN)在生成 ROI 时效率更高,并且以每幅图像 10 毫秒的速度运行。

image-20201119100240252

上图是Faster RCNN的流程图,他的流程步骤为下:

  • 将一张图片输入到CNN中提取特征,生成特征图
  • 将这个特征图应用到RPN中,生成候选区域,并使用Softmax和线性回归区分该ROI是前景还是侯靖,并做了第一次线性回归
  • 这一步和Fast RCNN一样,将候选区域放入ROI Layer层中
  • 对于获得的每一个候选区域的特征都,放到全连接层中,分别使用softmax,和线性回归分别输出类别和边界框.

那么RPN是如何工作的呢?

在使用CNN 获得特征图之后,RPN会使用一系列不同大小,不同比例的滑动窗口在特征图上进行滑动,会获得一系列叫做anchor的东西,Anchor boxes是固定尺寸的边界框,它们有不同的形状和大小。对每个anchor,RPN都会预测两点:

  • 首先是anchor就是目标物体(前景和后景)的概率(不考虑类别)
  • 第二个就是anchor经过调整能更合适目标物体的边界框回归量

image-20201119102836580

上面一张图能够很好的解释RPN的作用,对于特征图中的每个点,他生成了K个anchor box,而256-d是Faster RCNN中使用的卷积层的最后一层的维度,对于每个anchor box,都会生成两个分数,一个是前景的分数,一个是背景的分数,加起来也就是2k个分数;而一般一个box使用(x,y,w,h)四个坐标进行线性回归的,所以会有4k个坐标用于回归.

当然,这里生成的anchor可能质量参差不齐,也数量太多,实际中往往过滤掉一些(box太小,越界,分数过低),并选取128个前景box和128背景box进行后序的操作.

简单来说,RPN有以下几个步骤:生成anchors -> softmax分类器提取positvie anchors -> bbox reg回归positive anchors -> Proposal Layer生成proposals

Mask RCNN

Mask RCNN在Faster RCNN的基础上,做了进一步的改进,他将前面的模型中使用的ROI Pooling改为了ROI Align层,这一步解决了ROI Pooling在进行候选区域映射的时候造成的不对准问题,另一个是引入了一个新的Mask的全连接分支,这个分支能够让Mask RCNN实现点对点的分类,实现实力分割的功能.

image-20201119103826310

上图是Mask RCNN的流程图,他的步骤大致如下:

  • 输入一张图片
  • 将输入图片送入到特征提取网络得到特征图。
  • 然后对特征图的每一个像素位置设定固定个数的ROI(大小,比例各不相同),然后将ROI区域送入RPN网络进行二分类(前景和背景)以及坐标回归,筛选部分ROI后,获得精炼后的ROI区域。
  • 对上个步骤中获得的ROI区域执行ROIAlign操作
  • 最后对这些ROI区域进行多类别分类,候选框回归和引入FCN生成Mask,完成分割任务。

而ROI Align其实也比较简单,通过和ROI Pooling对比很快就能明白什么意思

image-20201119104348207

上图是ROI pooling 的操作过程,而对于Roi Align,他有

image-20201119104510721

和ROI pooling最主要有两个区别,一个是他在映射的时候没有取整,另外一个就是他在池化的过程中,也没有进行取整,所以相较于ROI pooling,ROI Align可以更好的保留大致的空间位置.而这里涉及到的操作,是双线性插值,这是线性插值在二维情况下的扩展.实际上就是分别在x和y轴上分别做一次线性插值.

image-20201119104710354

对于 Q 11 = ( x 1 , y 1 ) , Q 12 = ( x 1 , y 2 ) , Q 21 = ( x 2 , y 1 ) , Q 22 = ( x 2 , y 2 ) , R 1 = ( x , y 1 ) , R 2 = ( x , y 2 ) , P = ( x , y ) Q_{11}=(x_1,y_1),Q_{12}=(x_1,y_2),Q_{21}=(x_2,y_1),Q_{22}=(x_2,y_2),R_{1}=(x,y_1),R_{2}=(x,y_2),P=(x,y) Q11=(x1,y1),Q

RCNN(Region-based Convolutional Neural Network)是一种目标检测算法,而Mask RCNN是在RCNN的基础上添加了一个预测分割mask的分支。Mask RCNN相比于RCNN具有更好的泛化适应能力,可以与多种RCNN框架结合,并表现出色。以及相关的代码链接。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Mask-RCNN技术解析](https://blog.csdn.net/linolzhang/article/details/71774168)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Mask R-CNN原理详细解读](https://blog.csdn.net/qq_37392244/article/details/88844681)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Mask RCNN 算法笔记](https://blog.csdn.net/u014380165/article/details/81878644)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值