从RCNN到MaskRCNN(RCNN系列)

在这里插入图片描述

1、RCNN(2014年10月)

(1)RCNN网络结构
在这里插入图片描述

(2.1)RCNN流程1:生成候选框

在原始图像上,使用selective search算法,生成约2000个候选框。

(2.2)RCNN流程2:提取特征

使用AlexNet卷积网络进行特征提取,串行,每个候选框一个卷积。

(2.3)RCNN流程3:SVM分类及候选框回归

串行,每个候选框对应一组SVM分类器和一个回归器。

(3.1)RCNN可优化1:selective search生成候选框速度太慢

一张图,生成约2000个候选框,需要大概2s。

(3.2)RCNN可优化2:多个卷积串行提取特征速度太慢

一张图2000个候选框,每个候选框对应一个卷积网络,需要47s。

2、Fast RCNN(2015年9月)

(1)Fast RCNN网络结构

在这里插入图片描述

(2.1)Fast RCNN改进1:共享卷积

取代RCNN串行提取特征方式,采用一个卷积网络提取全图特征。

(2.2)Fast RCNN改进2:RoI Pooling层(SPP)

RoI池化层实质上就是单层的SPP模块。

SPP(Spatial Pytamid Pooling,空间金字塔池化)模块,位于卷积层和全连接层之间,用于接收任意尺寸的输入、提取其特征并产生固定大小的输出。

SPP将最后一层卷积层输出的特征图分割成不同尺寸的网络,分别为4x4,2x2,1x1,然后对每个小格子进行max pooling,将池化后的结果连接起来,就能得到(16+4+1)x 256的固定长度的输出。

在这里插入图片描述

(2.3)Fast RCNN改进3:使用softmax代替SVM

(3)Fast RCNN可优化:selective search生成候选框太慢

仍然是在原始图像进行selective search提取候选框,然后在特征图上找到对应位置,依然是在cpu运行,尚有优化空间。

3、Faster RCNN(2016年1月)

(1)Faster RCNN网络结构

在这里插入图片描述
在这里插入图片描述

上图所示:Faster RCNN包括了三个部分,第一部分是共享的卷积层-backbone,第二部分是候选区域生成网络-RPN,第三部分是对候选区域进行分类的网络-classifier。其中,RPN与classifier部分均对目标框有修正。

(2)Faster RCNN改进1:RPN层

取代selective search在原始图像上提取候选框,加入RPN层在特征图上提取特征。

RPN为特征图上的每个点生成9个预先设置好长宽比与面积的候选框(anchor)。三种面积:128 x 128,256 x 256,512 x 512;每种面积又包含三种长宽比:1:1,1:2,2:1。

由于共享特征图的大小约为40 x 60(原始图像600 x 1000),RPN生成的初始anchor约为2w个(40 x 60 x 9)。对于生成的anchor,RPN要做的事情有两个,第一个是判断anchor是前景还是背景,第二个是为属于前景的anchor进行第一次坐标修正。
在这里插入图片描述
在这里插入图片描述

(3)Faster RCNN改进2:使用Proposal Layer进行候选框过滤

以训练过程描述,推断和训练基本一样:

首先通过RPN生成约2w个anchor(40 x 60 x 9)。

删除越界框,余约 6000(推断时进行裁剪,保留图像内部分)。

通过NMS进行过滤,余约2000。

取Top N,如Top 256。

(4)推断时间对比

在这里插入图片描述

4、Mask RCNN(2017年)

Mask RCNN以Faster RCNN原型,增加了一个分支用于分割任务。实例分割不仅要正确的找到图像中的objects,还要对其精确的分割。所以Instance Segmentation(实力分割)可以看做object dection(物体检测)和 semantic segmentation(语义分割)的结合。

(1)Mask RCNN网络结构

在这里插入图片描述

下图为Faster RCNN网络结构图(用于对比):
在这里插入图片描述

(2)Mask RCNN改进1:FPN提取多阶段特征进行融合

Mask RCNN使用ResNet+FPN(特征金字塔网络)进行特征提取。

顶层特征(最后一层特征图),感受野最大,特征信息最丰富,但对小物体的检测效果并不好。因此,将多个阶段的特征图融合在一起(FPN),这样既有了高层的语义特征,也有了底层的轮廓特征。

ResNet101有5个阶段(stage),C2-C5每上升一个阶段,特征图大小变为原来的1/2,通道数变为原来的2倍,取每个阶段的最后一层作为输出,即:C1(256 x 256 x 64),C2(256 x 256 x 256),C3(128 x 128 x 512),C4(64 x 64 x 1024),C5(32 x 32 x 2048)。

融合:进行加法操作。例如下图的P5+C4,P4+C3,P3+C2。加法操作前提:一是特征图大小相同;二是通道数相同。解决前提一:自上而下,使用线性插值进行上采样,得到相同大小特征图。解决前提二:使用1 x 1卷积,将通道数统一为256。

在这里插入图片描述

代码片段:

在这里插入图片描述

(3)关于生成候选框与过滤候选框(RPN、Proposal Layer)

RPN在多个特征图(P2-P6)上提取候选框,其它与Faster RCNN基本一样。Proposal Layer过滤候选框,与Faster RCNN也基本一样。

(4)关于正样本和负样本(Detection Target层)

Faster RCNN训练时,每次输入一张图像,众多候选框中,NMS>0.7的作为正例,NMS<0.3的作为负例,正例和负例各取128个框,正例不足128时,用负例补充。

Mask RCNN训练时,以0.5作为NMS阈值判断候选框为正例或负例,正例与负例比例为1:3,取400个框,即100正例,300负例。

(5)Mask RCNN改进2:RoI Align替代RoI Pooling

RoI Pooling有什么问题?

经过两次量化,使特征图对应位置不准。

以下图实例说明:

输入图像800 x 800,有一个gt(一只狗)665 x 665,经过卷积后特征图大小为25 x 25(缩小32倍)。第一次量化: gt的大小为665 / 32 = 20.78,向下取整为20;第二次量化:对gt执行7 x 7池化,20 / 7=2.86,向下取整为2。特征图上0.1像素的偏差,在原始图像上是3.2像素,那么0.8像素的偏差就是20多像素,这一点差别不容小觑。
在这里插入图片描述

RoI Align:

双线性插值方法,获得浮点数坐标点上的特征值。

对每个小区域(2.97 x 2.97,20.78 / 7 = 2.97)平均分成4份,再取其4个中心点位置进行Pooling。

(6)Mask RCNN改进3:增加Mask分支(语义分割)

Mask分支只做语义分割,类型预测的任务交给另一个分支。

如网络结构图所示,Mask分支包括head、FCN(全卷积网络)、Mask。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值