一文读懂 R-CNN,Fast R-CNN,Faster R-CNN 发展史

R-CNN 系列算法是目标检测 two-stage 类的代表算法,本文将从 问题背景,创新点,框架模块,训练流程,检测流程五个方面比较,了解它们的的发展历程,以及发展原因。

一、任务描述

目标检测是为了解决图像里的物体是什么,在哪里的问题。输入一幅图像,输出的是图像里每个物体的类别和位置,其中位置用一个包含物体的框表示。
查看源图像

需要注意,我们的目标,同时也是论文中常说的感兴趣的物体,指我们关心的类别(行人检测只检测人,交通检测只关心交通工具等),或者数据集包含的类别,并不是图像里所有的物体都是目标,比如建筑,草坪也是物体,但他们常常是背景。

从计算机视觉的角度看,目标检测是分类+定位,从机器学习的角度看,目标检测是分类+回归

二、设计思路

今天介绍的 R-CNN 系列算法,都基于深度学习,它们把目标检测大致分为四部分完成:

  • 先从整幅图里选取最可能有物体的一些候选区域,这些区域一般用长方形框表示,这一步能缩小寻找范围
  • 既然用到深度学习,那就需要学习图像的深层特征,这里我们只关心上一步选出区域的图像特征,提取的特征可用于分类回归任务
  • 分类就是常规的分类方法,不过这里是多分类
  • 第一步给的候选框经过筛选后,不一定精准,还需要根据 ground truth 作调整
  • 分类和定位任务可以同时训练,也可以依次训练

一文读懂 R-CNN,Fast R-CNN,Faster R-CNN 发展史_第1张图片

三、名词解释

  • Selective Search:一种产生候选区的方法,没有用到深度学习,需要在 CPU 上训练,比较耗时,简称 SS。
  • Region proposal:直译为成区域建议(有些别扭),就是生成候选区的过程,类似于比赛前的海选,其中的 region 是矩形区。方法有 Selective Search,论文中产生 2000 个候选区,下面简称这部分产生的区域为候选区。
  • Bounding box:直译为边界框,就是最后输出定位的那个矩形框。严格来说,分为人工标注的 ground truth 和 predicted 两种类型。有时候简称为 BB。
  • Region of interest(ROI):感兴趣的区域,有时候论文把 region proposal 产生的区域叫 ROI。
  • Non maximum suppression(NMS):非极大值抑制,简称为 NMS 算法,其思想是搜素局部最大值,抑制极大值,在目标检测的目的是输出最合适的边界框。
  • Fully connected layer:全连接层,我下面简写为 FC 层。
  • Feature map:卷积层的输出,可翻译为特征图。

四、比较说明

下面我将从问题背景,创新点,框架模块,训练流程,检测流程五个方面比较介绍他们的发展过程。我更侧重它们的宏观思路,而没有介绍具体细节,也没有涉及实验和代码。

五、发展历程

首先用一张图说明三个架构的区别。
一文读懂 R-CNN,Fast R-CNN,Faster R-CNN 发展史_第2张图片
可以看出,他们的发展是从训练分散到统一的过程,开始还需要借助外部的模块 SS,后来可以构造一个联合框架。

从训练的角度,开始的训练是多阶段的(multi-satge:生成候选区→提取特征→分类→定位),后来的训练中,提取特征+分类+定位一次性完成。

从是否需要 region proposal 的角度,它们都是需要的,是 region based 方法,统称为 two-stage 方法,而其他方法如 YOLO 不需要这个阶段,是 one-stage 方法。

1. R-CNN

问题背景——

  • 传统视觉特征 SIFT 和 HOG 用于检测系统,性能提升缓慢
  • CNN 用于分类效果好,能否提升检测性能

创新点——

  • 把 CNN 用于生成 region proposal,用 CNN 提取的特征代替 SIFT 和 HOG 这些传统特征;
  • 采用大样本下有监督预训练+小样本微调的方式解决小样本难以训练甚至过拟合等问题。

框架模块——

  • 生成候选区模块
  • 提取特征的 CNN 模块
  • 用于分类的 SVM 模块
  • 修正边界框模块

训练流程——

  • 有监督的预训练:在大型辅助数据集(ILSVRC2012 classification)上进行 CNN 预训练,得到一个分类器(CNN)
  • 特定领域的微调:根据检测任务微调 CNN,把最后 1000 维的分类层替换成 N+1 维的分类层(N 是检测数据集的类别数,1 是背景)
  • SVM 分类器训练:由于SVM是二分类器,需要为每个类别训练单独的SVM。对于某一类,一片区域包含该类物体为正样本,不包含为负样本。如何判断是否为正?设定 IOU 阈值,低于阈值的为负样本
  • 边界框回归训练:提高定位精度

检测流程——

  • 输入一张多目标图像
  • 采用 selective search 算法提取约 2000 个建议框,对区域 / 框变形
  • 处理后的区域/框输入 CNN 提取特征
  • 对区域进行分类,用非极大抑制提取分数最高(最可能的类)的框
  • 对框进行回归修正,选择分数最高的框

2. Fast R-CNN

问题背景——

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

创新点——

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

框架模块——

与R-CNN 模块大致相同,相比 R-CNN 模块有一些改变。

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

训练流程——

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

检测流程——

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

与 R-CNN 相比

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

3. Faster R-CNN

问题背景——

  • 继Fast R-CNN后,在CPU上实现的区域建议算法 Selective Search、EdgeBoxes 等成了物体检测速度提升上的最大瓶颈。

创新点——

  • 设计 Region Proposal Networks(RPN),利用 CNN 卷积操作后的特征图生成候选区,代替了Selective Search、EdgeBoxes 等方法,速度上提升明显;
  • 训练 Region Proposal Networks 与检测网络(Fast R-CNN)共享卷积层,大幅提高网络的检测速度。

框架模块——

  • PRN + Fast R-CNN
  • Fast R-CNN 生成候选区域需要外部的 SS 模块,而 Faster R-CNN 是一个统一的模块,region proposal 部分由 PRN 完成

训练流程——

四步交替训练:

  • 训练PRN:使用 ImageNet-pre-trained model 初始化,针对 region proposal 任务微调
  • 用第一步得到的 PRN 训练 Fast R-CNN:其中 Fast R-CNN 也用 ImageNet-pre-trained model 初始化(此时两个网络还没有共享特征)。
  • 用 Fast R-CNN 初始化 PRN:固定共享的卷积层,仅微调 RPN 特有的层(此时两个网络开始共享)
  • 在保持共享卷积层固定不变的情况下,微调 Fast R-CNN 的特有层。(两个网络共享相同的卷积层并形成统一的网络)

检测流程——

  • 输入一张多目标图像
  • 图像经过 CNN 网络生成特征图
  • 特征图分两路,一路经过 PRN 得到候选区域(经过 NMS ),另一路继续向后传播。
  • 上一步得到的高维特征图和区域建议同时输入 RoI 池化层,提取对应区域建议的特征
  • 区域特征通过全连接层后,输出该区域的分类得分以及回归后的 bounding-box

五、总结

一文读懂 R-CNN,Fast R-CNN,Faster R-CNN 发展史_第3张图片

你可能感兴趣的:(目标检测,计算机,深度学习)