Faster RCNN学习记录

Faster R-CNN: Towards Real-Time Object Detection with Region Proposal NetworksShaoqing Ren, Kaiming He, Ross Girshick, Jian Sun

                                          ——学习资料记录(Simon John)


文章拟解决问题(Towards Real-Time

SPP net和Fast R-CNN提取proposal(s)的方法是十分消耗时间。因此作者提出了:区域提取网络(Region Proposal Network, RPN,它和检测网络共享全图的卷积特征,几乎不花时间。


1.方法概述

Faster RCNN = Fast RCNN + RPN

作者提出RPN提取proposal,在 Fast R-CNN使用的卷积(conv)特征映射(注:文章作者用的是ZFVGG-16的最后一个卷积层)之后增加两个额外的卷积层,构造RPN:(1)第一个层把每个卷积映射位置(即:扫窗后的区域映射到原图)的特征编码(类似于卷积过程)为一个短的(例如256-d)特征向量,(2)第二个层在每个卷积映射位置,输出这个位置上多种尺度和长宽比的kproposalobjectness得分和回归边界(k=9是典型值)。 
    RPN是一种全卷积网络(fully-convolutional
network, FRN)可以针对生成检测proposals的任务端到端地训练。为了统一RPN和Fast R-CNN[5]目标检测网络,作者提出一种简单的训练方案,即保持proposals固定,微调proposal和微调目标检测之间交替进行。这个方案收敛很快,最后形成可让两个任务共享卷积特征的标准网络。


2.RPN细节

RPN将一个图像(任意大小)的特征作为输入,输出矩形Proposal的集合,每个框有一个objectness得分。

RPN和Fast
R-CNN共享计算,所以这两个网络共享一系列卷积层。在最后一个共享的卷积层输出的卷积特征映射上滑动小网络,这个网络全连接到输入卷积特征映射的nxn(本文中n=3)的空间窗口上。每个滑动窗口映射到一个低维向量上对于ZF256-d,对于VGG512-d,每个特征映射的一个滑动窗口对应一个数值)。

将这个向量输出给两个同级的全连接的层——包围盒回归层(reg)和包围盒分类层(cls)。注意图像的有效感受野很大(ZF是171像素,VGG是228像素)。       图1(左)举例。注意,由于小网络是滑动窗口的形式,所有位置用来计算内积的nxn的层参数相同(文章中n=3。这种结构实现为nxn的卷积层,后接两个同级的1x1的卷积层(也就是全连接网络的意思,分别对应reg和cls),ReLU应用于nxn卷积层的输出。

1:左:proposal网络(RPN)。右:用RPN proposalsPASCAL VOC 2007测试集上的检测实例。可以在很大范围的尺度和长宽比中检测目标。

备注:anchor(上图结构的三个窗口不是三个不同的扫窗窗口,扫窗窗口是固定的3X3

在每一个滑动窗口的位置,同时预测k个Proposals。则:reg层有4k个输出(即k个box的坐标编码)。cls层输出2k个得分(即对每个proposals是目标/非目标的估计概率,文章为简单起见,是用二类的softmax层实现的cls层,作者提到:可以用logistic回归来生成k个得分)。

k个Proposals框被相应的k个称为anchor的box参数化。每个anchor以当前滑动窗口中心为中心,映射到原图的一个区域,以这个区域中心对应一个尺度和长宽比,文章使用3种尺度和3种长宽比(1:1;1:2;2:1),则在每一个滑动位置就有k=9个anchor。

实现细节

对于anchor,用3个简单的尺度,包围盒面积为128x128,256x256,512x512,和3个简单的长宽比,1:1,1:2,2:1。

注:在预测大proposals时,作者文中说的算法考虑了使用大于基本感受野的anchor包围盒。这些预测不是不可能——只要看得见目标的中间部分,还是能大致推断出这个目标的范围)。这句话我没看明白

通过这个设计,解决方案不需要多尺度特征或者多尺度滑动窗口来预测大的区域,节省了相当多的运行时间。图1(右)显示了算法处理多种尺度和长宽比的能力。下表是用ZF网络对每个anchor学到的平均proposals大小(s=600)。

注:跨越图像边界的anchor包围盒要小心处理。在训练中,我们忽略所有跨越图像边界的anchor,这样它们不会对损失有影响

特征图和原图的对应关系,需要下一步补充!

例子:对于一个典型的1000x600的图像,差不多总共有20k(~60x40x9)anchor。忽略了跨越边界的anchor以后,每个图像只剩下6k个anchor需要训练了。如果跨越边界的异常值在训练时不忽略,就会带来又大又困难的修正误差项,训练也不会收敛。在测试时,还是应用全卷积的RPN到整个图像中,这可能生成跨越边界的proposals,然后将其裁剪到图像边缘位置。

RPN产生的 proposals和其他proposals会有大量重叠,为了减少冗余,采用非极大值抑制(non-maximum
suppression, NMS)。固定对NMS的IoU阈值为0.7,这样每个图像只剩2k个proposals。NMS不会影响最终的检测准确率,但是大幅地减少了proposals的数量。NMS之后,用proposals中的top-N个来检测。


3训练Faster RCNN网络

3.1 训练RPN

(RPN=cls层和reg层,注:256-D的特征直接这两个全连接层,先对此刻slide window得到的proposal进行cls,输入的是此刻proposal的得分,一个节点;如果是目标,在输给reg层进行坐标的回归,输出为四个节点,注意reg层用的还是此刻proposal对应的256-D特征。也就是clsreg层用的特征是一样的。)

对于cls

给每个anchor分配一个二进制的标签(是目标还是背景)。

正标签给两类anchor:i与某个ground
truth(GT)包围盒有最高的IoU(Intersection-over-Union,交集并集之比)重叠的anchor(注:也许不到0.7);

ii与任意GT包围盒有大于0.7的IoU交叠的anchor。

注意:一个GT包围盒可能分配正标签给多个anchor。分配负标签给与所有GT包围盒的IoU比率都低于0.3anchor)。(注:非正非负的anchor对训练目标没有任何作用)。

那么对一个图像的损失函数定义为 :
 
   (这里,i是一个mini-batchanchor的索引,Pianchor i是目标的预测概率。如果anchor为正,GT标签Pi* 就是1,如果anchor为负,Pi* 就是0ti是一个向量,表示预测的包围盒的4个参数化坐标,ti* 是与正anchor对应的GT包围盒的坐标向量。

分类损失*Lcls是两个类别(目标vs.非目标)的对数损失

对于回归损失*,用 来计算,其中R是鲁棒的损失函数(smooth L1)。 
 
   Pi* Lreg这一项意味着只有正anchor(Pi* =1)才有回归损失,其他情况就没有 (Pi* =0)。cls层和reg层的输出分别由{pi}和{ti}组成,这两项分别由Ncls和Nreg以及一个平衡权重λ归一化(早期实现及公开的代码中,λ=10,cls项的归一化值为mini-batch的大小,即Ncls=256,reg项的归一化值为anchor位置的数量,即Nreg~2,400,这样cls和reg项差不多是等权重的。

对于回归

理解为从anchor包围盒到附近的GT包围盒的包围盒回归。

Bounding
Box 的细节,请看http://caffecn.cn/?/question/160
具体的推导和解释已经上传至 Tower。(感兴趣的请查看)

每个anchor对应一个regressors。(注:每一个回归量对应于一个尺度和长宽比的anchorkanchor所对应的回归量之间不共享权重。因此,即使特征具有固定的尺寸/尺度,预测各种尺寸的包围盒仍然是可能的


4.训练 Faster RCNN网络

注:proposal与目标检测(Fast RCNN)共享卷积特征

RPN和Fast
R-CNN都是独立训练的,要用不同方式修改它们的卷积层。因此作者提出一种允许两个网络间共享卷积层的技术,而不是分别学习两个网络。(注意到这不是仅仅定义一个包含了RPNFast R-CNN的单独网络,然后用反向传播联合优化它那么简单。原因是Fast R-CNN训练依赖于固定的目标proposals,而且并不清楚当同时改变建议机制时,学习Fast R-CNN会不会收敛。虽然这种联合优化在未来工作中是个有意思的问题

作者开发了一种实用的4步训练算法(结尾有作者介绍),通过交替优化来学习共享的特征。 
第一步,依上述训练RPN,该网络用ImageNet预训练的模型初始化,并端到端微调RPN用于proposal任务。

第二步,我们利用第一步的RPN生成的proposals,由Fast R-CNN训练一个单独的检测网络,Fast R-CNN检测网络同样是由ImageNet预训练的模型初始化的,这时候两个网络还没有共享卷积层。

第三步,用检测网络Fast R-CNN再进行RPN训练,但固定共享的卷积层,并且只微调RPN独有的层,现在两个网络共享卷积层了。

第四步,保持共享的卷积层固定,微调Fast R-CNN的其它层。这样,两个网络共享相同的卷积层,构成一个统一的网络。

4.优化

RPN为全卷积网络,通过反向传播(BP)和随机梯度下降(SGD)端到端训练。遵循 “image-centric”采样策略训练这个网络。每个mini-batch由包含了许多正负样本的单个图像组成。

随机地在一个图像中采样256个anchor,计算mini-batch的损失函数,其中采样的正负anchor的比例是1:1。如果一个图像中的正样本数小于128,就用负样本填补这个mini-batch。 
    通过从零均值标准差为0.01的高斯分布中获取的权重来随机初始化所有新层(最后一个卷积层其后的层),所有其他层(即共享的卷积层)是通过对ImageNet分类预训练的模型来初始化的。

作者在PASCAL数据集上对于60kmini-batch用的学习率0.001,对于下一20kmini-batch用的学习率0.0001动量0.9权重衰减0.0005


注:Faster RCNN 
Faster
R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
 
https://github.com/rbgirshick/py-faster-rcnn

https://github.com/ShaoqingRen/faster_rcnn

时间: 2024-10-26 08:38:03

Faster RCNN学习记录的相关文章

faster rcnn学习(三)

今天学习用来判断faster rcnn中对于评估多个类别检测的效果,部分内容参考http://blog.sina.com.cn/s/blog_9db078090102whzw.html. mAP(mean average precision)多类平均精度,首先计算出每个类的AP,然后取所有类的AP的平均.解释这个,先了解混淆矩阵的4个概念. TP:预测为真的正样例 TN:预测为真的负样例 FP:预测为假的正样例 FN:预测为假的负样例 记住这个很简单,以TP为例,先记住P代表预测的结果是posi

faster r-cnn学习(一)

http://closure11.com/rcnn-fast-rcnn-faster-rcnn%E7%9A%84%E4%B8%80%E4%BA%9B%E4%BA%8B/ 首先看fast r-cnn这篇论文,中间加入了有些博友的想法. 问题 目标检测主要面临两个问题:过多的候选位置(proposals):必须由这些粗略的候选位置中选出准确的位置. 这篇论文将学习目标proposals分类和精确定位结合起来. 1. R-CNN和SPPnet存在的问题 (1)R-CNN的问题 训练需要多阶段:先用Co

r-cnn学习系列(三):从r-cnn到faster r-cnn

把r-cnn系列总结下,让整个流程更清晰. 整个系列是从r-cnn至spp-net到fast r-cnn再到faster r-cnn.  RCNN 输入图像,使用selective search来构造proposals(大小不一,需归一化),输入到CNN网络来提取特征, 并根据特征来判断是什么物体(分类器,将背景也当做一类物体),最后是对物体的区域(画的框)进行微调(回归器). 由下面的图可看出,RCNN分为四部分,ss(proposals),CNN,分类器,回归器,这四部分是相对独立的.改进的

RCNN学习笔记(5):faster rcnn

reference link: http://blog.csdn.net/shenxiaolu1984/article/details/51152614 http://blog.csdn.net/xyy19920105/article/details/50817725 思想 从RCNN到fast RCNN,再到本文的faster RCNN,目标检测的四个基本步骤(候选区域生成,特征提取,分类,位置精修)终于被统一到一个深度网络框架之内.所有计算没有重复,完全在GPU中完成,大大提高了运行速度.

深度学习之目标检测常用算法原理+实践精讲 YOLO / Faster RCNN / SSD / 文本检测 / 多任务网络

深度学习之目标检测常用算法原理+实践精讲 YOLO / Faster RCNN / SSD / 文本检测 / 多任务网络 资源获取链接:点击这里 第1章 课程介绍 本章节主要介绍课程的主要内容.核心知识点.课程涉及到的应用案例.深度学习算法设计通用流程.适应人群.学习本门课程的前置条件.学习后达到的效果等,帮助大家从整体上了解本门课程的整体脉络. 1-1 课程导学 第2章 目标检测算法基础介绍 本章节主要介绍目标检测算法的基本概念.传统的目标检测算法.目前深度学习目标检测主流方法(one-sta

目标检测梳理:基于深度学习的目标检测技术演进:R-CNN、Fast R-CNN、Faster R-CNN(转)

基于深度学习的目标检测技术演进:R-CNN.Fast R-CNN.Faster R-CNN(转) 原文链接:https://www.cnblogs.com/skyfsm/p/6806246.html object detection我的理解,就是在给定的图片中精确找到物体所在位置,并标注出物体的类别.object detection要解决的问题就是物体在哪里,是什么这整个流程的问题.然而,这个问题可不是那么容易解决的,物体的尺寸变化范围很大,摆放物体的角度,姿态不定,而且可以出现在图片的任何地方

RCNN学习笔记(8):Fully Convolutional Networks for Semantic Segmentation(全卷积网络FCN)

[论文信息] <Fully Convolutional Networks for Semantic Segmentation> CVPR 2015 best paper Reference link: http://blog.csdn.net/tangwei2014 http://blog.csdn.net/u010025211/article/details/51209504 概览&主要贡献 提出了一种end-to-end的做semantic segmentation的方法,简称FC

Widows下Faster R-CNN的MATALB配置(GPU)

目录 1. 准备工作 2. VS2013编译Caffe 3. Faster R-CNN的MATLAB源码测试 说在前面,这篇是关于Windows下Faster R-CNN的MATLAB配置,GPU版本:CPU版本见:Widows下Faster R-CNN的MATALB配置(CPU): 相比较来说,CPU版本相对容易一些,因为涉及到GPU的计算,还需要配置CUDA以及CuDNN: 下面将分成三个部分进行介绍: 准备工作:下载caffe.faster rcnn源码.安装cuda.cudnn: VS2

Faster R-CNN论文详解

原文链接:http://lib.csdn.net/article/deeplearning/46182 paper链接:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks &创新点 设计Region Proposal Networks[RPN],利用CNN卷积操作后的特征图生成region proposals,代替了Selective Search.EdgeBoxes等方法,速度上提升明显: