faster rcnn是经典的detection网络,虽然现在有更好的模型(yolo等),但是faster rcnn依然是很值得研究的。


之前在商汤论文分享会上遇到李博同学分享刚刚发表在CVPR2018的论文SiameseRPN,他们的新模型使得单目标追踪效果远超前任state of the art,做到了真正实时的tracking(160+ fps),这个模型实时性之所以好的一个重要就是借鉴了Faster rcnn的RPN,或者说是借鉴了bounding box regression。因为regression算法是十分轻量的模型(相对于神经网络来说)。当时分享会上有不少人都对bbox回归提出疑问,其实这个算法是看起来很难理解但其实很简单的。

本篇博文主要对Bounding box回归做一下解析。


github:https://github.com/rbgirshick/py-faster-rcnn
paper:https://arxiv.org/pdf/1506.01497.pdf


Region Proposal Network

faster rcnn的核心是一个RPN网络。使得相比fast rcnn的基础上,有更快的速度和更高的mAP。
先关注整个Faster rcnn的结构图

detection有两项task:定位和识别,RPN就是单独用来location(定位)的网络。由于RPN的输入是接的卷积层后的feature maps,已经是被高度抽象的特征图了,所以RPN并不需要花参数层在特征提取上,因此RPN可以是一个比较轻量级的网络,这也是计算更fast的原因。


RPN是怎么推荐备选框呢?

要生成高质量的推荐框,需要anchor机制bbox regression


anchor机制
anchor这个单词的翻译是“锚”

仔细一想,论文中的anchor就是“锚”的引申义。把每个点当作一个下锚的地方,每个点生成若干个框代表撒网的意思。把整幅特征图当作汪洋的大海,没过一个点下一个锚,然后开始撒网捕鱼。
第一步,把feature maps(256张map)拍扁,变成一张图(每个点都是256维)。基于每个256d点开始“下锚”。

第二步,“下锚”以后开始撒网,即以每一个锚点为中心生成大小不同的k个框。原文中选用的k=9。九个大小形状不一的框,致力于使目标对象能出现在某个框中。框的大小也是有讲究的,长宽比1:1,2:1,1:2三种,大小也由三种。如下图:

有了anchor机制以后,对于feature maps上的点(每个点维度是256),以每个点为中心生成9个大小不一的框,那么一定有跟ground truth很接近的框


Bounding box regression

如果把跟GT最接近的框当作输出,那么结果肯定是非常粗糙的,大小比例很难跟GT一样。所以就需要调整这个框,平移或者缩放。如下图:


A是你的anchor,G’是你调整后的,G是GroundTruth。那么对A的这个调整,就是Bounding Box回归。为什么说bbox regression是看起来很复杂但实则很简单呢
觉得难以理解是因为通常由两点原因:
1. 对机器学习算法比较薄弱,没有把握到回归算法的精髓;
2. 无法解释为何简单的回归算法能这么强大,还能修正神经网络的结果。

回归算法就是用线性函数去拟合实际函数,y=wxy=wxy=wx,乍看起来就像弱智版的全连接网络。当你的bbox和GT比较接近时,调整框操作才可以使用线性回归模型

我们粗粒度探讨一下线性回归模型的操作:
1. 回归模型的作用:微调整bbox的位置和大小。每个bbox可以由四个数值来表示(中点坐标x,y和长宽l,w)。平移bbox只需在x,y上作加减,调整大小只需在l,w上作乘法。
2. 回归模型的输出:x,y上的增量以及l,w的系数。即,输出也是4个值。
3. 回归模型的输入:bbox在feature maps上划下的区域。

对于下面这个栗子:

红色框是anchor框,蓝色框时GT。现在要通过回归模型调整anchor到GT的样子。
输入是:(类似于下图的feature maps)

输出是:调整平移和缩放的四个数值。

不知道到这一步有没有一种感觉,输入一个飞机体,就可以想象它的机翼部分的范围应该在哪里。而回归模型就做了这么一件事。

前面卷积层已经把把特征高度抽象化了,这里的回归模型只是根据特征来输出调整值。所以这么强大的调整功能,也是有卷积的功劳的。

回归模型的参数也是通过训练得出来,训练思路也可以参考我一再安利的雪柳花明。

分析Faster RCNN中的RPN相关推荐

  1. Faster RCNN 中的RPN解析

    Faster RCNN 中的RPN解析 文章目录 Faster RCNN 中的RPN解析 Anchor 分类 bounding box regression proposal 参考 RCNN和Fast ...

  2. Faster R-cnn中的RPN网络详细解释

    作者RPN网络前面的g层借用的是ZF网络,网络相对较浅,不过并不影响后期介绍. 1.首先,输入图片大小是 224*224*3(这个3是三个通道,也就是RGB三种) 2.然后第一层的卷积核维度是 7*7 ...

  3. faster rcnn中rpn的anchor,sliding windows,proposals的理解

    一直对faster rcnn里的rpn以及下图中的上面的那部分的区别不太理解,今天看到了知乎里面的回答,感觉有点明白了,特此记录 作者:马塔 链接:https://www.zhihu.com/ques ...

  4. faster rcnn学习之rpn 的生成

    接着上一节< faster rcnn学习之rpn训练全过程>,假定我们已经训好了rpn网络,下面我们看看如何利用训练好的rpn网络生成proposal. 其网络为rpn_test.pt # ...

  5. 目标检测中NMS的GPU实现(来自于Faster R-CNN中的nms_kernel.cu文件)

    最近要修改Faster R-CNN中实现的GPU版的NMS代码,于是小白的我就看起了CUDA编程,当然也只是浅显地阅读一些教程,快速入门而已,所以具体需要注意的以及一些思想,大家移步此博主的系列教程: ...

  6. Faster RCNN中anchor的生成过程

    主要参考py-faster-rcnn开源代码中的generate_anchors的实现: 首先来看main函数: if __name__ == '__main__':import timet = ti ...

  7. faster rcnn中RPN网络源码分析(pytorch)

    最近刚入坑检测,初步看了RGB大佬的faster rcnn文章,再看看源码 本次分析的源码是陈云大佬pytorch版本的GITHUB地址 上一张输入输出图 一.forward 主文件./model/r ...

  8. faster rcnn学习之rpn、fast rcnn数据准备说明

    在上文< faster-rcnn系列学习之准备数据>,我们已经介绍了imdb与roidb的一些情况,下面我们准备再继续说一下rpn阶段和fast rcnn阶段的数据准备整个处理流程. 由于 ...

  9. faster rcnn学习之rpn训练全过程

    上篇我们讲解了rpn与fast rcnn的数据准备阶段,接下来我们讲解rpn的整个训练过程.最后 讲解rpn训练完毕后rpn的生成. 我们顺着stage1_rpn_train.pt的内容讲解. nam ...

最新文章

  1. 解决Undefined function or method 'vgg_kmiter' for input arguments of type 'double'.
  2. MySQL Concurrency Problems
  3. Couchbase 集群小实践
  4. 全球及中国自主运输机器人行业十四五创新模式与运行战略规划报告2022版
  5. 141. Sqrt(x)【牛顿迭代法求平方根 by java】
  6. 路由及iptables学习笔记
  7. select into from 用法_年轻同事不讲武德,直接怼上MySQL常见SQL的七大错误用法
  8. 操作系统实验报告12:线程2
  9. Jupyterlab 安装配置手册
  10. iOS15字符串格式化缺0补0的写法
  11. Docker容器安全性分析
  12. 带你了解VXLAN网络中报文的转发机制
  13. oracle update并行,Oracle update 优化方式,tuning update!
  14. “有钱人大多不快乐”这种观点,只是普通人的心理安慰吗?
  15. Python –将NumPy数组转换为列表
  16. cv::Mat转换RGB
  17. 医药网订单对接ERP软件订单接口
  18. 485芯片AB波形正负半周的问题探讨
  19. smail语法 clinit和init的区别
  20. “数仓”-MPP与 MR的区别

热门文章

  1. 瑤里古鎮 婺源鄉村 你會去哪里呢
  2. 计算机硬件系统维护经验与体会,计算机操作系统维护与优化的实训报告心得体会.docx...
  3. 替换空格 ——《剑指offer》
  4. Jpeg-9e源码编译(Win10,VS2022)
  5. chrome浏览器打开网址找不到服务器IP
  6. mlir toy 教程(2)
  7. 基于ChatGPT制作的一款英语口语练习应用SpokenAi
  8. 编程的修炼(中英双语)
  9. 使用C语言求斐波那契(Fibonacci)数列的第n项
  10. 美团(2) - 实战准备