检测系列--RCNN系列

一.RCNN

框架:

1.selective search

2,区域预处理,尺寸缩放到227×227

3.利用Alexnet(去掉最后分类层,4096维向量),做特征提取,一个物体一个SVM分类,(当时认为SVM比softmax分类好)bounding box回归

4.正负样本选择方法

全连接层最后一层换成分类数+背景,IOU>0.5,正样本,IOU<0.5,负样本,每个类别对应一个SVM分类器

5.回归,利用的是第五层卷积特征做回归

6.测试,测试出来的最大分值的框,做NMS去掉多余的框

7.评价指标,召回率例如是坏人就抓回监狱

速度慢的原因:每个区域都需要卷积,用于SVM、b-box 回归的特征需要存储到磁盘中,这将需要占用大量的磁盘空间,而且提取这些特征也会耗费好多时间。

问题:训练时间很长(84小时),Fine-tune(18)+ 特征提取(63)+ SVM/Bbox训练(3),测试阶段很慢:VGG16一张图片47s,复杂的多阶段训练。

二.SPP-Net

1.改进:(1)共享卷积,直接在Conv5用特征

(2)引入空间金字塔池化(spp),为不同尺寸的区域在conv5输出上提取特征,映射到尺寸固定的全连接层

2.spp网络结构

3.分块,块里面做最大池化

4.特征位置与原图对应

5.训练过程:注意与RCNN区别,冻结卷积层权重

问题:
• 继承了R-CNN的剩余问题,需要存储大量特征,复杂的多阶段训练,训练时间仍然长(25.5小时),Fine-tune(16)+ 特征提取(5.5)+ SVM/Bbox训练(4),带来了新问题,SPP层之前的所有卷积层参数不能fine tune,误差过不了spp层,因为计算困难。

三.Fast R-CNN

1.改进:

比R-CNN,SPP-Net更快的trainng/test,更高的mAP, 实现end-to-end(端对端)单阶段训练,多任务损失函数(Multi-task loss), 所有层的参数都可以fine tune, 不需要离线存储特征文件

2.引入新技术

感兴趣区域池化层(RoI pooling layer)替换spp层, 多任务损失函数(Multi-task loss)

3.roi pooling,注意:spp和roi的区域都是通过slective search选择的,此时误差可传过roi了。

roi pooling缺点:

由于两次量化带来的误差;

(1)将候选框边界量化为整数点坐标值。

(2)将量化后的边界区域平均分割成 k x k 个单元(bin),对每一个单元的边界进行量化。

针对修改的roi align

  • 遍历每一个候选区域,保持浮点数边界不做量化。
  • 将候选区域分割成k x k个单元,每个单元的边界也不做量化。
  • 在每个单元中计算固定四个坐标位置,用双线性内插的方法计算出这四个位置的值,然后进行最大池化操作。

对小目标检测有很大改善 

https://www.cnblogs.com/zf-blog/p/9934086.html

4.重叠区域误差传播做法

5

5.修正框

6.损失函数

7.奇异值分解,加速全连接

8.性能比较

四,Faster R-CNN

1.网络结构

如上图,一副P*Q的图像,先缩放到M*N大小,然后进入backbone提取特征,对于RPN,先用3*3卷积,在两个1*1卷积分别生成positive anchors和对应bounding box regression偏移量,然后proposal层负责综合positive anchors和对应bounding box regression偏移量获取proposals.而roi pooling则利用proposals提取出相应的feature map进入后续的全连接分类.

2.改进

RPN理解

https://blog.csdn.net/bingochenjx/article/details/78422290

rpn代替selective search

3.RPN,conv5经3x3卷积核,1x1卷积核得到的特征去做回归,另一个1x1卷积核得到的特征去做分类。

4.anchor选择方法,一般k=9

首先我们需要知道 anchor 的本质是什么,本质是 SPP(spatial pyramid pooling) 思想的逆向。而SPP本身是做什么的呢,就是将不同尺寸的输入 resize 成为相同尺寸的输出。所以SPP的逆向就是,将相同尺寸的输出,倒推得到不同尺寸的输入。接下来是 anchor 的窗口尺寸,这个不难理解,三个面积尺寸(128^2,256^2,512^2),然后在每个面积尺寸下,取三种不同的长宽比例(1:1,1:2,2:1).这样一来,我们得到了一共9种面积尺寸各异的 anchor 。示意图如下 
archor 
至于这个 anchor 到底是怎么用的,这个是理解整个问题的关键。 
下面是整个 Faster RCNN 结构的示意图: 
这里写图片描述

利用anchor是从第二列这个位置开始进行处理,这个时候,原始图片已经经过一系列卷积层和池化层以及relu,得到了这里的 feature:51x39x256(256是层数)

在这个特征参数的基础上,通过一个3x3的滑动窗口,在这个51x39的区域上进行滑动,stride=1padding=2,这样一来,滑动得到的就是51x39个3x3的窗口。对于每个3x3的窗口,作者就计算这个滑动窗口的中心点所对应的原始图片的中心点

然后作者假定,这个3x3窗口,是从原始图片上通过SPP池化得到的,而这个池化的区域的面积以及比例,就是一个个的anchor。换句话说,对于每个3x3窗口,作者假定它来自9种不同原始区域的池化,但是这些池化在原始图片中的中心点,都完全一样。这个中心点,就是刚才提到的,3x3窗口中心点所对应的原始图片中的中心点。

如此一来,在每个窗口位置,我们都可以根据9个不同长宽比例、不同面积的anchor,逆向推导出它所对应的原始图片中的一个区域,这个区域的尺寸以及坐标,都是已知的。而这个区域,就是我们想要的 proposal。所以我们通过滑动窗口和anchor,成功得到了 51x39x9 个原始图片的 proposal

接下来,每个 proposal 我们只输出6个参数:每个 proposal 和 ground truth 进行比较,把与ground truth 中重叠最大的 bounding box 的iou当成是这个proposal的iou, iou>0.7, 认为这个proposal是positiveiou<0.3, 认为这proposal是negative,我们希望positive的proposal包含前景的概率高一些,negative包含背景的概率高一些;iou位于这之间的不做处理。 
然后对每个proposal进行分类和bounding box regression:得到的前景概率和背景概率(2个参数)(对应图上的 cls_score);由于每个 proposal 和 ground truth 位置及尺寸上的差异,从 proposal 通过平移放缩得到 ground truth 需要的4个平移放缩参数(对应图上的 bbox_pred)。 
所以根据我们刚才的计算,我们一共得到了多少个anchor box呢? 51 x 39 x 9 = 17900 
约等于 20 k

4,训练过程,先训练rpn做好anchor,在做fast rcnn,注意共享卷积层以后,要冻结卷积层

5,性能比较

6,网络总体比较

fast rcnn多任务损失函数

7.带FPN的RPN

        

对于FPN的话,也就是需要将每一层feature map逐个输入到RPN网络,同时每个feature map负责不同大小的目标.

 

五.R-FCN

1,全连接会丧失空间信息

2,红色框是R-FCN的特有之处,所有通道数等于分类数+背景

3,每类对应每层通道

4,feature map   可视化

5,损失函数

六.cascade rcnn

faster rcnn存在问题:

train时:RPN阶段选择2000左右proposals,在选择IOU大于一定阈值,比如0.5的,一般会选择128个,满足1:3比例,在进入fast rcnn经过roi pooling 在进行分类与回归;

inference:RPN阶段选择300左右proposals,直接roi pooling进行分类与回归,那么这里就没有iou的选择。这里就能看出train和inference时,回归的框质量明显不一样,也就是mismatch问题。通常阈值取0.5时,mismatch问题还不会很严重

从实验看出来推理时只有RPN选择的iou和训练时候的iou接近是,性能才最好,否则就是mismatch问题.也就看出来了单一阈值训练出的检测器效果非常有限,单一阈值不能对所有的Proposals都有很好的优化作用.

上图就是cascade rcnn框架,RPN提出的proposals大部分质量不高,导致没办法直接使用高阈值的detector,Cascade R-CNN使用cascade回归作为一种重采样的机制,逐stage提高proposal的IoU值,从而使得前一个stage重新采样过的proposals能够适应下一个有更高阈值的stage。对于(b)detector会改变样本的分布,这时候再使用同一个共享的H对检测肯定是有影响的;对于(c)c3高质量检测头容易过拟合,但是还要去预测低质量框,检测效果更差。

参考:

https://zhuanlan.zhihu.com/p/32702387

https://zhuanlan.zhihu.com/p/31426458

https://zhuanlan.zhihu.com/p/145842317

https://zhuanlan.zhihu.com/p/42553957

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值