1.Fast-RCNN论文背景
2. Fast-RCNN算法流程
3.Fast R-CNN 问题和缺点

这篇以对比RCNN来说明,如果你对RCNN网络没太熟悉,可访问这链接,快速了解,点下面链接

深度学习之目标检测R-CNN模型算法流程详解说明(超详细理论篇)

一、Fast-RCNN论文背景

论文地址https://arxiv.org/abs/1504.08083

  Fast R-CNN 是一篇由Ross Girshick 在 2015 年发表的论文,题为 “Fast R-CNN”。这篇论文旨在解决目标检测领域中的一些问题,特别是传统目标检测方法中存在的速度和准确性之间的矛盾。

  论文摘要:本文提出了一种基于快速区域的卷积网络方法来处理目标检测。快速 R-CNN 建立在以前的工作,有效地分类目标建议使用深卷积网络。与以往的工作相比,快速 R-CNN 采用了一些创新,以提高训练和测试速度,同时也提高了检测的准确性。快速 Fast 训练非常深的 VGG16网络比 R-CNN 快9倍,测试速度快213倍,并在 PASCAL VOC 2012上获得更高的 mAP。与 SPPnet 相比,Fast R-CNN 训练 VGG16的速度快3倍,测试速度快10倍,而且更准确。

二、Fast-RCNN算法流程

1.RCNN算法流程4个步骤:

  • R-CNN 的流程呈 “串行化、独立化”,分为 3 个互不关联的阶段,无端到端训练能力。
    • 步骤1:候选区域生成(Selective Search)
      对单张输入图像,使用选择性搜索生成约2000个候选区域(Region Proposals, RPs),输出每个候选框的坐标(x1,y1,x2,y2)。

    • 步骤2:CNN特征提取(独立提取,重复计算)
      ① 对每个候选区域单独预处理:裁剪→缩放为227×227→减均值→归一化
      ② 将每个预处理后的候选区域单独输入微调后的CNN(如AlexNet)
      ③ 提取每个候选区域的FC7层4096维特征向量,缓存所有特征(硬盘存储,占用大量空间)
      (注:每个候选区域都要完整走一遍CNN,无特征共享,重复计算严重)

    • 步骤3:独立分类与边界框回归
      ① 分类:将缓存的4096维特征输入独立训练的20个二分类SVM,输出类别置信度,筛选高置信度候选框
      ② 回归:将筛选后的候选框特征输入独立训练的20个线性回归器,修正边界框坐标
      ③ 后处理:NMS(非极大值抑制)去重,得到最终检测结果

    • 步骤4:训练流程(三阶段独立训练)
      ① 阶段1:CNN微调(修改预训练CNN最后一层为21类softmax,在检测数据集上微调)
      ② 阶段2:SVM训练(用CNN提取的特征,按严格样本标准训练独立SVM)
      ③ 阶段3:回归器训练(用CNN提取的特征,训练独立线性回归器)

2.Fast-RCNN算法流程:

  • Fast R-CNN 的核心创新是 “共享卷积特征 + RoI Pooling + 多任务损失”,流程更简洁,效率大幅提升,支持端到端训练。
    • 步骤1:候选区域生成(仍沿用Selective Search)
      对单张输入图像,使用选择性搜索生成约2000个候选区域,输出每个候选框的坐标(x1,y1,x2,y2)。

    • 步骤2:共享卷积特征提取(仅一次卷积,无重复计算)
      ① 将整张输入图像直接输入CNN(如AlexNet/VGG16),进行一次完整的卷积层计算,得到整张图像的卷积特征图(Feature Map)
      ② 无需对每个候选区域单独处理,大幅减少计算量(这是与R-CNN最核心的效率差异)

    • 步骤3:RoI Pooling(核心创新,对齐特征与候选区域)
      ① 将步骤1生成的每个候选区域坐标,映射到卷积特征图上(根据卷积层的步长、填充等参数,缩小候选框尺寸)
      ② 对每个映射后的候选区域(RoI,感兴趣区域),使用RoI Pooling将其归一化为固定尺寸(如7×7,适配后续全连接层)
      ③ 输出每个RoI的固定尺寸特征图,为后续全连接层提供统一输入

    • 步骤4:多任务联合分类与回归(整合进网络,端到端)
      ① 将每个RoI的固定尺寸特征图输入全连接层(FC6→FC7),输出4096维特征向量
      ② 全连接层分支为两个任务头(共享FC7特征):

      • 分类分支:FC8输出K+1类(K个目标类+1个背景类),经softmax激活,输出类别概率分布
      • 回归分支:FC8输出4×(K+1)维偏移量(每个类别对应4个边界框偏移量dx,dy,dw,dh),无需独立训练回归器
    • ③ 后处理:根据分类概率筛选高置信度候选框,用对应类别的偏移量修正边界框,再经NMS去重,得到最终检测结果

    • 步骤5:训练流程(端到端多任务训练)
      ① 初始化:用ImageNet预训练CNN初始化网络参数
      ② 网络修改:插入RoI Pooling层,添加分类+回归双任务头,定义多任务损失函数(分类交叉熵损失+平滑L1回归损失)
      ③ 端到端训练:用SGD优化整个网络(卷积层+全连接层+双任务头),一次训练完成分类与回归任务,无需独立训练多个模块
      在这里插入图片描述

在这里插入图片描述

3.Fast RCNN相比RCNN不同点(后面有重复叙述)

(1) 核心差异:特征提取方式(独立提取 vs 共享提取)

对比项R-CNNFast R-CNN
输入对象每个候选区域(单独输入 CNN)整张输入图像(仅一次输入 CNN)
计算逻辑2000 个候选区域→2000 次完整 CNN 前向传播1 张图像→1 次完整卷积层计算,共享卷积特征图
特征复用性无特征复用,重复计算严重(卷积层计算占比 90% 以上)完全共享卷积特征,仅对 RoI 进行后续全连接层计算
存储需求需缓存所有候选区域的 4096 维特征,占用数百 GB 硬盘空间无需缓存特征,实时计算,无额外存储压力
推理速度约 5–10 秒 / 张(卷积层重复计算是瓶颈)约 0.5–1 秒 / 张(效率提升 10 倍以上)

(2)核心创新:新增 RoI Pooling 层(Fast R-CNN 独有)

  • R-CNN:无 RoI Pooling 层,通过 “直接缩放候选区域为 227×227” 适配 CNN 输入,会导致目标变形(宽高比被强制改变);
  • Fast R-CNN:在卷积层与全连接层之间插入RoI Pooling 层,核心作用:
    • ① 坐标映射:将图像空间的候选框,映射到卷积特征图空间(解决卷积层下采样后的坐标对齐问题);
    • ② 尺寸归一化:将不同大小、不同宽高比的 RoI,统一池化为固定尺寸(如 7×7),适配后续全连接层的固定输入要求;
    • ③ 保留目标形态:无需强制拉伸候选区域,减少目标变形带来的特征失真,提升检测精度。

(3)分类与回归模块:独立模型 vs 网络内多任务联合

对比项R-CNNFast R-CNN
分类器类型独立训练的 20 个二分类 SVM网络内置的多分类 softmax(K+1 类)
回归器类型独立训练的 20 个线性回归器网络内置的多任务回归分支(4×(K+1) 维输出)
模块关联性分类器、回归器、CNN 三者完全独立,无参数共享分类与回归分支共享 FC7 特征,整合在同一网络中
损失函数无统一损失函数(CNN:交叉熵;SVM:合页损失;回归器:L1 损失)统一多任务损失函数:Loss = Loss_cls + λ×Loss_reg(λ 为平衡系数,原论文取 1)
样本定义三者样本标准不同(CNN:IoU≥0.5;SVM:IoU=1 为正,<0.3 为负;回归器:IoU≥0.6)统一样本标准(RoI 与 ground-truth IoU≥0.5 为正样本,<0.5 为背景样本)

(4) 训练流程:三阶段独立训练 vs 端到端单阶段训练

对比项R-CNNFast R-CNN
训练阶段3 个独立阶段(CNN 微调→SVM 训练→回归器训练)1 个端到端阶段(整个网络一次性训练)
训练复杂度流程繁琐,需手动切换模块、缓存特征,易出错流程简洁,一键式训练,无需额外处理
参数更新各模块参数独立更新,无法协同优化(如 CNN 特征无法适配 SVM 的分类需求)整个网络参数(卷积层 + 全连接层 + 双任务头)协同更新,端到端优化,提升模型整体性能
训练效率训练周期长(数天),占用大量存储和计算资源训练周期短(数小时),资源消耗大幅降低

4.ROI Pooling(Region of Interest)

  它的输入是特征图,输出则是大小固定的channel x H x W的vector。ROI Pooling是将一个个大小不同的region proposals,映射成大小固定的(W x H)的矩形框。它的作用是根据region proposals的位置坐标在特征图中将相应区域池化为固定尺寸的特征图,以便进行后续的分类和输出回归框操作。它可以加速处理速度。

ROI Pooling有两个输入,一个是图片进入CNN后的特征图,另一个是区域的边框。ROI 的输出是一个region_nums x channels x W x H的向量。

  RoI可以看成是SPP的简化版本,原版SPP是多尺度池化后进行concat组成新特征,而RoI只使用一个尺度,可以将任意维度的特征矩阵缩放成固定维度。论文中的具体做法是,把高和宽都平均分为7*7的小块,然后在每一个小块做max pooling操作,channel维度不变,这样做能使输出维度固定,同时RoI Pooling不是多尺度的池化,梯度回传非常方便,为fine-tune卷积层提供了条件。(SPP Net不能fine-tune卷积层)

在这里插入图片描述

5.SPP Net
  在RCNN中,使用selective search方法在原始图像上生成近2000个Region Proposal,然后resize到固定尺寸,输入到CNN网络中,也就是说一张原始图片要进行2000次前向推理计算,存在着大量的重复冗余计算。
  SPP Net的主要贡献在于:共享卷积计算和Spatial Pyramid Pooling(空间金字塔池化),使得每张图片只需要进行一次CNN网络的前向推理计算。在RCNN中需要图像块resize到固定大小,难免会有变形和失真。

图中第一行是RCNN的流程,需要将每一个图像块输入到网络中。
第二行是SPP方法,大大减小了计算量。具体实现方法和过程下面将进行详细阐述。

在这里插入图片描述
在这里插入图片描述
训练过程:使用ImageNet预训练的AlexNet模型,输入图片进行前向推理,获得conv5特征,同时使用selective search算法在原图上获得候选框,然后将这些候选框映射在conv5特征图上提取到相应的SPP特征,接着将SPP特征fine-tune全连接层(卷积层不fine-tune),得到全连接层的特征。之后和RCNN一致了,将全连接层的特征输入到SVM分类器中进行分类,用SPP特征训练Bounding Box的LR模型来修正候选框的位置。
推理过程:与训练过程一致,原始图片输入到CNN网络中,经过selective search后映射获取到SPP特征,然后经过全连接层获取到分类特征,输入到SVM分类器中,同时SPP特征输入到Bounding Box的LR模型中

6.多任务损失函数

在这里插入图片描述
其中p是分类器预测的softmax概率分布p=(p0, p1, …),
u对应目标真实类别标签,tu对应边界框回归器预测的对应类别u的回归参数,v对应真实目标框的回归参数。

分类损失函数为Negative Log Likelyhood Loss:(考虑到p使用softmax算出来的,相当于分类是用CrossEntropyLoss算出来的)

在这里插入图片描述

三、Fast R-CNN 问题和缺点

1.训练和推断时间较长:Fast R-CNN 的训练过程相对较慢,需要先训练候选区域生成网络(RPN),然后再训练目标分类网络。此外,在推断阶段,需要对整个图像进行前向传播,计算较为耗时。

2.ROI Pooling 的固定大小:ROI Pooling 操作将不同大小的候选区域映射到固定大小的特征图上。这种固定大小的映射可能导致信息的损失或扭曲,特别是对于较小或较大的目标区域。

3.候选区域生成器的质量:Fast R-CNN 使用候选区域生成网络(RPN)生成候选区域,而候选区域生成器的质量直接影响到目标检测的准确性。如果候选区域生成器无法准确地提供包含目标的候选区域,那么最终的检测结果可能会受到影响。

4.依赖预训练模型:Fast R-CNN 通常需要在预训练的卷积神经网络(CNN)模型上进行微调。这意味着它对于预训练模型的选择和质量有一定的依赖性,如果预训练模型不够准确或不适用于特定的任务,可能会影响 Fast R-CNN 的性能。

5.基于滑动窗口的候选区域生成:Fast R-CNN 仍然采用了基于滑动窗口的候选区域生成方法,这可能导致在大规模图像上的计算量较大。尽管 RPN 可以减少滑动窗口的数量,但仍需要对整个图像进行扫描。

  GPU上Fast RCNN跑网络推理只需要0.32s,但是跑selective search就需要2s,也就是说selective search严重制约了Fast RCNN的速度,成为了主要瓶颈。(后面Faster RCNN提出了RPN网络解决了这个问题)

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐