OD-Model【2】:Fast R-CNN

系列文章目录

目标检测之RCNN:
OD-Model【1】:R-CNN
目标检测之Fast RCNN:
OD-Model【2】:Fast R-CNN
目标检测之Faster RCNN:
OD-Model【3】:Faster R-CNN



前言

本文主要对论文进行解读,并解释有关Fast RCNN框架的部分

原论文链接:
Fast R-CNN


1. Abstract & Introduction

1.1. Abstract

本文提出了一种快速的基于区域的卷积网络方法(Fast R-CNN)用于目标检测。Fast R-CNN建立在以前使用的深卷积网络有效地分类目标的成果上。相比于之前的研究工作,Fast R-CNN采用了多项创新提高了训练和测试速度,同时也提高了检测准确度。

1.2. Introduction

复杂性的产生是因为检测需要目标的精确定位,这就导致两个主要的难点。首先,必须处理大量候选目标位置(通常称为“proposals”)。 第二,这些候选框仅提供粗略定位,其必须被精细化以实现精确定位。 这些问题的解决方案经常会影响速度、准确性或简洁性。

在本文中,我们简化了最先进的基于卷积网络的目标检测器的训练过程。我们提出一个单阶段训练算法,联合学习候选框分类和修正他们的空间位置。

1.2.1. R-CNN and SPPnet

基于区域的卷积网络方法(RCNN)通过使用深度卷积网络来分类目标候选框,获得了很高的目标检测精度。然而,R-CNN具有明显的缺点:

  1. 训练过程是多级pipeline。R-CNN首先使用目标候选框对卷积神经网络使用log损失进行fine-tunes。然后,它将卷积神经网络得到的特征送入SVM。这些SVM作为目标检测器,替代通过fine-tunes学习的softmax分类器。在第三个训练阶段,学习bounding-box回归器。
  2. 训练在时间和空间上是的开销很大。对于SVM和bounding-box回归训练,从每个图像中的每个目标候选框提取特征,并写入磁盘。对于VOC07 trainval上的5k个图像,使用如VGG16非常深的网络时,这个过程在单个GPU上需要2.5天。这些特征需要数百GB的存储空间。
  3. 目标检测速度很慢。在测试时,从每个测试图像中的每个目标候选框提取特征。用VGG16网络检测目标时,每个图像需要47秒(在GPU上)。

R-CNN很慢是因为它为每个目标候选框进行卷积神经网络前向传递,而没有共享计算。SPPnet网络[11]提出通过共享计算加速R-CNN。SPPnet计算整个输入图像的卷积特征图,然后使用从共享特征图提取的特征向量来对每个候选框进行分类。通过最大池化将候选框内的特征图转化为固定大小的输出(例如6×6)来提取针对候选框的特征。多输出尺寸被池化,然后连接成空间金字塔池。SPPnet在测试时将R-CNN加速10到100倍。由于更快的候选框特征提取,训练时间也减少了3倍。

SPP网络也有显著的缺点。像R-CNN一样,训练过程是一个多级pipeline,涉及提取特征、使用log损失对网络进行fine-tuning、训练SVM分类器以及最后拟合检测框回归。特征也要写入磁盘。但与R-CNN不同,fine-tuning算法不能更新在空间金字塔池之前的卷积层。不出所料,这种局限性(固定的卷积层)限制了深层网络的精度。

1.2.2. Contributions

本文提出一种新的训练算法,修正了R-CNN和SPPnet的缺点,同时提高了速度和准确性。因为它能比较快地进行训练和测试,我们称之为Fast R-CNN。Fast RCNN方法有以下几个优点:

  1. 比R-CNN和SPPnet具有更高的目标检测精度(mAP)
  2. 训练是使用多任务损失的单阶段训练
  3. 训练可以更新所有网络层参数
  4. 不需要磁盘空间缓存特征

2. Fast R-CNN architecture and training

2.1. Algorithm process

Fast R-CNN算法流程可分为3个步骤:

  • 一张图像生成1000~2000个候选区域(使用Selective Search方法)
  • 将图像输入网络得到相应的特征图,将SS算法生成的候选框投影到特征图上获得相应的特征矩阵
  • 将每个特征矩阵通过ROI(Region of Interest) pooling层缩放到7 x 7 大小的特征图,接着将特征图展平通过一系列全连接层得到预测结果
    在这里插入图片描述

2.2. Architecture

在这里插入图片描述

2.2.1. Calculating image features

一次性计算整张图像特征

  • R-CNN依次将候选框区域输入卷积神经网络得到特征

    • 得到SS算法得到2000个候选框,就需要进行2000次正向传播
      • 存在大量冗余
      • 重叠部分计算一次即可
        在这里插入图片描述
  • Fast-RCNN将整张图像送入网络,紧接着从特征图像上提取相应的候选区域。这些候选区域的特征不需要再重复计算

    • 参考SPPNet
    • 从每个候选区域,通过原图与特征图的映射关系,在特征图上获取特征矩阵
      • 避免候选区域的重复计算
      • 实际上就是把RCNN的第一步和第二部的一部分融合了
      • 先计算feature map,再从feature map中选,节省空间
        在这里插入图片描述

2.2.2. Mini-batch sampling

训练数据的采样

  • 正样本
    候选框中确实存在,所需检测的目标的样本
  • 负样本
    背景,里面没有我们想要检测的目标
  • 分类原因
    假如此时训练一个猫狗分类器,猫的样本数量远大于狗的,即数据不平衡时,网络在预测的过程中就会更偏向于猫,但这是不对的。更极端点,如果数据集中只有猫,预测的结果将明显有误。
    • 如果网络中训练的只有正样本,那么网络就会有很大的概率,认为我们的候选区域是我们所需要检测的目标,即使框中只是一个背景,它也会认为那个是我们需要检测的目标
    • 可以理解为,因为样本的不平均,导致一些不是待分类的目标的特征,被网络误认为是该目标的特征而进行训练

在微调期间,每个SGD的小批量由N=2个图像构成,均匀地随机选择(如通常的做法,我们实际上迭代数据集的排列)。 我们使用大小为R=128的小批量,对于每张图片,从2000个候选框中,采集64个候选区域(RoI)。只要候选框与真值的目标边界框的IoU大于0.5,就认为该候选框为正样本。当然,并不是使用所有的正样本,而是从正样本中随机采样一部分。这些RoI只包括用前景对象类标记的样本,即 u ≥ 1 u\ge 1 u1。剩余的RoI从候选框中随机采样,该候选框与检测框真值的最大IoU在区间[0.1, 0.5]。这些是背景样本,即负样本,并用u=0标记。阈值的下届设置为0.1的原因,是获取和真实bounding box交并比至少为0.1的RoI负样本,即和真实目标有一定的重叠,可以让模型学习较难的负样本。

2.2.3. The RoI pooling layer

在这里插入图片描述
获得训练样本后,将用于训练样本的候选框通过RoI pooling层,缩放到统一的尺寸

举例来说,简化一张图片的特征矩阵后,如下图所示:
在这里插入图片描述
将每一张图片划分成 7 x 7 = 49 等份,对每一等分的像素块做 max pooling,得到一个7 x 7大小的特征矩阵(此时忽略了深度channel),所有的channel都做同样的操作。这样做的好处是,不限制输入图像的尺寸。

2.2.4. Classifier

输出N+1个类别的概率(N为检测目标的种类,1为背景,共N+1个节点
在这里插入图片描述
将一张图片输入到CNN网络中,得到一个feature map,根据映射关系,可以找到每一个框对应的特征矩阵,将特征矩阵通过RoI pooling层缩放到一个指定的尺寸。之后,将矩阵做flatten处理,并通过两个全连接层后得到RoI feature vector,在该向量的基础上,并联两个全连接层。第一个通道用于目标概率的预测。

此时,通过softmax进行处理,输出对应目标的概率(且输出的值满足概率分布,和为1)

2.2.5. Bounding box regression

输出对应N+1个类别的候选边界框回归参数 ( d x , d y , d w , d h ) (d_x, d_y, d_w, d_h) (dx,dy,dw,dh),共 (N+1) x 4个节点

在这里插入图片描述
注意,每个类别都有4个参数:目标建议框的中心点的x偏移量、y偏移量,边界框高度的缩放因子、宽度缩放因子。通过这4个参数,可以使用如下公式,得到对应的边界框:

在这里插入图片描述

2.2.5. Multi-task loss

在这里插入图片描述

  • p p p 是分类器预测的softmax概率分布: p = ( p 0 , . . . , p k ) p = (p_0, ..., p_k) p=(p0,...,pk)
  • u u u 对应目标真实类别标签
    在这里插入图片描述
    • p u p_u pu 即分类器预测当前候选区域为为类别 u u u的概率
    • Cross Entropy Loss交叉熵损失
      • 针对多分类问题(softmax输出,所有输出概率和为1)
        在这里插入图片描述
      • 针对二分类问题(sigmoid输出,每个输出节点之间互不相干)
        在这里插入图片描述
      • o i ∗ o_i^* oi 只有在正确的标签位置为1,其他位置为0(one-hot编码)
        • 所以此时 H = − 1 × l o g ( u ) H = -1 \times log(u) H=1×log(u) ,即对应的分类损失
  • t u t^u tu 对应边界框回归器预测的对应类别 u u u的回归参数 ( t x u , t y u , t w u , t h u ) (t_x^u, t_y^u, t_w^u, t_h^u) (txu,tyu,twu,thu)
  • v v v 对应真实目标的边界框回归参数 ( v x , v y , v w , v h ) (v_x, v_y, v_w, v_h) (vx,vy,vw,vh)
    在这里插入图片描述
    • [ u ≥ 1 ] [u \ge 1] [u1]是艾弗森括号
      • 如果括号内的条件满足,则该值为1,不满足则为0
      • u是待检测的目标的真实标签
        • u ≥ 1 u \ge 1 u1 表示候选区域属于所需检测的某一个类别,对应正样本,采取边界框回归损失
        • u < 1 u < 1 u<1 表示候选区域是背景,即负样本,不存在边界框回归损失
    • 有关 v v v的计算
      在这里插入图片描述
      • v x = ( G x − P x ) / P w v_x = (G_x - P_x) / P_w vx=(GxPx)/Pw
      • v y = ( G y − P y ) / P h v_y = (G_y - P_y) / P_h vy=(GyPy)/Ph
      • v w = l n ( G w ^ / P w ) v_w = ln(\hat{G_w} / P_w) vw=ln(Gw^/Pw)
      • v h = l n ( G h ^ / P h ) v_h = ln(\hat{G_h} / P_h) vh=ln(Gh^/Ph)

总结

本文提出Fast R-CNN,一个对R-CNN和SPPnet更新的简洁、快速版本。除了报告目前最先进的检测结果之外,我们还提供了详细的实验,希望提供新的思路。特别值得注意的是,稀疏目标候选区域似乎提高了检测器的质量。过去这个问题代价太大(在时间上)而一直无法深入探索,但Fast R-CNN使其变得可能。当然,可能存在未发现的技术,使得密集框能够达到与稀疏候选框类似的效果。如果这样的方法被开发出来,则可以帮助进一步加速目标检测。

视频资料
翻译参考

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zzzyzh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值