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. JasperReport4.6生成PDF中文

    Web项目中PDF显示中文 本人无奈使用JasperReport4.6,因为这本书(好像也是唯一的一本国内的介绍JasperReport的书), 选择"文件"→New命令,弹出一个 ...

  2. 使用单例模式来打造ActivityManager类

    单例(Singleton)模式 定义 单例模式是一种对象创建型模式,使用单例模式,可以保证为一个类只生成唯一的实例对象.也就是说,在整个程序空间中,该类只存在一个实例对象. GoF对单例模式的定义是: ...

  3. (一 、上)搭建简单的SpringBoot + java + maven + mysql + Mybatis+通用Mapper 《附项目源码》

    最近公司一直使用 springBoot 作为后端项目框架, 也负责搭建了几个新项目的后端框架.在使用了一段时间springBoot 后,感觉写代码 比spring 更加简洁了(是非常简洁),整合工具也 ...

  4. redhat6本地源NBD驱动安装

    安装NBD驱动 一.配置本地yum源 1.挂载系统安装光盘 # mount /dev/cdrom /mnt/cdrom/ # mkdir /mnt/media # cp -rf /mnt/cdrom/ ...

  5. ethereum(以太坊)(实例)--"安全的远程购买"

    pragma solidity ^0.4.10; contract Safebuy{ uint public price; address public seller; address public ...

  6. Android简单的编写一个txt阅读器(没有处理字符编码),适用于新手学习

    本程序只是使用了一些基本的知识点编写了一个比较简单粗陋的txt文本阅读器,效率不高,只适合新手练习.所以大神勿喷. 其实想到编写这种程序源自本人之前喜欢看小说,而很多小说更新太慢,所以本人就只能找一个 ...

  7. redis集群部署步骤

    1.yum 安装依赖 yum install gcc unzip wget 2.编译安装redis,编译安装的目的是源码包内包含了接下来创建redis集群所需要的 redis-trib.rb脚本 ma ...

  8. YII2集成GOAOP,实现面向方面编程!

    引言: 软件开发的目标是要对世界的部分元素或者信息流建立模型,实现软件系统的工程需要将系统分解成可以创建和管理的模块.于是出现了以系统模块化特性的面向对象程序设计技术.模块化的面向对象编程极度地提高了 ...

  9. Appointment Helper

    using System; using Microsoft.Xrm.Sdk; using Microsoft.Crm.Sdk.Messages; using Microsoft.Xrm.Sdk.Que ...

  10. 报错: Name node is in safe mode

    将本地文件拷贝到hdfs上去,结果上错误:Name node is in safe mode 这是因为在分布式文件系统启动的时候,开始的时候会有安全模式,当分布式文件系统处于安全模式的情况下,文件系统 ...