一.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 。示意图如下 
 
至于这个 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

检测系列--RCNN系列相关推荐

  1. 【目标检测】RCNN系列

      在计算机视觉的众多技术领域中,目标检测(物体检测,object detection)是一项非常基础的任务,图像分割.物体追踪.关键点检测都依赖于目标检测,广泛应用于自动驾驶.机器人导航.智能视频监 ...

  2. R-CNN系列算法的发展历程

    目录 上一次分析了YOLO系列的算法: R-CNN 论文链接 概述 R-CNN流程 谈一下R-CNN的pre-training 谈一下R-CNN不同阶段正负样本的IOU阈值 谈一下R-CNN的fine ...

  3. RCNN系列、Fast-RCNN、Faster-RCNN、R-FCN检测模型对比

    RCNN系列.Fast-RCNN.Faster-RCNN.R-FCN检测模型对比 一.RCNN 问题一:速度 经典的目标检测算法使用滑动窗法依次判断所有可能的区域.本文则预先提取一系列较可能是物体的候 ...

  4. 深度学习目标检测系列:RCNN系列算法图解

    在生活中,经常会遇到这样的一种情况,上班要出门的时候,突然找不到一件东西了,比如钥匙.手机或者手表等.这个时候一般在房间翻一遍各个角落来寻找不见的物品,最后突然一拍大脑,想到在某一个地方,在整个过程中 ...

  5. 【技术综述】一文道尽R-CNN系列目标检测

    文章首发于微信公众号<有三学AI> [技术综述]一文道尽R-CNN系列目标检测 目标检测任务关注的是图片中特定目标物体的位置.一个检测任务包含两个子任务,其一是输出这一目标的类别信息,属于 ...

  6. 【百度飞浆】RCNN系列目标检测算法详解

    RCNN系列目标检测算法详解 目录 两阶段目标检测算法发展历程 R-CNN R-CNN网络结构 R-CNN网络效果 Fast R-CNN Fast R-CNN网络效果 Faster R-CNN Fas ...

  7. 目标检测算法图解:一文看懂RCNN系列算法

    在生活中,经常会遇到这样的一种情况,上班要出门的时候,突然找不到一件东西了,比如钥匙.手机或者手表等.这个时候一般在房间翻一遍各个角落来寻找不见的物品,最后突然一拍大脑,想到在某一个地方,在整个过程中 ...

  8. 目标检测—RCNN系列

    工程应用中,检测算法以one-stage算法yolo系列等为主,因为one-stage通常来说速度快,可以完成良好的实时检测. 本文回顾的是two-stage算法:RCNN系列 One-stage a ...

  9. 后 R-CNN时代, Faster R-CNN、SSD、YOLO 各类变体统治下的目标检测综述:Faster R-CNN系列胜了吗?,(知乎ChenJoya大佬,讲的挺好的,记录一下)

    我们检测到你可能使用了 AdBlock 或 Adblock Plus,它的部分策略可能会影响到正常功能的使用(如关注). 你可以设定特殊规则或将知乎加入白名单,以便我们更好地提供服务. (为什么?) ...

最新文章

  1. U3D的Collider
  2. 机器学习特征工程之特征缩放+无量纲化:最大绝对值缩放(MaxAbsScaler)
  3. 从网上下载的jar包导入到本地maven库
  4. 工程师进阶之路(二)
  5. 放个手机在单位自动打卡_1秒识别打卡,无感知考勤系统重磅来袭!
  6. Android心电数据分析,Android SurfaceView+Canvas画脉搏/心电数据图-Go语言中文社区
  7. 健康饮食-美味诱人的鸡肉香菇烩什锦[我写绿色IT]
  8. Ubuntu 17.04 壁纸设计大赛 已经开幕
  9. Python机器学习:多项式回归与模型泛化003过拟合与欠拟合
  10. Leetcode Contains Duplicate II
  11. 读《刘帅:在失望中寻找希望》有感
  12. BZOJ2795: [Poi2012]A Horrible Poem
  13. Android 使用 Gradle 构建时,出现 Crunching Cruncher xxx.9.png failed 问题的解决方法
  14. 评分卡模型中的IV和WOE详解
  15. 房产销售数据分析与可视化的设计与实现
  16. 传奇服务器注册不了账号密码,登录器显示服务器状态良好,但不能注册帐号?...
  17. wc,鹅厂码农最常用的三大编程语言,Java竟然没上榜!
  18. 戴尔linux改win7教程视频,戴尔笔记本win10改win7系统BIOS设置详细教程
  19. Java接口 详解(二)
  20. Xcon北京黑客大会明天开幕

热门文章

  1. 新分类!全总结!最新Awesome-SLU-Survey资源库开源!
  2. 给准保研生/调剂生的几个简历制作的建议
  3. 从源码角度分析Android系统的异常捕获机制是如何运行的
  4. 如何下载Android源码(非常详细,含自动恢复下载,编译,运行模拟器说明)
  5. [AH2017/HNOI2017] 大佬
  6. vue-todolist
  7. linux 安装svn客户端
  8. 第七章:集成学习(利用AdaBoost元算法...)
  9. 第一阶段 03Java的基本数据类型
  10. [openjudge] 2797最短前缀 Trie