R-CNN(Region-CNN)、Fast R-CNN、Faster R-CNN学习笔记

R-CNN 是伴随着目标检测技术提出的一种模型;

目标检测要解决的问题是:找出物体的位置、判断是什么物体;

目标检测算法分为3类:

  • 传统的目标检测算法,如 HOG+SVM 等;
  • 候选区域+深度学习分类算法,如 R-CNN、Fast R-CNN 等;
  • 基于深度学习的回归方法,如 YOLO、SSD 等。

传统目标检测算法存在的问题:

  • 滑动窗口的区域选择没有针对性,时间的复杂度高,窗口冗余量大;
  • 手工设计的特征对于多样性的变化没有很好的鲁棒性。

为了优化上述问题,提出了 R-CNN:预先找到目标可能出现的位置(候选区域),利用图像中的边缘、纹理、颜色等信息,可以保证在选择较少的窗口的前提下获得较好的召回率;

这样问题就转变为找出含有物体的区域的问题,避免了暴力枚举所有框;


R-CNN 结构图:

R-CNN(Region-CNN)、Fast R-CNN、Faster R-CNN学习笔记

R-CNN 的主要步骤:

  1. 输入图像;
  2. 利用 selective search 从下到上提取可能包含候选框的区域(大概2000个左右);
  3. 因为选取的区域大小各不相同,所以要将每个候选框缩放成同一大小(为了适应卷积运算);
  4. 输入到下一层的 CNN(卷积神经网络可以是 AlexNet、GoogleNet、VGG 等均可)进行统一的卷积运算,将 CNN 的输出作为特征;
  5. 将特征输入分类器 SVM 进行分类;
  6. 最后,使用回归模型来修正候选框的位置,对于每个类训练一个线性回归模型来判断候选框的位置是否完美,若不够完美则进行修正、优化、微调;
  7. 在 R-CNN 中采用 softmax 做概率分布的输出。

selective search 算法:通过简单的聚类生成区域集合,然后根据相似度不断合并相邻区域构成新的候选框,即实现了从小到大滑动窗口;《Selective Search for Object Recognition》论文链接

R-CNN(Region-CNN)、Fast R-CNN、Faster R-CNN学习笔记

selective search 算法步骤描述:

  1. 计算区域集 R 里每个相邻区域的相似度 S={s1,s2,…};
  2. 找出相似度最高的两个区域,将其合并为新集,添加进 R;
  3. 从 S 中移除所有与第二步中有关的子集;
  4. 计算新集与所有子集的相似度;
  5. 跳至第二步,直至 S 为空。

R-CNN 存在的问题:

  • 速度慢。对原始图片通过 selective search 产生的候选框多达2000个左右,且互相重叠、覆盖(提取特征操作冗余);
  • 训练所需空间大。独立的分类器和回归器需要大量的特征作为训练样本。

为了解决上述 R-CNN 存在的问题,提出了 Fast R-CNN

Fast R-CNN 结构图:

R-CNN(Region-CNN)、Fast R-CNN、Faster R-CNN学习笔记

Fast R-CNN 与 R-CNN 的不同:

  • 在最后一个卷积层后面加入了 RoI 池化层;
  • 损失函数:采用多任务损失函数,将边框回归加入了 CNN 网络训练中,与分类任务合并,两个任务共享卷积特征,互相促进。(整个训练的过程是 end-to-end 的)

RoI 池化层操作:将每个候选区域均匀分成 M*N 块,对每块进行 maxpooling,这样就可以将特征图上大小不一的候选区域转变为大小统一的响应图,如下图:

R-CNN(Region-CNN)、Fast R-CNN、Faster R-CNN学习笔记

R-CNN 中每个候选框都要独自进入 CNN 提取特征,这样花费的时间非常多,而 Fast R-CNN 将整张图片归一化为224*224后直接送入 CNN(共享卷积层),CNN 后得到每个候选框的特征,然后进行分类回归;(只在后面几层才处理候选框信息,所以加快了速度)

Fast R-CNN 直接使用 softmax 代替了 SVM 分类;

Fast R-CNN 重要贡献:可以实时检测,在保证准确性的同时提高速度;


使用 selective search 找出候选框仍比较耗时,为再次提高速度,在 Fast R-CNN 的基础上加入了区域生成网络(即找候选框的工作也交给神经网络做),提出了 Faster R-CNN(Faster R-CNN = 区域生成网络 + Fast R-CNN);

Faster R-CNN 结构图:

R-CNN(Region-CNN)、Fast R-CNN、Faster R-CNN学习笔记

在神经网络后面加入RPN(Region Proposal Network),通过RPN的训练找到候选区域,其他部分与 Fast R-CNN 相同;

Region Proposal Network (RPN):

R-CNN(Region-CNN)、Fast R-CNN、Faster R-CNN学习笔记

Faster R-CNN 中共有4个损失函数:RPN的分类损失函数、RPN的回归损失函数、输出层的分类损失函数、输出层的回归损失函数;


几种模型测试每张图片的速度比较:

R-CNN(Region-CNN)、Fast R-CNN、Faster R-CNN学习笔记