理解faster-rcnn中的Two-Stage

在objects detection算法中,大概可以分为两大方向

一、Two-Stage,这是一种Proposal-based的方法,需要先使用启发式方法(selective search)或者CNN网络(RPN)产生Region Proposal,然后再在Region Proposal上做分类与回归。精度高,但是速度慢。

  1. R-CNN
  2. Fast R-CNN
  3. Faster R-CNN
  4. Mask R-CNN

二、One-Stage,这是一种Proposal-free的方法,不需要先计算Proposal,直接使用一个CNN网络预测不同目标的类别与位置。速度快,但是精度低。

  1. YOLO系列
  2. SSD
  3. RetinaNet
faster-rcnn网络结构

对于RPN loss与faster-rcnn loss我们这里只讲解其中的回归损失,即bounding box regression原理:

RPN中的bounding box regression(第一阶段)

如下图所示绿色框为飞机的Ground Truth(GT),红色为提取的positive anchors,即便红色的框被分类器识别为飞机,但是由于红色的框定位不准,这张图相当于没有正确的检测出飞机。所以我们希望采用一种方法对红色的框进行微调,使得positive anchors和GT更加接近。

对于窗口一般使用四维向量(x,y,w,h)表示,分别表示窗口的中心点坐标和宽高。如下图所示,红色的框A代表原始的positive Anchors,绿色的框G代表目标的GT,我们的目标是寻找一种关系,使得输入原始的anchor A经过映射得到一个跟真实窗口G更接近的回归窗口G',即:

  • 给定anchor  A=\left ( A_{x} , A_{y} , A_{w} , A_{h} \right )GT=\left ( G_{x} , G_{y} , G_{w} , G_{h} \right )
  • 寻找一种变换F,使得:F\left ( A_{x} , A_{y} , A_{w} , A_{h} \right )=\left ( G_{x} ^{'}, G_{y}^{'} , G_{w}^{'} , G_{h}^{'}\right ),其中\left ( G_{x} ^{'}, G_{y}^{'} , G_{w}^{'} , G_{h}^{'}\right )\approx \left ( G_{x} , G_{y} , G_{w} , G_{h}\right )

那么经过何种变换F才能从图中的anchor A变为G'呢? 比较简单的思路就是:

  • 先做平移

                                                                                G_{x}^{'}=A_{w}d_{x}\left ( A \right )+A_{x}

                                                                                G_{y}^{'}=A_{h}d_{y}\left ( A \right )+A_{y}

  • 再做缩放

                                                                                G_{w}^{'}=A_{w}exp\left ( d_{w}\left ( A \right ) \right )

                                                                                G_{h}^{'}=A_{h}exp\left ( d_{h}\left ( A \right ) \right )

观察上面4个公式发现,需要学习的是 d_{x}\left ( A \right ),d_{y}\left ( A \right ),d_{w}\left ( A \right ),d_{h}\left ( A \right ) 这四个变换。当输入的anchor A与GT相差较小时,可以认为这种变换是一种线性变换, 那么就可以用线性回归来建模对窗口进行微调(注意,只有当anchors A和GT比较接近时,才能使用线性回归模型,否则就是复杂的非线性问题了)。我们记d_{*}\left ( A \right )=d_{x}\left ( A \right ),d_{y}\left ( A \right ),d_{w}\left ( A \right ),d_{h}\left ( A \right )

positive anchor与ground truth之间的平移量 \left ( t_{x} ,t_{y}\right ) 与尺度因子 \left ( t_{w} ,t_{h}\right ) 如下:

                                                                       t_{x}=\left ( x-x_{a} \right )/w_{a}               t_{y}=\left ( y-y_{a} \right )/h_{a}

                                                                       t_{w}=log\left ( w/w_{a} \right )                   t_{h}=log\left ( h/h_{a} \right )

我们记t_{*}=t_{x},t_{y},t_{w},t_{h}

综上所述:positive anchor与预测框(G')的位置变换信息为d_{*}\left ( A \right )。positive anchor与目标框(G)的位置变换信息为t_{*}  。RPN网络的回归损失即为d_{*}\left ( A \right )t_{*}两个变量之间的差距(通过smooth L1 loss函数衡量),通过训练来不断缩小两个变量之间的差距,进而缩小预测框与目标框之间的差距,从而得到第一阶段的结果:RPN网络的预测框proposal。

Faster-rcnn中的bounding box regression(第二阶段)

faster-rcnn 中的回归损失计算方式与上述的RPN回归损失计算方式基本相同。不同点在于faster-rcnn使用的不是anchor,而是RPN网络输出的proposal经过Roi pooling的结果,我们称其为roi。

综上所述:roi与预测框(G'')的位置变换信息为d_{*}\left ( A \right )。roi与目标框(G)的位置变换信息为t_{*}  。faster-rcnn网络的回归损失即为d_{*}\left ( A \right )t_{*}两个变量之间的差距(通过smooth L1 loss函数衡量),通过训练来不断缩小两个变量之间的差距,进而缩小预测框与目标框之间的差距,从而得到第二阶段的结果:faster-rcnn网络的预测框,即最终的检测结果。

 

参考文章:https://zhuanlan.zhihu.com/p/69250914?utm_source=wechat_session&utm_medium=social&utm_oi=845564882609922048

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

进击的路飞桑

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

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

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

打赏作者

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

抵扣说明:

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

余额充值