r-cnn学习(二)

faster r-cnn

1、问题

在fast r-cnn中,proposals已经成为速度提高的瓶颈。在本文中,使用深度网络来计算proposals,

使得与检测网络的计算量相比,proposals的计算量可忽略不计。为此,本文提出了RPN网络(Region Proposal Network),

与目标检测网络共享卷积层,大大减少了计算proposals的时间。

2、方案

在fast r-cnn中,region-based detectors可以使用卷积特征图,那么这些特征图也可以用来生成region proposals。

在这些卷积特征上,通过增加两个卷积层来构造RPN:一个将每个位置的卷积图编码成短的特征向量,在每个卷积图的位

置上,输出objectness score和k个region proposals的regression bounds。

因此,本文的RPN可以看作是fully-convolutional network (FCN),对于生成detecting proposals这种任务,是

end-to-end的。为了使RPN和fast r-cnn相统一,我们提出了一个简单的训练框架,在region proposal task和object detection

的微调中依次交替(保持proposals固定)。

 3、具体介绍

     Region Proposal Networks

       RPN的输入为一张图像,输出为一系列的矩形框(proposals),每一个会带有objectness score。本文使用fcn模型来处理

这个过程。因为我们的目标是与fast r-cnn的检测网络共享计算,因此我们假设这些网络共享卷积层。

为了生成region proposals,在最后一个共享卷积层中,我们对其输出滑动使用小的网络。这个网络与n*n的空间窗口(输入为卷积特征图)

全连接。每个滑动窗口被映射为低维的向量,然后将其输入两个独立的全连接层中,一个是回归层,一个是分类层。

这个小网络是以滑窗的方式操作的,因此全连接层共享所有空间位置。

Translation-Invariant Anchors

在每个滑窗位置上,同时预测k个proposals和4k个reg相应的输出,以及2k个cls scores(每个proposal为目标/非目标的概率),这k

个proposals相对k个reference boxes,称为anchors。在每个滑动位置上,使用3个scales和3个aspect ratios,共生成9个anchors。对于

一个W*H的特征图,共有W*H*k个anchors,这种方法的好处就是translation invariant,

  A Loss Function for Learning Region Proposals

    为了训练RPN,为每个anchor赋一个类别标签(是否是object)。我们为两类anchors赋于正值:(1)anchor与ground_truth box有最大的

IoU重叠;(2)IoU重叠超过0.7。 IoU小于0.3则为negative。损失函数定义如下:

其中i为一个mini batch的一个anchor的索引,pi预测某anchor i是目标的概率,带星号表示相应的标签。

此外,本文采用的bounding-box regression与之前的基于特征图的方式不同。在fast r-cnn中,bounding-box regression是在任意大小的区域上

,经过pool后的特征上进行的,所有大小的区域上的回归权重是共享的。在本文中,用于regression的特征在特征图上有着共同的空间大小。

为了处理不同尺寸,需要学习k个bounding-box regressors,每个regressors对应一个scale和一个aspect ratio,并且k个回归器不共享权重。

  Optimization

RPN由FCN实现,可通过end-to-end的BP算法和SGD进行训练。采用image-centric的采样方法训练网络,每个mini-batch从单张图像中获得,包含

正、负anchors。可以将所有的anchors loss放在一起训练,但这样会偏向于负anchors(负类鑫)。本文在一张图上随机采样256个anchors来计算一个

mini-batch的损失函数,正、负anchors的比例为1:1.

Sharing Convolutional Features for Region Proposal and Object Detection

至此我们已经描述了如何训练一个region proposal generation的网络,但没有考虑region-based 的目标检测CNN将利用这些proposals。采用fast r-cnn

的检测网络,接下来将描述一个学习卷积层的算法,这个卷积层被RPN和fast r-cnn共享。

RPN和fast r-cnn的训练时独立的,通过不同的方式来修改它们的卷积层。因此我们需要提出一个技术,考虑在两个网络间共享卷积层,而不是独立的两个网

络。注意这不是仅仅简单定义一个包括RPN和fast r-cnn的网络,然后用BP算法联合优化。原因是fast r-cnn依赖于固定大小的object proposals,这是一个不清楚

的先验,如果学习fast r-cnn同时改变proposals的机制是否收敛。本文通过交替优化,采用4步训练算法来学习共享特征。

第一步,按照上述方式训练RPN,这个网络由ImageNet预训练模式初始化,对region proposal task采用end-to-end微调。

第二步,使用fast r-cnn训练独立的检测网络,使用第一步中生成的proposals。它的初始化也是用ImageNet预训练模式,此时两个

网络不共享卷积特征。

第三步,使用检测网络初始化RPN训练,但固定共享卷积层,只对RPN进行微调(?)

至此,两个网络共享卷积层。最后,保持共享卷积层固定,微调fast r-cnn中的fc layers。如此,两个网络共享卷积层并且形成一个统一的网络。

Implementation Details

我们训练和测试region proposal和目标检测网络在单一尺度的图像上,re-scale图像让shorter side为600像素(?)

对于anchors,使用3种尺度(128,256,512),以及3种aspect ratios(1:1,1:2,2:1)。

时间: 2024-10-25 17:40:51

r-cnn学习(二)的相关文章

R语言学习(二)

1.复数的向量:用complex()函数生成复数向量 EX: > x<-seq(-pi,pi,by=pi/10)%x的值 > y<-sin(x)%y值> z<-complex(re=x,im=y)%re为实部,im为复部 > plot(z);lines(z)%绘制图形 运行如下: 2.向量的下标运算 R软件提供了十分灵活的访问向量元素和向量子集的功能,x向量的某一个元素可以用x[i]格式访问 EX: > x<-c(1,4,7)> x[2][1]

OpenCV for Python 学习 (二 事件与回调函数)

今天主要看了OpenCV中的事件以及回调函数,这么说可能不准确,主要是下面这两个函数(OpenCV中还有很多这些函数,可以在 http://docs.opencv.org/trunk/modules/highgui/doc/user_interface.html 找到,就不一一列举了),然后自己做了一个简单的绘图程序 函数如下: cv2.setMouseCallback(windowName, onMouse[, param]) cv2.createTrackbar(trackbarName,

redis ruby客户端学习( 二)

接上一篇redis ruby客户端学习( 二) 对于redis的五种数据类型:字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets),上一篇介绍了字符串. 1,哈希(Map) hset.设置 key 指定的哈希集中指定字段的值.如果 key 指定的哈希集不存在,会创建一个新的哈希集并与 key 关联.如果字段在哈希集中存在,它将被重写. require "redis" r = Redis.new r.hset 'my_h

卷积神经网络(CNN)学习笔记1:基础入门

卷积神经网络(CNN)学习笔记1:基础入门 Posted on 2016-03-01   |   In Machine Learning  |   9 Comments  |   14935  Views 概述 卷积神经网络(Convolutional Neural Network, CNN)是深度学习技术中极具代表的网络结构之一,在图像处理领域取得了很大的成功,在国际标准的ImageNet数据集上,许多成功的模型都是基于CNN的.CNN相较于传统的图像处理算法的优点之一在于,避免了对图像复杂的

R语言学习笔记

參考:W.N. Venables, D.M. Smith and the R DCT: Introduction to R -- Notes on R: A Programming Environment for Data Analysis and Graphics,2003. http://bayes.math.montana.edu/Rweb/Rnotes/R.html 前言:关于R 在R的官方教程里是这么给R下注解的:一个数据分析和图形显示的程序设计环境(A system for data

Android Afinal框架学习(二) FinalActivity 一个IOC框架

框架地址:https://github.com/yangfuhai/afinal 对应的源码: net.tsz.afinal.annotation.view.* FinalActivity FinalActivity是一个基础类,结合注解实现了,依赖注入(view的资源id,常用的监听器), 利用set方式注入 完全注解方式就可以进行UI绑定和事件绑定,无需findViewById和set event Listener 这个过程:initInjectedView>findViewById.set

emberjs学习二(ember-data和localstorage_adapter)

emberjs学习二(ember-data和localstorage_adapter) 准备工作 首先我们加入ember-data和ember-localstorage-adapter两个依赖项,使用bower install安装这两个插件.如下 "dependencies": { "jquery": "~1.9.1", "ember": "~1.13.10", "handlebars"

DjangoRestFramework学习二之序列化组件、视图组件

目录 DjangoRestFramework学习二之序列化组件.视图组件 一 序列化组件 二 视图组件(Mixin混合类) DjangoRestFramework学习二之序列化组件.视图组件 本节目录 一 序列化组件 首先按照restful规范咱们创建一些api接口,按照下面这些形式写吧: Courses --- GET ---> 查看数据----->返回所有数据列表[{},{},] Courses--- POST --->添加数据 -----> 返回添加的数据{ } course

[Python 学习] 二、在Linux平台上使用Python

这一节,主要介绍在Linux平台上如何使用Python 1. Python安装. 现在大部分的发行版本都是自带Python的,所以可以不用安装.如果要安装的话,可以使用对应的系统安装指令. Fedora系统:先以root登入,运行 yum install python Ubuntu系统:在root组的用户, 运行 sudo apt-get install python 2. 使用的Python的脚本 Linux是一个以文件为单位的系统,那么我们使用的Python是哪一个文件呢? 这个可以通过指令

Makefile持续学习二

Makefile概述 一.Makefile里有什么? Makefile里主要包含5个东西:显式规则.隐晦规则.变量定义.文件指示和注释 1.显式规则:显式规则说明如恶化生成一个或多的目标文件,包含要生成的文件,文件的依赖文件,生成的命令 2.隐晦规则:由make自动推动功能完成 3.变量定义:变量一般都是字符串,类似C语言中的宏定义,当Makefile被执行时,其中的变量都会被扩展到相应的引用位置上 4.文件指示: 在一个Makefile中引用另一个Makefile 根据某些情指定Makefil