精华内容
下载资源
问答
  • 【目标检测】Fast RCNN算法详解

    万次阅读 多人点赞 2016-04-12 13:05:42
    继2014年的RCNN之后,Ross Girshick在15年推出Fast RCNN,构思精巧,流程更为紧凑,大幅提升了目标检测的速度。

    Girshick, Ross. “Fast r-cnn.” Proceedings of the IEEE International Conference on Computer Vision. 2015.

    继2014年的RCNN之后,Ross Girshick在15年推出Fast RCNN,构思精巧,流程更为紧凑,大幅提升了目标检测的速度。在Github上提供了源码

    同样使用最大规模的网络,Fast RCNN和RCNN相比,训练时间从84小时减少为9.5小时,测试时间从47秒减少为0.32秒。在PASCAL VOC 2007上的准确率相差无几,约在66%-67%之间.

    思想

    基础:RCNN

    简单来说,RCNN使用以下四步实现目标检测:
    a. 在图像中确定约1000-2000个候选框
    b. 对于每个候选框内图像块,使用深度网络提取特征
    c. 对候选框中提取出的特征,使用分类器判别是否属于一个特定类
    d. 对于属于某一特征的候选框,用回归器进一步调整其位置
    更多细节可以参看这篇博客

    改进:Fast RCNN

    Fast RCNN方法解决了RCNN方法三个问题:

    问题一:测试时速度慢
    RCNN一张图像内候选框之间大量重叠,提取特征操作冗余。
    本文将整张图像归一化后直接送入深度网络。在邻接时,才加入候选框信息,在末尾的少数几层处理每个候选框。

    问题二:训练时速度慢
    原因同上。
    在训练时,本文先将一张图像送入网络,紧接着送入从这幅图像上提取出的候选区域。这些候选区域的前几层特征不需要再重复计算。

    问题三:训练所需空间大
    RCNN中独立的分类器和回归器需要大量特征作为训练样本。
    本文把类别判断和位置精调统一用深度网络实现,不再需要额外存储。

    以下按次序介绍三个问题对应的解决方法。

    特征提取网络

    基本结构

    图像归一化为224×224直接送入网络。

    前五阶段是基础的conv+relu+pooling形式,在第五阶段结尾,输入P个候选区域(图像序号×1+几何位置×4,序号用于训练)?。
    这里写图片描述

    注:文中给出了大中小三种网络,此处示出最大的一种。三种网络基本结构相似,仅conv+relu层数有差别,或者增删了norm层。

    roi_pool层的测试(forward)

    roi_pool层将每个候选区域均匀分成M×N块,对每块进行max pooling。将特征图上大小不一的候选区域转变为大小统一的数据,送入下一层。
    这里写图片描述

    roi_pool层的训练(backward)

    首先考虑普通max pooling层。设xix_ixi为输入层的节点,yjy_jyj为输出层的节点。
    ∂L∂xi={0δ(i,j)=false∂L∂yjδ(i,j)=true\frac{\partial L}{\partial x_i}=\begin{cases}0&\delta(i,j)=false\\ \frac{\partial L}{\partial y_j} & \delta(i,j)=true\end{cases}xiL={0yjLδ(i,j)=falseδ(i,j)=true

    其中判决函数δ(i,j)\delta(i,j)δ(i,j)表示i节点是否被j节点选为最大值输出。不被选中有两种可能:xix_ixi不在yjy_jyj范围内,或者xix_ixi不是最大值。

    对于roi max pooling,一个输入节点可能和多个输出节点相连。设xix_ixi为输入层的节点,yrjy_{rj}yrj为第rrr个候选区域的第jjj个输出节点。
    这里写图片描述
    ∂L∂xi=Σr,jδ(i,r,j)∂L∂yrj\frac{\partial L}{\partial x_i}=\Sigma_{r,j}\delta(i,r,j)\frac{\partial L}{\partial y_{rj}}xiL=Σr,jδ(i,r,j)yrjL

    判决函数δ(i,r,j)\delta(i,r,j)δ(i,r,j)表示i节点是否被候选区域r的第j个节点选为最大值输出。代价对于xix_ixi的梯度等于所有相关的后一层梯度之和。

    网络参数训练

    参数初始化

    网络除去末尾部分如下图,在ImageNet上训练1000类分类器。结果参数作为相应层的初始化参数。
    这里写图片描述
    其余参数随机初始化。

    分层数据

    在调优训练时,每一个mini-batch中首先加入N张完整图片,而后加入从N张图片中选取的R个候选框。这R个候选框可以复用N张图片前5个阶段的网络特征。
    实际选择N=2, R=128。

    训练数据构成

    N张完整图片以50%概率水平翻转。
    R个候选框的构成方式如下:

    类别 比例 方式
    前景 25% 与某个真值重叠在[0.5,1]的候选框
    背景 75% 与真值重叠的最大值在[0.1,0.5)的候选框

    分类与位置调整

    数据结构

    第五阶段的特征输入到两个并行的全连层中(称为multi-task)。
    这里写图片描述
    cls_score层用于分类,输出K+1维数组ppp,表示属于K类和背景的概率。
    bbox_prdict层用于调整候选区域位置,输出4*K维数组ttt,表示分别属于K类时,应该平移缩放的参数。

    代价函数

    loss_cls层评估分类代价。由真实分类uuu对应的概率决定:
    Lcls=−log⁡puL_{cls}=-\log p_uLcls=logpu

    loss_bbox评估检测框定位代价。比较真实分类对应的预测参数tut^utu和真实平移缩放参数为vvv的差别:
    Lloc=Σi=14g(tiu−vi)L_{loc}=\Sigma_{i=1}^4 g(t^u_i-v_i)Lloc=Σi=14g(tiuvi)
    g为Smooth L1误差,对outlier不敏感:
    g(x)={0.5x2∣x∣<1∣x∣−0.5otherwiseg(x)=\begin{cases} 0.5x^2& |x|<1\\|x|-0.5&otherwise \end{cases} g(x)={0.5x2x0.5x<1otherwise

    总代价为两者加权和,如果分类为背景则不考虑定位代价:
    L={Lcls+λLlocu为前景Lclsu为背景L=\begin{cases} L_{cls}+\lambda L_{loc}& u为前景\\ L_{cls} &u为背景\end{cases}L={Lcls+λLlocLclsuu

    源码中bbox_loss_weights用于标记每一个bbox是否属于某一个类

    全连接层提速

    分类和位置调整都是通过全连接层(fc)实现的,设前一级数据为xxx后一级为yyy,全连接层参数为WWW,尺寸u×vu\times vu×v。一次前向传播(forward)即为:
    y=Wxy=Wxy=Wx
    计算复杂度为u×vu\times vu×v

    WWW进行SVD分解,并用前t个特征值近似:
    W=UΣVT≈U(:,1:t)⋅Σ(1:t,1:t)⋅V(:,1:t)TW=U\Sigma V^T\approx U(:,1:t) \cdot \Sigma(1:t,1:t) \cdot V(:,1:t)^TW=UΣVTU(:,1:t)Σ(1:t,1:t)V(:,1:t)T

    原来的前向传播分解成两步:
    y=Wx=U⋅(Σ⋅VT)⋅x=U⋅zy=Wx = U\cdot (\Sigma \cdot V^T) \cdot x = U \cdot zy=Wx=U(ΣVT)x=Uz
    计算复杂度变为u×t+v×tu\times t+v \times tu×t+v×t
    在实现时,相当于把一个全连接层拆分成两个,中间以一个低维数据相连。
    这里写图片描述

    在github的源码中,这部分似乎没有实现。

    实验与结论

    实验过程不再详述,只记录结论

    • 网络末端同步训练的分类和位置调整,提升准确度
    • 使用多尺度的图像金字塔,性能几乎没有提高
    • 倍增训练数据,能够有2%-3%的准确度提升
    • 网络直接输出各类概率(softmax),比SVM分类器性能略好
    • 更多候选窗不能提升性能

    同年作者团队又推出了Faster RCNN,进一步把检测速度提高到准实时,可以参看这篇博客
    关于RCNN, Fast RCNN, Faster RCNN这一系列目标检测算法,可以进一步参考作者在15年ICCV上的讲座Training R-CNNs of various velocities

    展开全文
  • Fast RCNN

    2020-04-24 22:36:11
    Fast RCNN Abstract 本文提出了一种快速基于区域的卷积网络目标检测方法(Fast RCNN)。Fast RCNN基于之前使用深度卷积网络来更好的进行候选目标区域分类的工作基础之上。和之前的工作相比,Fast RCNN提供了几种创新...

    Fast RCNN
    Abstract
    本文提出了一种快速基于区域的卷积网络目标检测方法(Fast RCNN)。Fast RCNN基于之前使用深度卷积网络来更好的进行候选目标区域分类的工作基础之上。和之前的工作相比,Fast RCNN提供了几种创新来提高训练和测试的速度并提升了检测的准确性。Fast RCNN训练VGG16的速度要比RCNN快9倍,在测试时的快213倍,并在PASCAL VOC上实现了更高的mAP。和SPPnet相比,Fast RCNN训练VGG16的速度快上3倍,测试时快10倍并且更加准确。Fast RCNN由python 和C++实现,并且已经开源。
    Introduction
    近来,深度卷积网络已经显著提升了图像分类和目标检测的准确性。和图像分类相比,目标检测是一个更具有挑战性的工作,需要更复杂的方法解决。由于其复杂性,当前的模型训练方法一般是多阶段,并且十分缓慢且精度不高。
    复杂性的上升是由于检测需要对物体的位置进行准确的定位,这就有两个首要的问题。其一,许多候选的物体位置需要被处理。其二,这些候选区域只提供粗略的位置并且必须被修正来提供更加精确的定位。解决这些问题的方法通常需要牺牲,速度,准确性和模型的简单性。
    在本文中,我们依次展示了当前最先进的基于卷积网络的目标检测器的训练过程。我们提出了一个单阶段训练方法,联合学习候选区域分类以及修正空间定位的精度。
    这种方法训练VGG16的速度比RCNN快9倍,比SPPnet快3倍。在运行时,每张图片仅需要耗费0.3s,在PASCAL VOC 2012 上实现最高的准确率为66%。
    R-CNN and SPPnet
    RCNN通过使用深度卷积神经网络来分类目标候选区域实现了极好的目标检测准确性。不过,它也有一些显著的缺陷。1.训练是一个多阶段的过程。R-CNN首先在目标候选框上使用log损失来微调神经网络。之后,用卷积网络学习到的特征来调整SVM。这些SVM分类器的作用是目标检测器,代替了通过微调学习到的softmax分类器。在第三个训练阶段,学习到了bounding-box回归器。2.训练十分的耗费空间和时间。对于SVM以及bounding box回归器的训练来说,会从每张图片的每一个候选区域中提取特征并写入到磁盘中。使用很深的网络,例如VGG16,这个过程大约5000个图像在单个GPU上要花费2.5天。这些特征需要数百G的存储空间。3.目标检测的速度很慢。在测试时。特征会从每张图片上的每个候选区域中提取。在一块GPU上检测一张图片需要花费47s。
    RCNN很慢是因为它对每一个候选区域进行卷积网络前传,而不进行计算共享。空间金字塔池化网络(SPPnets)被提出出来通过计算共享来对RCNN进行加速。SPPnet网络对每一个完整的图像计算卷积特征图,之后使用从共享的特征图中提取出来的特征向量来对每一个候选区域进行分类。特征通过最大池化候选区域中特征图部分而被提取出来并转化为固定大小。多个输出被池化,之后连接成最大金字塔。SPPnet在测试时可以将RCNN加速到10到100倍。训练的时间也因为更快的特征提取而被减少了三倍。
    不过,SPPnet也有一些显著的缺陷。就像RCNN一样,训练过程是一个多阶段的流水线,包含了特征提取,使用log损失来对网络进行微调,训练SVMs,以及最后的bounding box 回归器的拟合。特征也会被写入到磁盘当中。但是不像RCNN,微调算法不能更新空间金字塔之前的卷积层。不难预料,这种限制使得对于很深的网络来说,其准确性受到了限制。
    Contribution
    我们提出了一种新的算法,很好的解决了RCNN以及SPPnet中存在的问题,并且提高了准确性以及速度。Fast RCNN有以下几个优点。1、map值高于RCNN以及SPPnet。2、训练过程使用多任务loss,只有一个阶段。3、训练可以更新所有的网络层。4、不需要存储提取出来的特征。

    Architecture and training
    图1展示了Fast RCNN的结构。Fast RCNN网络将一整张图片以及一系列目标候选区域作为输入。网络首先用几个卷积层来对整张图片进行处理,之后使用一个最大池化层来产生卷积特征图。对于每一个候选框,ROI池化层从特征图中抽取固定大小的特征向量。每个向量被喂到一系列的池化层中,之后产生两个同级的向量层:其中一个输出K个类别加一个背景类别的概率估计,另一个为K个类别中每一个类别输出4个真实值。每一组值都是对某一个类别回归框位置的修正。
    The RoI pooling layer
    RoI池化层使用最大池化来将roi区域中有价值的特征转化为一个小的特征图,固定的大小为H*W。H和W是这一层的超参,独立于任何的RoI之外。在本文之中,RoI是卷积特征图中的一个矩形窗口。每一个RoI都是有四个值确定的。
    RoI最大池化通过将窗口分成一系列的子窗口,并得出大约的面积。然后对每一个子窗口输出进行最大池化,将输出合并到相应的输出单元之中。同标准的最大池化一样,池化操作是对每一个特征图通道单独作用的。
    Initiaizing from pre-trained networks
    用了三个预训练的ImageNet网络进行预训练,每个网络有5个最大池化层以及5到13个卷积层。当预训练网络初始化一个Fast RCNN网络时,会进行三个变体。
    首先,最后一个最大池化层会被ROI池化层所代替。
    其次,网络的最后一个全连接层和softmax层会被之前描述过的两个同级层所代替。
    第三,网络被修正成两个输入,一系列图片,以及这些图片上的一系列ROI。
    Fine-tuning for detection
    对于Fast RCNN来说,用反向传播算法计算所有的网络权重是十分重要的能力。首先,先阐述一下,为什么sPPnet无法更新位于空间金字塔下面的层的权重。
    根本原因是,当训练样本来自于不同的图片时SPP的反向传播算法是十分低效率的。(why?如果都来自于一张图片是否就高效?)这也正是RCNN以及SPPnet的训练方式。这种低效率的原因是每个ROI的感受野太大了,有时候甚至包括了整个图片。由于正向传播算法必须处理整个感受野,训练的输入经常很大。
    我们提出了一种效率更高的方式,即在训练过程中特征共享。Fast RCNN中的SGD的批量的采样是分层的,先采图片,再对每个图片采样ROI。ROI来自于同一个图片,可以减少正向以及反向的计算和存储。当我们使得图片的数量减少时,就可以使得mini-batch的计算减少。
    这种想法,有可能会因为ROI之间的相关性使得训练收敛变慢,不过实际使用时这个问题并没有发生。
    为了分层采样,Fast RCNN采用了流水线的训练过程,使用了一个微调联合优化了一个softmax分类器和bounding box回归器,而不是在三个阶段,分别训练一个softmax分类器。SVM以及回归器。

    Multi-task loss
    Fast RCNN有两个同级的输出层。第一个输出K+1上的类别概率,这是通过全连接层上的softmax实现的。第二个输出bounding box回归的偏移量。、
    每一个训练的ROI的label 包含了类别和框。我们用一个多任务的loss来联合训练分类和bounding box回归。Loss如下:

    对于背景ROI没有bounding box,因此它的第二个loss也就自动忽略了。对于bounding box回归的loss的具体展开如下。

    其中L1是比较鲁棒的,对于异常点不是十分敏感,与之相比RCNN以及SPPnet中的L2就相对敏感。当回归的目标无界的时候,,带有L2损失的训练需要更仔细的微调学习率来防止梯度爆炸。
    等式1中的超参控制着两个loss的平衡。
    Mini-batch sampling
    在微调阶段,每个SGD小批量是由2张图片构成的。Batch的size是128,每张图片上采样64个ROI。我们从候选框中选择25%的ROI,这些的IoU至少是0.5。这些ROI包含了被标记为前景物体的目标类别。剩余的ROI从其他的IOU在0.1-0.5之间的选,这些是背景样本。(The lower threshold of 0.1 appears to act as a heuristic for hard example mining ???)训练过程中,图片有50%的可能性会发生水平反转。不需要进行其他的数据增强。
    Back-propagation through RoI pooling layers。
    反向传播经过RoI池化层。为了清楚起见,我们假设每一个batch只有一张图片。结论是有扩展性的,因为传播对每一张图片都是独立的。

    SGD hyper-parameters
    用于Softmax分类和检测框回归的全连接层的权重分别使用具有方差0.01和0.001的零均值高斯分布初始化。偏置初始化为0。所有层的权重学习率为1倍的全局学习率,偏置为2倍的全局学习率,全局学习率为0.001。 当对VOC07或VOC12 trainval训练时,我们运行SGD进行30k次小批量迭代,然后将学习率降低到0.0001,再训练10k次迭代。当我们训练更大的数据集,我们运行SGD更多的迭代,如下文所述。 使用0.9的动量和0.0005的参数衰减。
    2.4 Scale invariance
    两种实现尺度不变对象检测的方法:(1)通过“brute force”学习和(2)通过使用图像金字塔。 在“brute force”方法中,在训练和测试期间以预定义的像素大小处理每个图像。网络必须直接从训练数据学习尺度不变性目标检测。相反,多尺度方法通过图像金字塔向网络提供近似尺度不变性。 在测试时,图像金字塔用于大致缩放-规范化每个候选框。 在多尺度训练期间,我们在每次图像采样时随机采样金字塔尺度,遵循5,作为数据增强的形式。由于GPU内存限制,我们只对较小的网络进行多尺度训练。
    3.Fast RCNN detection
    一旦网络被预先微调好了,检测就相当于是网络进行前向。网络会将一张图片和一系列目标候选框作为输入。在测试的时候,输入进的候选框大约是2000个。
    对于每一个测试Roi,前向输出了类别概率的分布,以及大约的预测框的偏移量。之后对每一个类别进行非最大值抑制。

    3.1Truncated SVD for faster detection
    对于图像分类的过程,花费在全连接层的时间要比花费在卷积层的时间要少。与之相反的,检测的时候大约一半的时间都花费在了全连接层上了。通过这种truncated svd的方法可以压缩这些用在全连接层上的时间。

    4 Main result
    本文主要有三个成就
    1.在三个数据集上取得了最好的效果
    2.和RCNN 以及Sppnet相比训练和检测更快了
    3.VGG16网络的微调 提升了最后的mAP

    4.1 Experimental setup
    我们的实验有三个预训练的Imagenet 模型。我们的实验使用了三个经过预训练的ImageNet网络模型,这些模型可以在线获得第一个是来自R-CNN3的CaffeNet(实质上是AlexNet1)。 我们将这个CaffeNet称为模型S,即小模型。第二网络是来自14的VGG_CNN_M_1024,其具有与S相同的深度,但是更宽。 我们把这个网络模型称为M,即中等模型。最后一个网络是来自15的非常深的VGG16模型。由于这个模型是最大的,我们称之为L。在本节中,所有实验都使用单尺度训练和测试。

    5 Design evaluation

    我们通过实验来了解Fast RCNN与R-CNN和SPPnet的比较,以及评估设计决策。按照最佳实践,我们在PASCAL VOC07数据集上进行了这些实验。

    5.1 Does multi-task training help?

    多任务训练是方便的,因为避免了管理顺序训练任务流水线。也有潜力提高训练结果,因为任务之间通过共享的表示来相互影响。那么,多任务能否提高fast RCNN中目标检测的准确性呢?
    5.2 Scale invariance to brute force or fitness
    我们比较两个策略实现尺度不变物体检测:暴力学习(单尺度)和图像金字塔(多尺度)。在任一情况下,我们将图像的尺度定义为其最短边的长度。
    所有单尺度实验使用像素,对于一些图像,可以小于600,因为我们保持横纵比缩放图像,并限制其最长边为1000像素。选择这些值使得VGG16在微调期间不至于GPU内存不足。较小的模型占用显存更少,所以可受益于较大的值。然而,每个模型的优化不是我们的主要的关注点。我们注意到PASCAL图像是384×473像素的,因此单尺度设置通常以1.6倍的倍数上采样图像。因此,RoI池化层的平均有效步进为约10像素。在多尺度设置中,我们使用5中指定的相同的五个尺度以方便与SPPnet进行比较。但是,我们以2000像素为上限,以避免GPU内存不足。表7显示了当使用一个或五个尺度进行训练和测试时的模型S和M的结果。也许在5中最令人惊讶的结果是单尺度检测几乎与多尺度检测一样好。我们的研究结果能证明他们的结果:深度卷积网络擅长直接学习尺度不变性。多尺度方法消耗大量的计算时间仅带来了很小的mAP增加(表7)。在VGG16(模型L)的情况下,我们受限于实施细节仅能使用单个尺度。然而,它得到了66.9%的mAP,略高于R-CNN的66.0%19,尽管R-CNN在每个候选区域被缩放为规范大小,在意义上使用了“无限”尺度。由于单尺度处理提供速度和精度之间的最佳折衷,特别是对于非常深的模型,本小节以外的所有实验使用单尺度训练和测试,像素。
    5.3 Do we need more training data?
    当提供更多的数据时,好的检测器的效果会变好。DPM很容易就饱和了,这里进行了一系列的数据增加的工作,mAP会有所提高。

    5.4 DO SVMS outperform softmax?
    Fast rcnn使用的是softmax分类器,rcnn和sppnet使用的是svm。这里进行了几组对照实验,来看一下哪一种更好。对于fast rcnn来说,这三种网络中,都是softmax更好,不过好的不多。这论证了一次微调比之前多级训练方法来说已经是足够了。

    5.5 Are more proposals always better?
    Not yet

    6 Conclusion
    本文提出Fast R-CNN,一个对R-CNN和SPPnet干净,快速的更新。 除了报告目前的检测结果之外,我们还提供了详细的实验,希望提供新的见解。 特别值得注意的是,稀疏目标候选区域似乎提高了检测器的质量。 过去探索这个问题过于昂贵(在时间上),但Fast R-CNN使其变得可能。当然,可能存在允许dense box执行以及稀疏候选框的尚未发现的技术。这样的方法如果被开发,可以帮助进一步加速目标检测。Fast RCNN
    Abstract
    本文提出了一种快速基于区域的卷积网络目标检测方法(Fast RCNN)。Fast RCNN基于之前使用深度卷积网络来更好的进行候选目标区域分类的工作基础之上。和之前的工作相比,Fast RCNN提供了几种创新来提高训练和测试的速度并提升了检测的准确性。Fast RCNN训练VGG16的速度要比RCNN快9倍,在测试时的快213倍,并在PASCAL VOC上实现了更高的mAP。和SPPnet相比,Fast RCNN训练VGG16的速度快上3倍,测试时快10倍并且更加准确。Fast RCNN由python 和C++实现,并且已经开源。
    Introduction
    近来,深度卷积网络已经显著提升了图像分类和目标检测的准确性。和图像分类相比,目标检测是一个更具有挑战性的工作,需要更复杂的方法解决。由于其复杂性,当前的模型训练方法一般是多阶段,并且十分缓慢且精度不高。
    复杂性的上升是由于检测需要对物体的位置进行准确的定位,这就有两个首要的问题。其一,许多候选的物体位置需要被处理。其二,这些候选区域只提供粗略的位置并且必须被修正来提供更加精确的定位。解决这些问题的方法通常需要牺牲,速度,准确性和模型的简单性。
    在本文中,我们依次展示了当前最先进的基于卷积网络的目标检测器的训练过程。我们提出了一个单阶段训练方法,联合学习候选区域分类以及修正空间定位的精度。
    这种方法训练VGG16的速度比RCNN快9倍,比SPPnet快3倍。在运行时,每张图片仅需要耗费0.3s,在PASCAL VOC 2012 上实现最高的准确率为66%。
    R-CNN and SPPnet
    RCNN通过使用深度卷积神经网络来分类目标候选区域实现了极好的目标检测准确性。不过,它也有一些显著的缺陷。1.训练是一个多阶段的过程。R-CNN首先在目标候选框上使用log损失来微调神经网络。之后,用卷积网络学习到的特征来调整SVM。这些SVM分类器的作用是目标检测器,代替了通过微调学习到的softmax分类器。在第三个训练阶段,学习到了bounding-box回归器。2.训练十分的耗费空间和时间。对于SVM以及bounding box回归器的训练来说,会从每张图片的每一个候选区域中提取特征并写入到磁盘中。使用很深的网络,例如VGG16,这个过程大约5000个图像在单个GPU上要花费2.5天。这些特征需要数百G的存储空间。3.目标检测的速度很慢。在测试时。特征会从每张图片上的每个候选区域中提取。在一块GPU上检测一张图片需要花费47s。
    RCNN很慢是因为它对每一个候选区域进行卷积网络前传,而不进行计算共享。空间金字塔池化网络(SPPnets)被提出出来通过计算共享来对RCNN进行加速。SPPnet网络对每一个完整的图像计算卷积特征图,之后使用从共享的特征图中提取出来的特征向量来对每一个候选区域进行分类。特征通过最大池化候选区域中特征图部分而被提取出来并转化为固定大小。多个输出被池化,之后连接成最大金字塔。SPPnet在测试时可以将RCNN加速到10到100倍。训练的时间也因为更快的特征提取而被减少了三倍。
    不过,SPPnet也有一些显著的缺陷。就像RCNN一样,训练过程是一个多阶段的流水线,包含了特征提取,使用log损失来对网络进行微调,训练SVMs,以及最后的bounding box 回归器的拟合。特征也会被写入到磁盘当中。但是不像RCNN,微调算法不能更新空间金字塔之前的卷积层。不难预料,这种限制使得对于很深的网络来说,其准确性受到了限制。
    Contribution
    我们提出了一种新的算法,很好的解决了RCNN以及SPPnet中存在的问题,并且提高了准确性以及速度。Fast RCNN有以下几个优点。1、map值高于RCNN以及SPPnet。2、训练过程使用多任务loss,只有一个阶段。3、训练可以更新所有的网络层。4、不需要存储提取出来的特征。

    Architecture and training
    图1展示了Fast RCNN的结构。Fast RCNN网络将一整张图片以及一系列目标候选区域作为输入。网络首先用几个卷积层来对整张图片进行处理,之后使用一个最大池化层来产生卷积特征图。对于每一个候选框,ROI池化层从特征图中抽取固定大小的特征向量。每个向量被喂到一系列的池化层中,之后产生两个同级的向量层:其中一个输出K个类别加一个背景类别的概率估计,另一个为K个类别中每一个类别输出4个真实值。每一组值都是对某一个类别回归框位置的修正。
    The RoI pooling layer
    RoI池化层使用最大池化来将roi区域中有价值的特征转化为一个小的特征图,固定的大小为H*W。H和W是这一层的超参,独立于任何的RoI之外。在本文之中,RoI是卷积特征图中的一个矩形窗口。每一个RoI都是有四个值确定的。
    RoI最大池化通过将窗口分成一系列的子窗口,并得出大约的面积。然后对每一个子窗口输出进行最大池化,将输出合并到相应的输出单元之中。同标准的最大池化一样,池化操作是对每一个特征图通道单独作用的。
    Initiaizing from pre-trained networks
    用了三个预训练的ImageNet网络进行预训练,每个网络有5个最大池化层以及5到13个卷积层。当预训练网络初始化一个Fast RCNN网络时,会进行三个变体。
    首先,最后一个最大池化层会被ROI池化层所代替。
    其次,网络的最后一个全连接层和softmax层会被之前描述过的两个同级层所代替。
    第三,网络被修正成两个输入,一系列图片,以及这些图片上的一系列ROI。
    Fine-tuning for detection
    对于Fast RCNN来说,用反向传播算法计算所有的网络权重是十分重要的能力。首先,先阐述一下,为什么sPPnet无法更新位于空间金字塔下面的层的权重。
    根本原因是,当训练样本来自于不同的图片时SPP的反向传播算法是十分低效率的。(why?如果都来自于一张图片是否就高效?)这也正是RCNN以及SPPnet的训练方式。这种低效率的原因是每个ROI的感受野太大了,有时候甚至包括了整个图片。由于正向传播算法必须处理整个感受野,训练的输入经常很大。
    我们提出了一种效率更高的方式,即在训练过程中特征共享。Fast RCNN中的SGD的批量的采样是分层的,先采图片,再对每个图片采样ROI。ROI来自于同一个图片,可以减少正向以及反向的计算和存储。当我们使得图片的数量减少时,就可以使得mini-batch的计算减少。
    这种想法,有可能会因为ROI之间的相关性使得训练收敛变慢,不过实际使用时这个问题并没有发生。
    为了分层采样,Fast RCNN采用了流水线的训练过程,使用了一个微调联合优化了一个softmax分类器和bounding box回归器,而不是在三个阶段,分别训练一个softmax分类器。SVM以及回归器。

    Multi-task loss
    Fast RCNN有两个同级的输出层。第一个输出K+1上的类别概率,这是通过全连接层上的softmax实现的。第二个输出bounding box回归的偏移量。、
    每一个训练的ROI的label 包含了类别和框。我们用一个多任务的loss来联合训练分类和bounding box回归。Loss如下:

    对于背景ROI没有bounding box,因此它的第二个loss也就自动忽略了。对于bounding box回归的loss的具体展开如下。

    其中L1是比较鲁棒的,对于异常点不是十分敏感,与之相比RCNN以及SPPnet中的L2就相对敏感。当回归的目标无界的时候,,带有L2损失的训练需要更仔细的微调学习率来防止梯度爆炸。
    等式1中的超参控制着两个loss的平衡。
    Mini-batch sampling
    在微调阶段,每个SGD小批量是由2张图片构成的。Batch的size是128,每张图片上采样64个ROI。我们从候选框中选择25%的ROI,这些的IoU至少是0.5。这些ROI包含了被标记为前景物体的目标类别。剩余的ROI从其他的IOU在0.1-0.5之间的选,这些是背景样本。(The lower threshold of 0.1 appears to act as a heuristic for hard example mining ???)训练过程中,图片有50%的可能性会发生水平反转。不需要进行其他的数据增强。
    Back-propagation through RoI pooling layers。
    反向传播经过RoI池化层。为了清楚起见,我们假设每一个batch只有一张图片。结论是有扩展性的,因为传播对每一张图片都是独立的。

    SGD hyper-parameters
    用于Softmax分类和检测框回归的全连接层的权重分别使用具有方差0.01和0.001的零均值高斯分布初始化。偏置初始化为0。所有层的权重学习率为1倍的全局学习率,偏置为2倍的全局学习率,全局学习率为0.001。 当对VOC07或VOC12 trainval训练时,我们运行SGD进行30k次小批量迭代,然后将学习率降低到0.0001,再训练10k次迭代。当我们训练更大的数据集,我们运行SGD更多的迭代,如下文所述。 使用0.9的动量和0.0005的参数衰减。
    2.4 Scale invariance
    两种实现尺度不变对象检测的方法:(1)通过“brute force”学习和(2)通过使用图像金字塔。 在“brute force”方法中,在训练和测试期间以预定义的像素大小处理每个图像。网络必须直接从训练数据学习尺度不变性目标检测。相反,多尺度方法通过图像金字塔向网络提供近似尺度不变性。 在测试时,图像金字塔用于大致缩放-规范化每个候选框。 在多尺度训练期间,我们在每次图像采样时随机采样金字塔尺度,遵循5,作为数据增强的形式。由于GPU内存限制,我们只对较小的网络进行多尺度训练。
    3.Fast RCNN detection
    一旦网络被预先微调好了,检测就相当于是网络进行前向。网络会将一张图片和一系列目标候选框作为输入。在测试的时候,输入进的候选框大约是2000个。
    对于每一个测试Roi,前向输出了类别概率的分布,以及大约的预测框的偏移量。之后对每一个类别进行非最大值抑制。

    3.1Truncated SVD for faster detection
    对于图像分类的过程,花费在全连接层的时间要比花费在卷积层的时间要少。与之相反的,检测的时候大约一半的时间都花费在了全连接层上了。通过这种truncated svd的方法可以压缩这些用在全连接层上的时间。

    4 Main result
    本文主要有三个成就
    1.在三个数据集上取得了最好的效果
    2.和RCNN 以及Sppnet相比训练和检测更快了
    3.VGG16网络的微调 提升了最后的mAP

    4.1 Experimental setup
    我们的实验有三个预训练的Imagenet 模型。我们的实验使用了三个经过预训练的ImageNet网络模型,这些模型可以在线获得第一个是来自R-CNN3的CaffeNet(实质上是AlexNet1)。 我们将这个CaffeNet称为模型S,即小模型。第二网络是来自14的VGG_CNN_M_1024,其具有与S相同的深度,但是更宽。 我们把这个网络模型称为M,即中等模型。最后一个网络是来自15的非常深的VGG16模型。由于这个模型是最大的,我们称之为L。在本节中,所有实验都使用单尺度训练和测试。

    5 Design evaluation

    我们通过实验来了解Fast RCNN与R-CNN和SPPnet的比较,以及评估设计决策。按照最佳实践,我们在PASCAL VOC07数据集上进行了这些实验。

    5.1 Does multi-task training help?

    多任务训练是方便的,因为避免了管理顺序训练任务流水线。也有潜力提高训练结果,因为任务之间通过共享的表示来相互影响。那么,多任务能否提高fast RCNN中目标检测的准确性呢?
    5.2 Scale invariance to brute force or fitness
    我们比较两个策略实现尺度不变物体检测:暴力学习(单尺度)和图像金字塔(多尺度)。在任一情况下,我们将图像的尺度定义为其最短边的长度。
    所有单尺度实验使用像素,对于一些图像,可以小于600,因为我们保持横纵比缩放图像,并限制其最长边为1000像素。选择这些值使得VGG16在微调期间不至于GPU内存不足。较小的模型占用显存更少,所以可受益于较大的值。然而,每个模型的优化不是我们的主要的关注点。我们注意到PASCAL图像是384×473像素的,因此单尺度设置通常以1.6倍的倍数上采样图像。因此,RoI池化层的平均有效步进为约10像素。在多尺度设置中,我们使用5中指定的相同的五个尺度以方便与SPPnet进行比较。但是,我们以2000像素为上限,以避免GPU内存不足。表7显示了当使用一个或五个尺度进行训练和测试时的模型S和M的结果。也许在5中最令人惊讶的结果是单尺度检测几乎与多尺度检测一样好。我们的研究结果能证明他们的结果:深度卷积网络擅长直接学习尺度不变性。多尺度方法消耗大量的计算时间仅带来了很小的mAP增加(表7)。在VGG16(模型L)的情况下,我们受限于实施细节仅能使用单个尺度。然而,它得到了66.9%的mAP,略高于R-CNN的66.0%19,尽管R-CNN在每个候选区域被缩放为规范大小,在意义上使用了“无限”尺度。由于单尺度处理提供速度和精度之间的最佳折衷,特别是对于非常深的模型,本小节以外的所有实验使用单尺度训练和测试,像素。
    5.3 Do we need more training data?
    当提供更多的数据时,好的检测器的效果会变好。DPM很容易就饱和了,这里进行了一系列的数据增加的工作,mAP会有所提高。

    5.4 DO SVMS outperform softmax?
    Fast rcnn使用的是softmax分类器,rcnn和sppnet使用的是svm。这里进行了几组对照实验,来看一下哪一种更好。对于fast rcnn来说,这三种网络中,都是softmax更好,不过好的不多。这论证了一次微调比之前多级训练方法来说已经是足够了。

    5.5 Are more proposals always better?
    Not yet

    6 Conclusion
    本文提出Fast R-CNN,一个对R-CNN和SPPnet干净,快速的更新。 除了报告目前的检测结果之外,我们还提供了详细的实验,希望提供新的见解。 特别值得注意的是,稀疏目标候选区域似乎提高了检测器的质量。 过去探索这个问题过于昂贵(在时间上),但Fast R-CNN使其变得可能。当然,可能存在允许dense box执行以及稀疏候选框的尚未发现的技术。这样的方法如果被开发,可以帮助进一步加速目标检测。Fast RCNN
    Abstract
    本文提出了一种快速基于区域的卷积网络目标检测方法(Fast RCNN)。Fast RCNN基于之前使用深度卷积网络来更好的进行候选目标区域分类的工作基础之上。和之前的工作相比,Fast RCNN提供了几种创新来提高训练和测试的速度并提升了检测的准确性。Fast RCNN训练VGG16的速度要比RCNN快9倍,在测试时的快213倍,并在PASCAL VOC上实现了更高的mAP。和SPPnet相比,Fast RCNN训练VGG16的速度快上3倍,测试时快10倍并且更加准确。Fast RCNN由python 和C++实现,并且已经开源。
    Introduction
    近来,深度卷积网络已经显著提升了图像分类和目标检测的准确性。和图像分类相比,目标检测是一个更具有挑战性的工作,需要更复杂的方法解决。由于其复杂性,当前的模型训练方法一般是多阶段,并且十分缓慢且精度不高。
    复杂性的上升是由于检测需要对物体的位置进行准确的定位,这就有两个首要的问题。其一,许多候选的物体位置需要被处理。其二,这些候选区域只提供粗略的位置并且必须被修正来提供更加精确的定位。解决这些问题的方法通常需要牺牲,速度,准确性和模型的简单性。
    在本文中,我们依次展示了当前最先进的基于卷积网络的目标检测器的训练过程。我们提出了一个单阶段训练方法,联合学习候选区域分类以及修正空间定位的精度。
    这种方法训练VGG16的速度比RCNN快9倍,比SPPnet快3倍。在运行时,每张图片仅需要耗费0.3s,在PASCAL VOC 2012 上实现最高的准确率为66%。
    R-CNN and SPPnet
    RCNN通过使用深度卷积神经网络来分类目标候选区域实现了极好的目标检测准确性。不过,它也有一些显著的缺陷。1.训练是一个多阶段的过程。R-CNN首先在目标候选框上使用log损失来微调神经网络。之后,用卷积网络学习到的特征来调整SVM。这些SVM分类器的作用是目标检测器,代替了通过微调学习到的softmax分类器。在第三个训练阶段,学习到了bounding-box回归器。2.训练十分的耗费空间和时间。对于SVM以及bounding box回归器的训练来说,会从每张图片的每一个候选区域中提取特征并写入到磁盘中。使用很深的网络,例如VGG16,这个过程大约5000个图像在单个GPU上要花费2.5天。这些特征需要数百G的存储空间。3.目标检测的速度很慢。在测试时。特征会从每张图片上的每个候选区域中提取。在一块GPU上检测一张图片需要花费47s。
    RCNN很慢是因为它对每一个候选区域进行卷积网络前传,而不进行计算共享。空间金字塔池化网络(SPPnets)被提出出来通过计算共享来对RCNN进行加速。SPPnet网络对每一个完整的图像计算卷积特征图,之后使用从共享的特征图中提取出来的特征向量来对每一个候选区域进行分类。特征通过最大池化候选区域中特征图部分而被提取出来并转化为固定大小。多个输出被池化,之后连接成最大金字塔。SPPnet在测试时可以将RCNN加速到10到100倍。训练的时间也因为更快的特征提取而被减少了三倍。
    不过,SPPnet也有一些显著的缺陷。就像RCNN一样,训练过程是一个多阶段的流水线,包含了特征提取,使用log损失来对网络进行微调,训练SVMs,以及最后的bounding box 回归器的拟合。特征也会被写入到磁盘当中。但是不像RCNN,微调算法不能更新空间金字塔之前的卷积层。不难预料,这种限制使得对于很深的网络来说,其准确性受到了限制。
    Contribution
    我们提出了一种新的算法,很好的解决了RCNN以及SPPnet中存在的问题,并且提高了准确性以及速度。Fast RCNN有以下几个优点。1、map值高于RCNN以及SPPnet。2、训练过程使用多任务loss,只有一个阶段。3、训练可以更新所有的网络层。4、不需要存储提取出来的特征。

    Architecture and training
    图1展示了Fast RCNN的结构。Fast RCNN网络将一整张图片以及一系列目标候选区域作为输入。网络首先用几个卷积层来对整张图片进行处理,之后使用一个最大池化层来产生卷积特征图。对于每一个候选框,ROI池化层从特征图中抽取固定大小的特征向量。每个向量被喂到一系列的池化层中,之后产生两个同级的向量层:其中一个输出K个类别加一个背景类别的概率估计,另一个为K个类别中每一个类别输出4个真实值。每一组值都是对某一个类别回归框位置的修正。
    The RoI pooling layer
    RoI池化层使用最大池化来将roi区域中有价值的特征转化为一个小的特征图,固定的大小为H*W。H和W是这一层的超参,独立于任何的RoI之外。在本文之中,RoI是卷积特征图中的一个矩形窗口。每一个RoI都是有四个值确定的。
    RoI最大池化通过将窗口分成一系列的子窗口,并得出大约的面积。然后对每一个子窗口输出进行最大池化,将输出合并到相应的输出单元之中。同标准的最大池化一样,池化操作是对每一个特征图通道单独作用的。
    Initiaizing from pre-trained networks
    用了三个预训练的ImageNet网络进行预训练,每个网络有5个最大池化层以及5到13个卷积层。当预训练网络初始化一个Fast RCNN网络时,会进行三个变体。
    首先,最后一个最大池化层会被ROI池化层所代替。
    其次,网络的最后一个全连接层和softmax层会被之前描述过的两个同级层所代替。
    第三,网络被修正成两个输入,一系列图片,以及这些图片上的一系列ROI。
    Fine-tuning for detection
    对于Fast RCNN来说,用反向传播算法计算所有的网络权重是十分重要的能力。首先,先阐述一下,为什么sPPnet无法更新位于空间金字塔下面的层的权重。
    根本原因是,当训练样本来自于不同的图片时SPP的反向传播算法是十分低效率的。(why?如果都来自于一张图片是否就高效?)这也正是RCNN以及SPPnet的训练方式。这种低效率的原因是每个ROI的感受野太大了,有时候甚至包括了整个图片。由于正向传播算法必须处理整个感受野,训练的输入经常很大。
    我们提出了一种效率更高的方式,即在训练过程中特征共享。Fast RCNN中的SGD的批量的采样是分层的,先采图片,再对每个图片采样ROI。ROI来自于同一个图片,可以减少正向以及反向的计算和存储。当我们使得图片的数量减少时,就可以使得mini-batch的计算减少。
    这种想法,有可能会因为ROI之间的相关性使得训练收敛变慢,不过实际使用时这个问题并没有发生。
    为了分层采样,Fast RCNN采用了流水线的训练过程,使用了一个微调联合优化了一个softmax分类器和bounding box回归器,而不是在三个阶段,分别训练一个softmax分类器。SVM以及回归器。

    Multi-task loss
    Fast RCNN有两个同级的输出层。第一个输出K+1上的类别概率,这是通过全连接层上的softmax实现的。第二个输出bounding box回归的偏移量。、
    每一个训练的ROI的label 包含了类别和框。我们用一个多任务的loss来联合训练分类和bounding box回归。Loss如下:

    对于背景ROI没有bounding box,因此它的第二个loss也就自动忽略了。对于bounding box回归的loss的具体展开如下。

    其中L1是比较鲁棒的,对于异常点不是十分敏感,与之相比RCNN以及SPPnet中的L2就相对敏感。当回归的目标无界的时候,,带有L2损失的训练需要更仔细的微调学习率来防止梯度爆炸。
    等式1中的超参控制着两个loss的平衡。
    Mini-batch sampling
    在微调阶段,每个SGD小批量是由2张图片构成的。Batch的size是128,每张图片上采样64个ROI。我们从候选框中选择25%的ROI,这些的IoU至少是0.5。这些ROI包含了被标记为前景物体的目标类别。剩余的ROI从其他的IOU在0.1-0.5之间的选,这些是背景样本。(The lower threshold of 0.1 appears to act as a heuristic for hard example mining ???)训练过程中,图片有50%的可能性会发生水平反转。不需要进行其他的数据增强。
    Back-propagation through RoI pooling layers。
    反向传播经过RoI池化层。为了清楚起见,我们假设每一个batch只有一张图片。结论是有扩展性的,因为传播对每一张图片都是独立的。

    SGD hyper-parameters
    用于Softmax分类和检测框回归的全连接层的权重分别使用具有方差0.01和0.001的零均值高斯分布初始化。偏置初始化为0。所有层的权重学习率为1倍的全局学习率,偏置为2倍的全局学习率,全局学习率为0.001。 当对VOC07或VOC12 trainval训练时,我们运行SGD进行30k次小批量迭代,然后将学习率降低到0.0001,再训练10k次迭代。当我们训练更大的数据集,我们运行SGD更多的迭代,如下文所述。 使用0.9的动量和0.0005的参数衰减。
    2.4 Scale invariance
    两种实现尺度不变对象检测的方法:(1)通过“brute force”学习和(2)通过使用图像金字塔。 在“brute force”方法中,在训练和测试期间以预定义的像素大小处理每个图像。网络必须直接从训练数据学习尺度不变性目标检测。相反,多尺度方法通过图像金字塔向网络提供近似尺度不变性。 在测试时,图像金字塔用于大致缩放-规范化每个候选框。 在多尺度训练期间,我们在每次图像采样时随机采样金字塔尺度,遵循5,作为数据增强的形式。由于GPU内存限制,我们只对较小的网络进行多尺度训练。
    3.Fast RCNN detection
    一旦网络被预先微调好了,检测就相当于是网络进行前向。网络会将一张图片和一系列目标候选框作为输入。在测试的时候,输入进的候选框大约是2000个。
    对于每一个测试Roi,前向输出了类别概率的分布,以及大约的预测框的偏移量。之后对每一个类别进行非最大值抑制。

    3.1Truncated SVD for faster detection
    对于图像分类的过程,花费在全连接层的时间要比花费在卷积层的时间要少。与之相反的,检测的时候大约一半的时间都花费在了全连接层上了。通过这种truncated svd的方法可以压缩这些用在全连接层上的时间。

    4 Main result
    本文主要有三个成就
    1.在三个数据集上取得了最好的效果
    2.和RCNN 以及Sppnet相比训练和检测更快了
    3.VGG16网络的微调 提升了最后的mAP

    4.1 Experimental setup
    我们的实验有三个预训练的Imagenet 模型。我们的实验使用了三个经过预训练的ImageNet网络模型,这些模型可以在线获得第一个是来自R-CNN3的CaffeNet(实质上是AlexNet1)。 我们将这个CaffeNet称为模型S,即小模型。第二网络是来自14的VGG_CNN_M_1024,其具有与S相同的深度,但是更宽。 我们把这个网络模型称为M,即中等模型。最后一个网络是来自15的非常深的VGG16模型。由于这个模型是最大的,我们称之为L。在本节中,所有实验都使用单尺度训练和测试。

    5 Design evaluation

    我们通过实验来了解Fast RCNN与R-CNN和SPPnet的比较,以及评估设计决策。按照最佳实践,我们在PASCAL VOC07数据集上进行了这些实验。

    5.1 Does multi-task training help?

    多任务训练是方便的,因为避免了管理顺序训练任务流水线。也有潜力提高训练结果,因为任务之间通过共享的表示来相互影响。那么,多任务能否提高fast RCNN中目标检测的准确性呢?
    5.2 Scale invariance to brute force or fitness
    我们比较两个策略实现尺度不变物体检测:暴力学习(单尺度)和图像金字塔(多尺度)。在任一情况下,我们将图像的尺度定义为其最短边的长度。
    所有单尺度实验使用像素,对于一些图像,可以小于600,因为我们保持横纵比缩放图像,并限制其最长边为1000像素。选择这些值使得VGG16在微调期间不至于GPU内存不足。较小的模型占用显存更少,所以可受益于较大的值。然而,每个模型的优化不是我们的主要的关注点。我们注意到PASCAL图像是384×473像素的,因此单尺度设置通常以1.6倍的倍数上采样图像。因此,RoI池化层的平均有效步进为约10像素。在多尺度设置中,我们使用5中指定的相同的五个尺度以方便与SPPnet进行比较。但是,我们以2000像素为上限,以避免GPU内存不足。表7显示了当使用一个或五个尺度进行训练和测试时的模型S和M的结果。也许在5中最令人惊讶的结果是单尺度检测几乎与多尺度检测一样好。我们的研究结果能证明他们的结果:深度卷积网络擅长直接学习尺度不变性。多尺度方法消耗大量的计算时间仅带来了很小的mAP增加(表7)。在VGG16(模型L)的情况下,我们受限于实施细节仅能使用单个尺度。然而,它得到了66.9%的mAP,略高于R-CNN的66.0%19,尽管R-CNN在每个候选区域被缩放为规范大小,在意义上使用了“无限”尺度。由于单尺度处理提供速度和精度之间的最佳折衷,特别是对于非常深的模型,本小节以外的所有实验使用单尺度训练和测试,像素。
    5.3 Do we need more training data?
    当提供更多的数据时,好的检测器的效果会变好。DPM很容易就饱和了,这里进行了一系列的数据增加的工作,mAP会有所提高。

    5.4 DO SVMS outperform softmax?
    Fast rcnn使用的是softmax分类器,rcnn和sppnet使用的是svm。这里进行了几组对照实验,来看一下哪一种更好。对于fast rcnn来说,这三种网络中,都是softmax更好,不过好的不多。这论证了一次微调比之前多级训练方法来说已经是足够了。

    5.5 Are more proposals always better?
    Not yet

    6 Conclusion
    本文提出Fast R-CNN,一个对R-CNN和SPPnet干净,快速的更新。 除了报告目前的检测结果之外,我们还提供了详细的实验,希望提供新的见解。 特别值得注意的是,稀疏目标候选区域似乎提高了检测器的质量。 过去探索这个问题过于昂贵(在时间上),但Fast R-CNN使其变得可能。当然,可能存在允许dense box执行以及稀疏候选框的尚未发现的技术。这样的方法如果被开发,可以帮助进一步加速目标检测。

    展开全文
  • fast RCNN

    2018-04-08 17:23:52
    继2014年的RCNN之后,Ross Girshick在15年推出Fast RCNN,构思精巧,流程更为紧凑,大幅提升了目标检测的速度。在Github上提供了源码。同样使用最大规模的网络,Fast RCNNRCNN相比,训练时间从84小时减少为9.5小时...

    继2014年的RCNN之后,Ross Girshick在15年推出Fast RCNN,构思精巧,流程更为紧凑,大幅提升了目标检测的速度。在Github上提供了源码

    同样使用最大规模的网络,Fast RCNN和RCNN相比,训练时间从84小时减少为9.5小时,测试时间从47秒减少为0.32秒。在PASCAL VOC 2007上的准确率相差无几,约在66%-67%之间.

    思想

    基础:RCNN

    简单来说,RCNN使用以下四步实现目标检测:
    a. 在图像中确定约1000-2000个候选框
    b. 对于每个候选框内图像块,使用深度网络提取特征
    c. 对候选框中提取出的特征,使用分类器判别是否属于一个特定类
    d. 对于属于某一特征的候选框,用回归器进一步调整其位置
    更多细节可以参看这篇博客

    改进:Fast RCNN

    Fast RCNN方法解决了RCNN方法三个问题:

    问题一:测试时速度慢
    RCNN一张图像内候选框之间大量重叠,提取特征操作冗余。
    本文将整张图像归一化后直接送入深度网络。在邻接时,才加入候选框信息,在末尾的少数几层处理每个候选框。

    问题二:训练时速度慢
    原因同上。
    在训练时,本文先将一张图像送入网络,紧接着送入从这幅图像上提取出的候选区域。这些候选区域的前几层特征不需要再重复计算。

    问题三:训练所需空间大
    RCNN中独立的分类器和回归器需要大量特征作为训练样本。
    本文把类别判断和位置精调统一用深度网络实现,不再需要额外存储。

    以下按次序介绍三个问题对应的解决方法。

    特征提取网络

    基本结构

    图像归一化为224×224直接送入网络。

    前五阶段是基础的conv+relu+pooling形式,在第五阶段结尾,输入P个候选区域(图像序号×1+几何位置×4,序号用于训练)?。
    这里写图片描述

    注:文中给出了大中小三种网络,此处示出最大的一种。三种网络基本结构相似,仅conv+relu层数有差别,或者增删了norm层。

    roi_pool层的测试(forward)

    roi_pool层将每个候选区域均匀分成M×N块,对每块进行max pooling。将特征图上大小不一的候选区域转变为大小统一的数据,送入下一层。
    这里写图片描述

    roi_pool层的训练(backward)

    首先考虑普通max pooling层。设xi

    为输入层的节点,yj

    为输出层的节点。

    Lxi={0Lyjδ(i,j)=falseδ(i,j)=true

    其中判决函数δ(i,j)

    表示i节点是否被j节点选为最大值输出。不被选中有两种可能:xi不在yj范围内,或者xi

    不是最大值。

    对于roi max pooling,一个输入节点可能和多个输出节点相连。设xi

    为输入层的节点,yrj为第r个候选区域的第j

    个输出节点。
    这里写图片描述

    Lxi=Σr,jδ(i,r,j)Lyrj

    判决函数δ(i,r,j)

    表示i节点是否被候选区域r的第j个节点选为最大值输出。代价对于xi

    的梯度等于所有相关的后一层梯度之和。

    网络参数训练

    参数初始化

    网络除去末尾部分如下图,在ImageNet上训练1000类分类器。结果参数作为相应层的初始化参数。
    这里写图片描述
    其余参数随机初始化。

    分层数据

    在调优训练时,每一个mini-batch中首先加入N张完整图片,而后加入从N张图片中选取的R个候选框。这R个候选框可以复用N张图片前5个阶段的网络特征。
    实际选择N=2, R=128。

    训练数据构成

    N张完整图片以50%概率水平翻转。
    R个候选框的构成方式如下:

    类别 比例 方式
    前景 25% 与某个真值重叠在[0.5,1]的候选框
    背景 75% 与真值重叠的最大值在[0.1,0.5)的候选框

    分类与位置调整

    数据结构

    第五阶段的特征输入到两个并行的全连层中(称为multi-task)。
    这里写图片描述
    cls_score层用于分类,输出K+1维数组p

    ,表示属于K类和背景的概率。
    bbox_prdict层用于调整候选区域位置,输出4*K维数组t

    ,表示分别属于K类时,应该平移缩放的参数。

    代价函数

    loss_cls层评估分类代价。由真实分类u

    对应的概率决定:

    Lcls=logpu

    loss_bbox评估检测框定位代价。比较真实分类对应的预测参数tu

    和真实平移缩放参数为v

    的差别:

    Lloc=Σ4i=1g(tuivi)

    g为Smooth L1误差,对outlier不敏感:
    g(x)={0.5x2|x|0.5|x|<1otherwise

    总代价为两者加权和,如果分类为背景则不考虑定位代价:

    L={Lcls+λLlocLclsuu

    源码中bbox_loss_weights用于标记每一个bbox是否属于某一个类

    全连接层提速

    分类和位置调整都是通过全连接层(fc)实现的,设前一级数据为x

    后一级为y,全连接层参数为W,尺寸u×v

    。一次前向传播(forward)即为:

    y=Wx

    计算复杂度为u×v

    W

    进行SVD分解,并用前t个特征值近似:

    W=UΣVTU(:,1:t)Σ(1:t,1:t)V(:,1:t)T

    原来的前向传播分解成两步:

    y=Wx=U(ΣVT)x=Uz

    计算复杂度变为u×t+v×t
    在实现时,相当于把一个全连接层拆分成两个,中间以一个低维数据相连。
    这里写图片描述
    展开全文
  • fast rcnn

    2015-06-17 13:41:00
    fast rcnn开始训练和测试,rbg真是牛人,什么东西都整那么厉害,文章好,代码能力强。 总体来说,安装过程不复杂。就是代码的地方确实很有技巧的。 输入层,首先解决了很多人没有解决的问题,他输入的是一张图对应...

    fast rcnn开始训练和测试,rbg真是牛人,什么东西都整那么厉害,文章好,代码能力强。

    总体来说,安装过程不复杂。就是代码的地方确实很有技巧的。

    输入层,首先解决了很多人没有解决的问题,他输入的是一张图对应多个label,甚至是多维的。如果做别的工作可以在他的基础上改进。

    然后就是end to end的训练,确实证实了end to end的好处。

    最后还要回到他的代码上,代码的编写很赞,roipooling写的很赞。如果说io输入层写的稍微复杂了,毕竟他把所有的数据预处理都包含到一起了,那roipooling真的是把核心的东西凝练在一起了。佩服。

     

    转载于:https://www.cnblogs.com/jianyingzhou/p/4583051.html

    展开全文
  • 继2014年的RCNN之后,Ross Girshick在15年推出Fast RCNN,构思精巧,流程更为紧凑,大幅提升了目标检测的速度。在Github上提供了源码。 同样使用最大规模的网络,Fast RCNNRCNN相比,训练时间从84小时减少为9.5...
  • Rcnn,FastRcnn, FasterRcnn

    2019-11-25 22:46:24
    三篇深度学习图像处理方向必读论文---rcnn,fastrcnn,fasterrcnn 这三篇是rcnn的提出和发展,fasterrcnn是当下图像识别最好的模型之一
  • Fast RCNN和Faster RCNN

    2018-01-22 16:12:09
    Fast RCNN和Faster RCNN代码
  • fastRCNN

    2020-04-06 17:23:13
    参考: 从结构、原理到实现,Faster R-CNN全解析(原创) RCNN到Faster R-CNN笔记 一文读懂Faster RCNN Keras搭建Faster-RCNN目标检测平台 使用labelimg进行目标检测数据集标注 windows下使用labelImg标注图像 链接...
  • RCNN,FastRCNN和FasterRCNN论文原文,介绍了经典的双阶段目标检测算法RCNN及其改进,属于深度学习必读论文
  • 授权转载自公众号:论智(jqr_AI),转载联系出处。每次丢了东西,我们都希望有一种方法能快速...在这篇文章中,我们会进一步地了解这些用在目标检测中的算法,首先要从RCNN家族开始,例如RCNNFast RCNN和Faster RCNN...
  • fastrcnn

    2018-06-04 21:40:39
    https://blog.csdn.net/z1102252970/article/details/50822467https://weibo.com/p/230418855a82cd0102vnjq?sudaref=www.baidu.com&amp;display=0&amp;retcode=6102...
  • Fast RCNN

    2017-06-12 15:16:24
    基本网络:输入为224x224的图片大小,输出为(k+1)x4的的回归坐标以及k+1的类别概率对于原始图片,利用selective search等算法提取候选框,归一化至固定大小。 对于训练样本,输入即可训练出网络 ...
  • RCNN-FastRCNN-FasterRCNN-MaskRCNN-TensorMask论文打包 2014 Rich feature hierarchies for accurate object detection and semantic segmentation 2015 Fast R-CNN 2016 Faster R-CNN: Towards Real-Time Object ...
  • 2013年的RCNN,ICCV2015年的fast rcnn,以及NIPS2015的faster rcnn逐步确定了two stage目标检测的框架。 本文将会主要讲述三个方面的内容: 稍微对比一下rcnnfast rcnn到faster rcnn的原理 以mmdetection中的...
  • 代码FastRcnn

    2018-01-01 12:06:06
    引用于github的fast rcnn代码,实现论文中 的目标检测程序,安装readme进行安装即可
  • RCNNFast RCNN、Faster RCNN对比

    千次阅读 2019-08-27 10:26:17
    RCNNFast RCNN、Faster RCNN详解参考以下文章: RCNN:https://blog.csdn.net/qq_32172681/article/details/99105617 Fast RCNN:https://blog.csdn.net/qq_32172681/article/details/99194233 Faster RCNN:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,072
精华内容 1,228
关键字:

fastrcnn