Faster R-CNN由一个推荐区域的全卷积网络和Fast R-CNN组成, Fast R-CNN使用推荐区域。整个网络的结构如下:

1.1 区域推荐网络

输入是一张图片(任意大小), 输出是目标推荐矩形框的集合,以及相应的目标打分。网络的前面使用了一个基本的卷积层集合来提取特征(ZF或VGG-16)。这个基本层同时被RPN网络和Fast R-CNN使用。

在基本层之后,文中使用一个n*n的滑动窗口在最后一层特征图卷积,在每一个窗口位置,得到一个256维或512维的特征。这个特征随后被送进两个全连接层,分别是box-regression layer和box-classification layer。

上段中的迷你网络如下图所示。由于迷你网络是通过滑动窗口的方式,所以得到的特征是共享位置信息的,于是box-regression和box-classification层的全连是通过1×1的卷积实现。

1.1.1 Anchors

在滑动窗口的每个位置,会预测多个推荐区域,数量记为K(文中为9)。reg层有4K个输出(编码K个方框的坐标),cls层有2K个输出(预测目标或非目标的概率)。    这K个推荐区域被称为anchors。每个anchor都在滑动窗口的中心,并有相应的尺度大小和长宽比例。文中采用了三种尺度和三种长宽比,因此K为9。在这层卷积中,padding为1, stride为1, 所以总共会产生W*H(特征图的大小)个anchors。

1.1.2 Anchors的变换不变性(ranslation-Invariant)

变换不变性是说,anchors和根据anchors计算推荐区域的函数是对图像的变换不变的。就是说,如果变换了图像中的一个对象,那么推荐的区域也是相应变换的,同样的函数可以预测任何位置的一个推荐区域。我的理解是针对图像的平移缩放,anchors照样能检出对应的区域。这个性质是与文中提到的MultiBox方法使用k-means生成anchors相对的,因为k-means聚类方法是依赖于初始点的选取的,所以没有变换不变性。

1.1.3 多尺度Anchors 作为回归引用(Regression References)

有两种多尺度预测方式。一种是图像/特征金字塔,图像在多个尺度进行resize,卷积特征在每个尺度的图像上进行计算,比较耗费时间。另一种在特征图上使用多尺度的滑动窗口,这种方法更为高效。

1.1.4 损失函数

为了训练RPN,文中   对每个anchor赋予二值(是目标或非目标)类标签。对两种anchors赋予正标签:1)和真值框有最高交并比的anchor/anchors;2)和任何真值框的IoU高于0.7。对和所有真值框IoU都低于0.3的anchor赋予负标签。其他的anchors不作为训练目标。损失函数如下:

i是一个mini-batch中anchor的序号,pi是anchor i被预测为目标的概率。真值标签pi*是1, 如果anchor赋予了正标签,pi*是0, 如果anchor赋予了负标签。ti是预测的bounding box的4个参数坐标向量,ti*是正anchor的ground-truth box。Lcls是两类的log损失。Lreg(ti, ti*) = R(ti - ti*),R是smooth L1函数(在(2)式中定义)。pi*Lreg只针对正anchors(pi*=1)。cls和reg层分别输出{pi}和{ti}。Ncls(=256)是mini-batch的大小, Nreg是anchor位置的数目(Nreg~2400),默认设置λ=10,来使两项损失权重大致相等。

上式中x,y,w,h表示box的中心坐标和宽度、高度。变量x, xa, x*分别表示预测框、anchor框、真值框。

1.1.5 训练RPN网络

每个mini-batch从单个图像中的正负anchors产生。文中正负anchor的比例为1:1。如果正样本数少于128,则用负样本填充。

1.2 RPN和Fast R-CNN共享特征

RPN和Fast R-CNN单独训练会以不同方式修改卷积层。文中介绍了三种方式共享卷积层。

(i)交替训练。首先训练RPN,使用proposals训练Fast R-CNN。网络使用Fast R-CNN微调,然后用来初始化RPN,迭代这个过程。

(ii)   近似联合训练。在每次SGD迭代时,前馈计算生成区域推荐,看作训练Fast R-CNN检测器的预计算推荐。反馈传播中共享层传播RPN和Fast R-CNN结合的损失。这种方式忽略了关于推荐框坐标的导数。

(iii) 非近似联合训练。Fast R-CNN中的 RoI pooling层接收卷积特征和预测的bounding boxes作为输入,这时反向传播会涉及到box corrdinates.这时需要RoI poling层关于box coordinates是可微的。

1.2.1 4-步交替训练

第一步,训练RPN,用预训练的ImageNet模型初始化,端到端微调区域推荐任务。第二步,通过Fast R-CNN训练一个单独的检测网络,从第一步的模型中产生推荐框。这个网络也用ImageNet模型初始化。这时候两个网络不共享卷积层。第三步,使用检测网络初始化RPN训练,固定了共享卷积层,只微调独属于RPN的层。现在两个网络共享卷积层。第四步,使卷积层固定,微调独属于Fast R-CNN的层。这样,两个网络共享了卷基层,形成了一个统一网络。

1.3 实现细节

训练时,会将与边界有交叉的anchors删除,否则会难以收敛。测试时,仅仅将与边界交叉的anchors切到边界即可。

Faster RCNN论文解析的更多相关文章

  1. [原创]Faster R-CNN论文翻译

    Faster R-CNN论文翻译   Faster R-CNN是互怼完了的好基友一起合作出来的巅峰之作,本文翻译的比例比较小,主要因为本paper是前述paper的一个简单改进,方法清晰,想法自然.什 ...

  2. k[原创]Faster R-CNN论文翻译

    物体检测论文翻译系列: 建议从前往后看,这些论文之间具有明显的延续性和递进性. R-CNN SPP-net Fast R-CNN Faster R-CNN Faster R-CNN论文翻译   原文地 ...

  3. [Network Architecture]Mask R-CNN论文解析(转)

    前言 最近有一个idea需要去验证,比较忙,看完Mask R-CNN论文了,最近会去研究Mask R-CNN的代码,论文解析转载网上的两篇博客 技术挖掘者 remanented 文章1 论文题目:Ma ...

  4. Faster R-CNN论文详解 - CSDN博客

    废话不多说,上车吧,少年 paper链接:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks ...

  5. 【目标检测】Cascade R-CNN 论文解析

    目录 0. 论文链接 1. 概述 2. 网络结构的合理性 3. 网络结构 4. 参考链接 @ 0. 论文链接 Cascade R-CNN 1. 概述   这是CVPR 2018的一篇文章,这篇文章也为 ...

  6. Faster RCNN论文学习

    Faster R-CNN在Fast R-CNN的基础上的改进就是不再使用选择性搜索方法来提取框,效率慢,而是使用RPN网络来取代选择性搜索方法,不仅提高了速度,精确度也更高了 Faster R-CNN ...

  7. Faster R-CNN论文阅读摘要

    论文链接: https://arxiv.org/pdf/1506.01497.pdf 代码下载: https://github.com/ShaoqingRen/faster_rcnn (MATLAB) ...

  8. Faster RCNN代码解析

    1.faster_rcnn_end2end训练 1.1训练入口及配置 def train(): cfg.GPU_ID = 0 cfg_file = "../experiments/cfgs/ ...

  9. faster rcnn算法及源码及论文解析相关博客

    1. 通过代码理解faster-RCNN中的RPN http://blog.csdn.net/happyflyy/article/details/54917514 2. faster rcnn详解 R ...

随机推荐

  1. 记一次数据库同步经历(sql server 2008)

    前阵子搞了下数据库同步,大概意思就是服务器上有一个数据库,与本地数据库进行同步,服务器上的数据库有什么改变,可以同步到本地数据库中.做之前百度了下,流程分以下三步, 第一步: 服务器上的数据库进行发布 ...

  2. 课时49.非input标签(掌握)

    1.select标签(下拉列表) 什么是下拉列表? 这就是下拉列表 作用: 用于定义下拉列表 格式: <select> <option>列表数据</option> ...

  3. HTML&CSS 问题

    1.子div使用浮动,父div高度自适应(个人感觉好用) 方法: css: <style> .clear{ clear:both} </style> html:在父div关闭之 ...

  4. Notes 20180306 : 变量与常量

    1.1 变量与常量 我们在开发中会经常听到常量和变量,那么常量和变量指的又是什么呢?顾名思义,在程序执行过程中,其值不能被改变的量称为常量,其值能被改变的量称为变量.变量与常量的命名都必须使用合法的标 ...

  5. iPhone 横竖屏切换,全屏播放的三种方式

    1. 调用系统自带的强制屏幕旋转不过还得在AppDelegate中重写下面方法 - (UIInterfaceOrientationMask)application:(UIApplication *)a ...

  6. Linux通过Shell脚本命令修改密码不需要交互

    交互方式修改密码 1. ssh 远程到主机: 2. 切换到root账号: [一般都是切换到root进行密码修改,如果普通用户修改自己的密码,要输入原密码,然后新密码要满足复杂度才OK]: 3. pas ...

  7. opencv3 学习三 - 图像输入输出显示等

    程序如下 #include "opencv2/opencv.hpp" using namespace cv; int main() { Mat file1 = imread(&qu ...

  8. Python学习3——变量如何存储数据

    数值类型:包括整型.浮点型 变量名字代表的是存储地址. num01 = 100 print(id(num01)) #输出变量num01存储的内存地址,输出的是十进制值 num02 = num01 pr ...

  9. 通过burpsuite替换cookie登录后台

    通过burpsuite可以比较方便的替换http头部的cookie.useragent等字段,在获取到用户的cookie后实现登录.具体使用方法如下: 如替换cookie,可以写正则表达式^Cooki ...

  10. 解决WinScp连接被拒绝的问题

    尝试以下方法: 1) 开启|关闭防火墙(这里需要关闭) sudo ufw enable|disable 2) 开启远程服务 在终端界面输入:service sshd start.结果显示:ssh:un ...