Fast R-CNN解读:单阶段,多任务完成检测

Title: Fast R-CNN(2015)
Link: paper , code
Tips:

  1. R-CNN and SPPnet 的缺点以及 Fast R-CNN 的优点(1.1)
  2. Fast R-CNN 的框架及检测流程(2,3)
  3. RoI 的含义(2.1)
  4. 使用预训练网络初始化的思想,如何把已有网络改成需要的网络(2.2)
  5. 尺度不变的检测(2.4)
  6. 如何分析实验结果(4)
  7. 如何设计对比实验(5)

Summary:

R-CNN 问题:

  • R-CNN 的训练是多阶段的(multi-stage):预训练 CNN→针对检测微调→训练分类器→训练边界框回归器
  • 时间空间消耗大:为了训练 SVM 分类器和边界框回归器,每个区域的特征都要提取出来,并且存到磁盘上
  • 检测慢:检测时需要提取每个区域的特征,但生成的区域有重叠,所以计算也有重叠。

Fast R-CNN 创新点:

  • 与 R-CNN、SPPnet 相比有更高的检测精度(mAP)
  • 训练是单阶段的(single-stage),损失是多任务的(multi-task),指把预训练的 CNN 针对检测任务微调后,分类和回归任务能一起完成
  • 训练可以更新所有网络层
  • 特征缓存不需要磁盘存储

相比 R-CNN 模块的改变:

  • 网络输入:图片组以及每幅图片的一组 RoI
  • CNN 模块:最后一个最大池化层由 RoI 池化层代替
  • 分类模块:Fast R-CNN 使用 softmax classifier,R-CNN 和 SPPnet 使用 one-vs-rest linear SVMs。
  • 分类和定位:CNN 网络的最后一个全连接层和 softmax 替换为两个同级层,R-CNN 是独立的两个模块,需要单独训练

Fast R-CNN 检测流程的改变:

  • R-CNN 先用 SS 从图片生成 proposal(然后图片就不用了),把 proposal 输入CNN 提取特征,因为生成的区域有重叠,所以计算重复;Fast R-CNN 先用 SS 从图片生成 proposal,兵分两路,先把整幅图输入 CNN 一次性提取特征生成 feature map,对于每个 object proposal,用一个 RoI 池化层从上一层的 feature map 中提取定长的特征向量。
  • R-CNN 对分类和回归模块分别训练,Fast R-CNN 网络末尾采用并行的两个全连接层,可同时输出分类结果和窗口回归结果,实现了 end-to-end 的多任务训练

Fast R-CNN 训练流程:

  • 有监督的预训练,得到 CNN
  • 特定领域的微调:首先改变模型,就是上面提到的输入改变,CNN 的 ROI 池化引入,还有分类回归模块的改变;
  • 接着,输入图片和区域后,就能实现端到端的多任务训练,不需要单独训练分类和回归模块。

Fast R-CNN 检测流程:

  • 输入一张多目标图像
  • 采用 selective search 得到的预选区域
  • 用卷积层和池化层处理 whole image,生成 feature map;
  • 对于每个 object proposal,用一个region of interest (RoI) 池化层从上一层的 feature map 中提取定长的特征向量;
  • 同时完成分类回归任务:每个 feature vector 送入一系列全连接层,这些全连接层最后会分支成 two sibling output layers: 一个可以在K个对象类以及一个笼统的“背景”类上生成 softmax 概率估计;另一层为 K 个对象类中的每一个输出四个实数值(编码精确的边界框位置)。

文章目录

    • Abstract
    • 1. Introduction
      • 1.1. R-CNN and SPPnet
      • 1.2. Contributions
    • 2. Fast R-CNN architecture and training
      • 2.1. The RoI pooling layer
      • 2.2. Initializing from pre-trained networks
      • 2.3. Fine-tuning for detection Training
      • 2.4. Scale invariance
    • 3. Fast R-CNN detection
      • 3.1. Truncated SVD for faster detection
    • 4. Main results
      • 4.1. Experimental setup
      • 4.2. VOC 2010 and 2012 results
      • 4.3. VOC 2007 results
      • 4.4. Training and testing time
      • 4.5. Which layers to fine-tune?
    • 5. Design evaluation
      • 5.1. Does multi-task training help?
      • 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?
    • 6. Conclusion

Abstract

这篇文章提出了一种基于快速区域的卷积用于物体检测的网络方法(Fast R-CNN)。Fast R-CNN以先前的工作为基础,使用深度卷积网络对目标提议进行有效分类。与以前的工作相比,Fast R-CNN采用了多项创新技术来提高训练和测试速度,同时还提高了检测精度。

1. Introduction

与图像分类相比,对象检测是一项更具挑战性的任务,需要更多复杂的方法来解决。

检测的复杂性来源于精确定位,产生的挑战有:必须处理多个候选对象位置(通常称为“proposals”)。其次,这些候选对象仅提供粗略的 localization,必须对其进行细化以实现精确的localization 。这些问题的解决方案通常会损害速度,准确性或简便性。

我们提出了一种 single-stage 训练算法,该算法可共同学习以对 object proposal 进行分类并优化其空间位置。

1.1. R-CNN and SPPnet

R-CNN(Region-based Convolutional Network method) 通过使用深度卷积网络给对象 proposal 分类得到了不错的检测准确率,但是它也有 drawbacks

  • 训练是多阶段的流程;
  • 时间空间消耗大;
  • 检测慢(网络为每个 proposal 传递,而不是共享计算)。

SPPnets(Spatial pyramid pooling networks) 通过共享计算加速 RNN,但是它也有 drawbacks

  • 训练是多阶段的流程;
  • 特征需要写回磁盘,时间空间花费大;
  • 无法更新空间金字塔池之前的卷积层,此限制(固定的卷积层)限制了网络的准确性。

1.2. Contributions

这篇文章提出了一个新算法—— Fast R-CNN,修正了 R-CNN 和 SPPnet 的缺点,还提高了速度和准确性。

Advantages:

  • 与 R-CNN、SPPnet 相比有更高的检测精度(mAP)
  • 训练是单阶段的(single-stage),损失是多任务的(multi-task)
  • 训练可以更新所有网络层
  • 特征缓存不需要磁盘存储

2. Fast R-CNN architecture and training

Fast R-CNN解读:单阶段,多任务完成检测_第1张图片
图1 是网络框架,整个网络流程如下

  1. 输入 whole image和一些 object proposals (红框,selective search 得到的预选区域);
  2. 用卷积层和池化层处理 whole image,生成 feature map;
  3. 对于每个 object proposal,用一个region of interest (RoI) 池化层从上一层的 feature map 中提取定长的 feature vector;
  4. 每个 feature vector 送入一系列全连接层(fc layer);
  5. 这些全连接层最后会分支成 two sibling output layers: 一个可以在K个对象类以及一个笼统的“背景”类上生成softmax概率估计;另一层为 K 个对象类中的每一个输出四个实数值(编码精确的边界框位置)。

2.1. The RoI pooling layer

RoI池化层使用 max pooling 把 feature map 变成具有固定空间范围 H×W 的小特征图。

在本文中,RoI是进入转换特征图的矩形窗口。每个RoI由一个四元组(r,c,h,w)定义,该四元组指定其左上角(r,c)以及其高度和宽度(h,w)。

RoI 层只是 SPPnet 中使用的空间金字塔池化层的特殊情况,其中仅一个金字塔层。

2.2. Initializing from pre-trained networks

使用三个经过预训练的ImageNet 网络进行实验,每个网络具有五个最大池化层以及五个到十三个卷积层。

当预训练的网络初始化Fast R-CNN网络时,它将经历三个转换

  1. 最后一个最大池化层由RoI池化层代替
  2. 网络的最后一个全连接层和softmax替换为前面描述的两个同级层
  3. 修改网络输入:图片组以及每幅图片的一组 RoI。

2.3. Fine-tuning for detection Training

在Fast R- CNN训练中,对随机梯度下降(SGD)小批次进行分层采样。

除分层采样外,Fast R-CNN使用简化的训练过程和一个微调阶段,可共同优化 softmax分类器和 bounding-box 回归器,而不是分三个阶段训练 softmax 分类器,SVM和回归器。

具体细节如下:

Multi-task loss

Fast R-CNN网络具有两个同级输出层。一个判断类别 ,一个输出位置(四元组)。

每个 RoI 都有 ground-truth 标签(class u 和 bounding-box regression target v), multi-task loss L 把分类和 bounding-box 的回归任务结合起来(参数 λ 设为 1,当 RoI 为背景时参数μ为0)

在这里插入图片描述
其中定位任务的损失如下:
在这里插入图片描述
在这里插入图片描述

Mini-batch sampling

图片采取 N=2 的随机采样。训练时图片以0.5的概率水平翻转,除此之外,没有用到数据增强策略。

RoI 采取 R = 128 的采样,每张图片选择 64个 RoI:

25% 的 RoI 从与边界框的 ground-truth 至少有 0.5 Iou 的 object proposals 选取(因为重叠部分多,所以包含前景,即 μ ≥ 1),其余的 RoI 从那些和 GT 重叠少(Iou<0.5)的 object proposals 选取(这些就是背景,μ = 0)

Back-propagation through RoI pooling layers
反向传播通过RoI池层传递导数。

backwards function:
在这里插入图片描述

2.4. Scale invariance

我们探索了两种实现尺度不变物体检测的方法:
(1)通过“蛮力”学习和(2)通过使用图像金字塔。

在蛮力方法中,在训练和测试期间,每个图像均以预定义的像素大小进行处理。网络必须直接从训练数据中学习尺度不变对象检测。

相比之下,多尺度方法通过图像金字塔为网络提供近似的尺度不变性。在测试时,图像金字塔用于近似缩放每个 object proposal 的尺寸。

3. Fast R-CNN detection

一旦把 R-CNN 调好,检测就相当于“拿到通行证”。

检测过程

  • 将图像(或图像金字塔,编码为图像列表)和 R 个object proposals 列表作为输入进行评分;
  • 对于每个测试RoI r,网络都会输出一个类别后验概率分布 p 和相对于 r 的一组预测边界框偏移量;
  • 使用估计的概率将检测置信度分配给每个对象类别 k 的RoI 。然后,使用R-CNN的算法和设置为每个类别独立执行非最大抑制。

3.1. Truncated SVD for faster detection

Fast R-CNN解读:单阶段,多任务完成检测_第2张图片
对于全图像分类,与卷积层相比,计算完全连接的层所花费的时间少。
相反,用于检测的RoI数量很大,并且前向通过时间的近一半花费在计算全连接的层上

通过使用截断的SVD压缩,可以轻松地加速大型全连接层。

因式分解:使用SVD将由u×v权重矩阵W参数化的图层近似分解
在这里插入图片描述
当RoI数量很大时,这种简单的压缩方法可以提供良好的加速效果。

4. Main results

三个主要结果支持了文章的贡献:

  1. State-of-the-art mAP on VOC07, 2010, and 2012
  2. Fast training and testing compared to R-CNN, SPPnet
  3. Fine-tuning conv layers in VGG16 improves mAP

4.1. Experimental setup

使用了网上的三个预训练的 ImageNet 模型 (Link),根据网络规模分别命名为S,M,L。

4.2. VOC 2010 and 2012 results

实验结果如下,Fast R-CNN 简称为 FRCN。
Fast R-CNN解读:单阶段,多任务完成检测_第3张图片
Fast R-CNN 以 65.7% 的 mAP 在 VOC12 上取胜。
Fast R-CNN解读:单阶段,多任务完成检测_第4张图片
VOC10 上,与Fast R-CNN相比,SegDeepM实现了更高的mAP(67.2%对66.1%),SegDeepM接受了VOC12训练和分段注释的训练。

当使用扩大的07 ++ 12训练集时,Fast R-CNN的 mAP 增加到 68.8%,超过SegDeepM。

4.3. VOC 2007 results

在VOC07上,我们将Fast R-CNN与R-CNN和SPPnet进行了比较。
Fast R-CNN解读:单阶段,多任务完成检测_第5张图片
与SPPnet相比,Fast R-CNN的改进表明,即使Fast R-CNN使用单尺寸的训练和测试,对conv层进行微调也可以在mAP方面实现较大的改进(从63.1%到66.9%)

4.4. Training and testing time

快速的训练和测试时间是第二个主要结果。

对于VGG16(L),快速R-CNN处理图像的速度比不带SVD截断的R-CNN快146倍,使用SVD则快213倍。
Fast R-CNN解读:单阶段,多任务完成检测_第6张图片
截断的SVD可以将检测时间减少30%以上,而且mAP的下降很少(0.3个百分点),并且在模型压缩后无需执行其他微调。

4.5. Which layers to fine-tune?

通过实验验证 RoI 池化层的训练对于 very deep 网络非常重要,而不是 SPPnet 论文中说的 “微调全连接层就足够了”。

但不是每个卷积层都需要fine-tune。对于小网络 S 和 L,conv1 的学习对 mAP 影响不大,对于大型网络 VGG16,只需要更新第三层以上的卷积层(13层中的9层)。

5. Design evaluation

5.1. Does multi-task training help?

Fast R-CNN解读:单阶段,多任务完成检测_第7张图片
对于三个规模的网络,第一列只有 classification loss,第二列是在第一列的基础上加 multi-task loss。

比较第一二列可得,在所有三个网络中,多任务与仅针对分类的训练相比,可提高准确性。

比较第三四列可得,多任务训练比分段训练的 mAP 高。

5.2. Scale invariance: to brute force or finesse?

我们比较了实现尺度不变的物体检测的两种策略:蛮力学习(单尺度)和图像金字塔(多尺度)。无论哪种情况,我们都将图像的比例尺s定义为其最短边的长度。
Fast R-CNN解读:单阶段,多任务完成检测_第8张图片
从图中可以看出,单尺度处理提供了速度和精度之间的最佳折衷,特别是对于非常深的模型。

5.3. Do we need more training data?

为了验证训练数据是否有必要增加,我们用VOC12训练集来扩充VOC07训练集,从表1可以看出,扩大训练范围可使VOC07测试的mAP从66.9%提高到70.0%。

同理,在VOC10和VOC12上也做了类似的实验(表2 3),都发现 mAP 提高。

说明训练数据的增强是有必要的。

5.4. Do SVMs outperform softmax?

Fast R-CNN 使用 softmax classifier,R-CNN 和 SPPnet 使用 one-vs-rest linear SVMs。

为比较哪个分类器表现更好,做了如下实验:
Fast R-CNN解读:单阶段,多任务完成检测_第9张图片
表8显示了所有三个网络的softmax略胜于SVM,当然影响不大。

5.5. Are more proposals always better?

有两种类型的对象检测器:使用稀疏 object proposal set(例如选择性搜索)和使用密集object proposal set(例如DPM)。
Fast R-CNN解读:单阶段,多任务完成检测_第10张图片
我们发现,随着 proposal 数量的增加,mAP上升,然后略有下降(图3,蓝色实线)。该实验表明,添加更多的 proposal 对深度分类器的准确性无济于事,甚至有一点损害。

6. Conclusion

这篇文章提出了Fast R-CNN,它是一种 R-CNN 的快速版本。

除了报告最新的检测结果外,文章还提供了详细的实验,希望能提供新的见解。

你可能感兴趣的:(#,目标检测,计算机视觉,python)