【目标检测】two-stage------Faster R-CNN浅析-2015

every blog every motto: There’s only one corner of the universe you can be sure of improving, and that’s your own self.
https://blog.csdn.net/weixin_39190382?spm=1010.2135.3001.5343

0. 前言

简单梳理Faster R-CNN
R-CNN
SSP-Net
Fast R-CNN

1. 正文

时间: 2015
论文: https://arxiv.org/abs/1506.01497

1.1 R-CNN系列 流程

1.1.1 R-CNN

流程:

  1. 利用selective search 在图像上选择2000个左右的候选区(Region Proposal)
  2. 将每个候选区缩放到227×227并输入到CNN,将CNN的fc7层输出作为特征
  3. 将上面提取到的特征输入SVM进行(二)分类
  4. 对SVM分好类的Region Proposal做边框回归,用Bounding box回归值校正原来的建议窗口,生成预测窗口坐标

缺点:

  • 训练分多个阶段:微调网络、训练SVM、边框回归
  • 训练耗时,占用磁盘空间大;CNN提取的特征由于要经过SVM分类,所以需要保存在本地,孔用几百G的空间
  • 速度慢:使用GPU,一张图像需要47s
  • 测试速度慢:每个候选区都需要经过CNN

1.1.2 Fast R-CNN

  1. 利用selective search 在原图上生成2000个候选区
  2. 原图输入到CNN,进行特征提取
  3. 将候选区在映射到CNN最后的输出的特征图上
  4. 通过ROI pooling把每个候选区生成固定尺寸的特征图
  5. 利用softmax(分类)和smooth L1对分类概率和边框回归联合训练

相比R-CNN,主要有两处不同:

  • CNN后加了ROI pooling
  • 损失函数使用了多任务损失,将边框回归直接加到CNN网络中训练

改进:

  1. 不是将每个候选框都送入CNN,而是先输入整张原图,然后在得到特征图中找到候选框的映射位置
  2. 抛弃了SVM分类,而是使用softmax
  3. 分类和回归加入网络中
  4. 由于采用ROI Pooling,不需要对输入图像进行crop和wrap操作,避免信息丢失

1.1.3 Faster R-CNN

  1. 将原图输入CNN,进行特征提取
  2. 用RPN生成一堆Anchor box,对其进行裁剪过滤后通过softmax判断anchors属于前景还是背景(即,是物体/非物体),二分类任务。同时,另一个分支bounding box regression修正anchor box,形成相对精确的proposal
  3. 把建议候选框映射到CNN生成的特征图上
  4. 通过ROI Pooling层使每个ROI生成固定尺寸的特征图
  5. 利用softmax和smooth L1对分类概率和边框回归联合训练。

相比Fast R-CNN,主要不同:

  • 使用RPN(Region Proposal Network)代替原来的selective search 方法产生的候选框
  • 产生候选框的CNN和目标检测的CNN共享

改进:
Faster R-CNN创造性的采用卷积神经网络产生候选框,并且和目标检测的网络共享网络,使得候选框数目从原来的2000个减少到300个,且建议候选框质量有一定提高

一句话概况: Faster R-CNN 将候选框提议、特征提取、bounding box 回归、分类都整合到一起了,使得综合性能较大提高。

1.2 Faster R-CNN流程详解

整体流程图:

请添加图片描述

1.2.1 原图输入CNN

原图输入CNN后生成特定的特征图,
在这里插入图片描述

1.2.2 RPN (Region Proposal Network)操作

1. anchor

第一步的特征图提取中,我们以VGG16为例,输入图像进行了16倍下采样。即生成的特征图到一个像素点对应原图中16×16的区域(感受野
**重点: ** 特征图上每个的像素点称为anchor(锚点)
更准确的说:
第一步生成的特征图 经过3×3的卷积(striding=1,padding=1)操作,特征图与卷积核(滑动窗口)的中心点(因为,padding=1,这个中心点就是特征图的中心


根据anchor,可以在原图上生成9种不同的尺寸不同长宽比的边框,
尺寸:128×128、256×256、512×512
长宽比:1:2、1:1、2:1

所以共有9种。VGG16生成的特征图大小为40*60,因此一种生成40×60×9 个 anchor box.
在这里插入图片描述
说明: 上面我们提到一个像素点对应原图16×16的大小的区域。我们又说三种不同的尺寸128、256、512,这难道不矛盾吗?其实是将16×16放大到这三种尺寸了。

2. 分类和回归

在这里插入图片描述

  • 将anchor进行二分类,判断是positive 还是negative,即判断框内是否有目标,so easy是不是。
  • bounding box regression: 边框回归,修正上面的anchor box,得到较为准确的结果。

最后的proposal结点负责综合positive anchors和对应的bounding boxregression偏移量获取修正后的proposals,同时剔除大小和超出边界的proposals,到这里相当于完成了目标定位的功能。
proposal是RPN的最后一个步骤,输入有三个:

k为anchor数,文中默认为9

  • 分类层,生成的(M/16,N/16,2k),二分类,所以是2*k
  • 回归层,生成的(M/16,N/16,4K),四个坐标值,所以是4*k
  • im_info,[M,N,scale_factor]
  1. 利用回归层的偏移量,对所有原始的anchor 进行修正
  2. 利用分类的scores,按positives scores由大到小排列所有的anchor ,取前topN个
  3. 边界处理,把超出图像边界的positive anchor 超出部分收拢到图像边界处,防止后续的ROI pooling超出边界
  4. 剔除尺寸非常小的positive anchor
  5. 对剩余的positive anchors进行NMS(非极大抑制)
  6. 最后输出一堆的proposals左上角和右下角的坐标([x1,y1,x2,y2])

1.2.3 ROI

在这里插入图片描述

ROI层负责手机proposal,并计算proposal feature map(从第一步生成的特征图中抠出对应的位置,对抠出的特征图进行池化就是ROI过程)
输入有两个:

  • 卷积层生成的特征图
  • RPN网络生成的proposals(一堆的坐标[x1,y1,x2,y2])

主要是因为后续输入进全连接,全连接层需要固定的向量,具体可参考前面的文章

1.2.4 分类

在这里插入图片描述

在RPN中已经有过分类,但那个分类是二分类,即区分box中是否有目标。
这里的分类的对positive anchor 识别具体是哪一类。
同时,会对边框进行回归,获得更高精度的box

由于并非要用faster R-CNN做什么,仅为后续阅读铺垫,故不做深入。更多细节参考后续参考文章

参考

[1] https://zhuanlan.zhihu.com/p/31426458
[2] https://blog.csdn.net/weixin_42310154/article/details/119889682#t7
[3] https://blog.csdn.net/weixin_55775980/article/details/125194384
[4] https://blog.csdn.net/qq_30121457/article/details/108918499
[5] http://events.jianshu.io/p/aa659406d8c4

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胡侃有料

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值