Fast R-CNN

无人久伴 提交于 2019-11-25 19:35:43

论文链接

Abstract

作者提出的模型叫做Fast RCNN,与RCNN相比,主要是在训练的速度和精度上做了提升。

1. Introduction

已经有结论证明,深度的卷积网络可以明显的提升图像分类和目标检测的效果。在目标检测中,主要优化以下两个问题:

  1. 需要处理大量的候选框
  2. 这些候选框仅仅提供了大致的位置,需要对每个候选框进行精确的调整。

在这篇文章中,作者把目标检测的过程流程化了,提出了一种single-stage的训练算法,这种算法把分类锚框定位结合在一起了。

1.1 R-CNN and SPPnet

RCNN的不足:

  1. Training is a multi-stage pipeline:训练步骤繁琐:
    1. 首先要使用log loss损失函数对ConvNet网络进行fine-tuning
    2. 未选择softmax而是使用SVM拟合ConvNet的特征
    3. 拟合bounding-box的位置
  2. 训练时花费大量的时间和空间。 For SVM and bounding-box regressor training, features are extracted from each object proposal in each image and written to disk.
  3. Object detection is slow. 因为它在执行ConvNet的过程中,没有共享计算

1.2.Contributions

2.Fast R-CNN architecture and training

Fast-RCNN的结构图如下:


R-CNN的结构如下:


首先Fast R-CNN把整张图片当做一个输入,用大量的卷积层和max pooling层提取特征,然后使用Rol层提取固定长度的特征向量。每个特征向量都会放到fully connect 层中,这个fully connect 层有两个分支,一个通过softmax进行分类。一个对坐标进行回归。

2.1.The RoI pooling layer

ROI使用max pooling将features转换成固定大小的feature map(H×W)(H \times W),这里的(H×W)(H \times W)是不依赖于任何一个RoI的超参数,在本文中,RoI由四个值进行描述,分别是(r,c,h,w)(r,c,h,w)r,cr,c代表左上角的坐标,h,wh,w代表高和宽。

在普通的池化层中,通过设置池化窗口、填充和步幅来控制输出形状。

但是RoI(regions of interest)的工作机制则不同,它的操作为:假设RoI层的输出大小要求为H×WH \times W,把h×wh \times w的RoI区域划分成H×WH \times W的网格,然后选择h/H×w/Wh/H \times w/W的窗口,对每个区域进行max pooling操作。

举个栗子:
我们的RoI区域为3×33 \times 3大小的,要求该层的输出为2×22\times 2大小的,那么,根据h/H×w/Wh/H \times w/W的要求,将3×33 \times 3划分成4个grid:

  • 第1个grid是2×22 \times 2
  • 第2个grid是1×21 \times 2
  • 第3个grid是2×12 \times 1
  • 第4个grid是1×11 \times 1
    对于每一个grid,我们都选用一个2×22\times 2大小的池化层进行max pooling操作。

2.2.Initializing from pre-trained networks

作者使用了3个预训练模型,每一个都有5层max pooling和5到13个的卷积层,在预训练之前,还有三个transformations。具体操作如下:

  1. 首先用RoI pooling层取代最后一个max pooling层,在VGG16的model中,RoI pooling层的H=W=7H=W=7
  2. 将预训练网络的最后一个全连接层和softmax层替换为两个同级的层(一个用作回归一个用作分类)
  3. 将 a list of images and a list of RoIs 作为网络的输入。

2.3.Fine-tuning for detection

作者认为,RCNN与SPPnet 效率太低的原因是他们的训练样本来自于不同的图片,这就导致了每一个RoI都可能有很大的感知野(经常是整张图片)。

针对这个问题,作者提出了特征共享的方法。在fast-CNN中,选用SGD方法优化,首先对N个图片进行采样,每个图片有R/NR/N个RoIs,值得注意的是,RoIs来自于同一张图片,因此在相同的参数下,由于RoI是相互关联的,所以迭代的次数要少于R-CNN。

另外一个值得注意的点是,Fast R-CNN在训练时将fine-tuning和softmax classifier和bounding=box regression结合在一起了,而不是单独训练多个分类器和回归方法。

2.3.1 Multi-task loss.

A Fast R-CNN network 有两个loss。

  1. 用于类别的loss。假设有KK类,那么通过全连接层+softmax生成K+1K+1(一个背景)
  2. 用于回归。tk=(txk,tyk,twk,thk)t^k=(t^k_x,t^k_y,t^k_w,t^k_h)描述K个目标的类别,回归的计算公式地址在这里

有了分类的loss和坐标的loss,那么整个网络的loss值可以用这个公式计算:


在上式中,真实的类别可以用uu来表示,真是的回归目标用vv来表示。那么,Lcls(p,u)=logpuL_{cls}(p,u)=-\log p_u代表:类别的loss值为生成类别uu概率的对数。

第二个loss值,则定义了类别uu的真是位置v=(vx,vy,vw,vh)v=(v_x,v_y,v_w,v_h),模型的输出值为tu=(txu,tyu,twu,thu)t^u=(t^u_x,t^u_y,t^u_w,t^u_h)。注意,这里当u=0u=0是代表背景。对于背景来说,是没有bounding-box。所以,对于bounding-box的loss为:


公式3降低了异常值对于最终结果的影响。另外,在公式1中的λ\lambda则控制着两个任务对于总的loss值的影响程度。一开始,我们正则化regression的为均值0,方差为1。

2.3.2 Mini-batch sampling

在fine-tuning阶段,每一个SGD的mini-batch都是由2个类的images中通过均匀分布随机构造得来的。其中, mini-batches of size R = 128,sampling 64 RoIs from each image,另外,对于RoIs的选择,则需要遵循如下规则,计算锚框与真实背景的 intersection over union(IoU)比例必须大于0.5,并且其分类不能使背景。与真实类别重合的class中,如果IoU为0.1到0.5之间的话,那么,认为是背景;The lower threshold of 0.1 appears to act as a heuristic for hard example mining [8].

另外,在训练阶段,图像有0.5的可能性会被横向拉伸(horizontally flipped )

2.3.3 Back-propagation through RoI pooling layers

在反向传播算法通过RoI层的时候,我们假设每一个mini-batch中只有一张图像(这种情况可以推广到mini-batch大于1的情况,因为各个image之间是相互独立的)。

The RoI pooling layer computes yrj=xi(r,j)y_{rj} = x_{i∗(r,j)}, in which i(r,j)=arg maxiR(r,j)xii∗(r,j) = \argmax_{i \in R(r,j)} x_i'. R(r,j)R(r,j) is the index set of inputs in the sub-window over which the output unit yrjy_{rj} max pools. A single xix_i may be assigned to several different outputs yrjy_{rj}.

假设xix_i是第ii个进入RoI层的值(第ii个样本),yrjy_{rj}代表第rr个RoI区域的第jj个输出(属于各个类别的概率)。我们的目标是计算yrj=xi(r,j)y_{rj}=x_{i*(r,j)}

这一段的主要目的就是说:RoI层就是为了找到第ii个输入对应的最有可能的RoI区域及其概率值(也就是第rr个RoI区域中的分类结果jj)

2.4 Scale invariance

我们探究了2种方法不变尺度的目标检测:

  1. “brute force” learning (普通的模式匹配算法)
    In the brute-force approach, each image is processed at a pre-defined pixel size during both training andtesting.

  2. image pyramids(影像金字塔由原始影像按一定规则生成的由细到粗不同分辨率的影像集。金字塔的底部是图像的高分辨率表示,也就是原始图像,而顶部是低分辨率的近似。最底层的分辨率最高,并且数据量最大,随着层数的增加,其分辨率逐渐降低,数据量也按比例减少。)百度百科

3.Fast R-CNN detection

3.1.Truncated SVD for faster detection

对于整张图片来说,在计算全连接层的计算时间要少于卷积层。同样的, for detection the number of RoIs to process is large and nearly half of the forward pass time is spent computing the fully connected layers.所以,作者使用了SVD方法去加速全连接层。

在这项方法中,SVD的公式为:


具体的加速方法参考这个:

  1. J. Xue, J. Li, and Y. Gong. Restructuring of deep neural networkacousticmodelswithsingularvaluedecomposition. In Interspeech, 2013
  2. E. Denton, W. Zaremba, J. Bruna, Y. LeCun, and R. Fergus. Exploitinglinearstructurewithinconvolutionalnetworksfor efficient evaluation. In NIPS, 2014

4.Main results

5. Design evaluation

5.1.Does multi-task training help?

为了证明多任务的训练是不是真的有助于提高精度,作者训练了仅仅用于分类基础网络,也就是将公式1中的λ\lambda设置为0.训练了一套参数。然后设置λ=1\lambda=1,在测试的时候不进行bounding-box的预测,对比了一下结果。

The improvement ranges from +0.8 to +1.1 mAP points, showing a consistent positive effect from multi-task learning.

5.2.Scale invariance: to brute force or finesse?

5.3.Do we need more training data?

5.4. Do SVMs outperform softmax?

5.5. Are more proposals always better?

5.6.Preliminary MSCOCO results

模型总结

  1. 与R-CNN相比,Fast R-CNN用来提取特征的卷积神经网络的输入是整个图像,而不是各个提议区域。而且,这个网络通常会参与训练,即更新模型参数。设输入为一张图像,将卷积神经网络的输出的形状记为1×c×h×w1 \times c \times h \times w
  2. 假设选择性搜索生成 nn个提议区域。这些形状各异的提议区域在卷积神经网络的输出上分别标出形状各异的兴趣区域。这些兴趣区域需要抽取出形状相同的特征(假设高和宽均分别指定为HHWW )以便于连结后输出。
  3. Fast R-CNN引入兴趣区域池化(region of interest pooling,RoI池化)层,将卷积神经网络的输出和提议区域作为输入,输出连结后的各个提议区域抽取的特征,形状为 n×c×H×Wn \times c \times H\times W
  4. 通过全连接层将输出形状变换为 n×dn \times d ,其中超参数 nn 取决于模型设计。
  5. 预测类别时,将全连接层的输出的形状再变换为 n×qn \times q 并使用softmax回归( qq 为类别个数)。预测边界框时,将全连接层的输出的形状变换为 n×4n \times 4 。也就是说,我们为每个提议区域预测类别和边界框。

参考链接

【目标检测】Fast R-CNN论文详解(Fast R-CNN)

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!