【目标检测系列:二】Faster RCNN 论文阅读+解析+pytorch实现

Introduce

Faster RCNN 组成

(1)基础特征提取网络(2)RPN (Region Proposal Network) (3)Fast-RCNN

共享:RPN和Fast-RCNN共享特征提取卷积层
思路:提取proposal + 分类

Faster RCNN 和 SPPNet

  • 不同于SPP层的是,没有多尺度的pooling,只有一个尺度的pooling(可以理解为特殊的SPP层)
  • 其次引入了多任务损失函数,用于同时计算bbox回归和分类的损失。

Net

我们先整体的介绍下上图中各层主要的功能

  1. Conv layers提取特征图:
    提取图片的特征
  • 作为一种CNN网络目标检测方法,Faster RCNN首先使用一组基础的conv+relu+pooling层提取input image的feature maps,该feature maps会用于后续的RPN层和全连接层
  1. RPN(Region Proposal Networks):

    RPN网络主要用于生成 region proposals

    • 首先生成一堆 Anchor box,对其进行裁剪过滤后通过softmax判断anchors属于前景(foreground)或者后景(background),即是物体or不是物体,所以这是一个二分类;同时,另一分支bounding box regression修正anchor box,形成较精确的proposal(注:这里的较精确是相对于后面全连接层的再一次box regression而言)

    • RPN网络为CNN后面接一个3*3的卷积层,再接两个1*1的卷积层(原文称这两个卷积层的关系为sibling),其中一个是用来给 softmax 层进行分类,另一个用于给候选区域精确定位

    • 代替之前的 search selective

  2. Roi Pooling:

该层利用RPN生成的proposals和VGG16最后一层得到的feature map,得到固定大小的proposal feature map,进入到后面可利用全连接操作来进行目标识别和定位

  • 和Fast R-CNN一样,将不同大小的输入转换为固定长度的输出,输入输出和Fast R-CNN中RoI pooling一样。
  1. Classifier:

输出候选区域所属的类,和候选区域在图像中的精确位置。

  • 会将Roi Pooling层形成固定大小的feature map进行全连接操作,利用Softmax进行具体类别的分类,
  • 利用L1 Loss完成 bounding box regression 回归操作获得物体的精确位置.

title

title

Anchor

  • 可以理解为一些预设大小的框
  • anchor 种类 k = 9
    分别是三个面积尺寸(128 × 128,256 × 256,512 × 512)
    三种不同的长宽比例(1:1,1:2,2:1)
  • 每个anchor对应原图的一个区域,我们要学习这个区域的分类(2分类前景/背景)和框回归微调(4个x,y,w,h)
  • 两个Loss,每个anchor分类有2个输出,回归有4个输出
    一共k个anchor,即一共2k和分类score和4k各回归坐标

title

Multi-task Loss Function

多任务损失函数(Multi-task Loss Function)

  • Softmax Classification Loss
  • Bounding Box Regression Loss

Anchors的生成规则

  • 经过Conv layers后,图片大小变成了原来的1/16

  • 在生成Anchors时,我们先定义一个base_anchor,大小为1616的box
    (因为特征图(60
    40)上的一个点,可以对应到原图(1000600)上一个1616大小的区域)

  • 源码中转化为[0,0,15,15]的数组,参数ratios=[0.5, 1, 2],scales=[8, 16, 32]

    • 先看[0,0,15,15],面积保持不变,长、宽比分别为[0.5, 1, 2] 产生的Anchors box

    • 经过scales变化,即长、宽分别均为 (168=128)、(1616=256)、(16*32=512),对应anchor box如图

    • 综合以上两种变换,最后生成9个Anchor box

    title

最终base_anchor=[0,0,15,15]生成的9个Anchor box坐标如下:

[[ -84.  -40.   99.   55.]  
[-176.  -88.  191.  103.]  
[-360. -184.  375.  199.]  
[ -56.  -56.   71.   71.]  
[-120. -120.  135.  135.]  
[-248. -248.  263.  263.]  
[ -36.  -80.   51.   95.]  
[ -80. -168.   95.  183.]  
[-168. -344.  183.  359.]]

具体计算过程见 Pytorch - Anchor

  • 特征图大小为6040,所以会一共生成6040*9=21600个Anchor box
    源码中,通过width:(060)*16,height(040)*16建立shift偏移量数组,再和base_ancho基准坐标数组累加,得到特征图上所有像素对应的Anchors的坐标值,是一个[216000,4]的数组

这21600 个anchor怎么筛选呢??这就用到下面的 RPN 了

RPN

RPN

  • 是 Faster R-CNN与Fast R-CNN最大的区别
  • 可以理解为一种全卷积网络,该网络可以进行end-to-end的训练
  • 最终目的是为了推荐候选区域
  • 5
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值