【目标检测经典算法】R-CNN、Fast R-CNN和Faster R-CNN详解系列二:Fast R-CNN图文详解-具体实现

时间:2024-03-14 11:46:50

1. 计算整张图片的特征并通过投影获得候选框的特征

在这里插入图片描述

  • RCNN:生成了2000个候选框,都要传入神经网络中,所以需要进行2000次的网络计算得到2000个特征,计算量极大且会存在大量冗余计算;

  • Fast-RCNN:直接将整张图片输入神经网络获得该图片的特征图,通过每个候选框与该张特征图的映射关系,就可以得到每个候选框的特征图,从而无需输入神经网络进行大量冗余计算,大幅提升计算效率。

2 随机采样 Sampling

在训练过程中,我们并不使用SS算法生成的全部候选框(约2000个),而是从中随机采样一部分候选框进行使用。

2.1 正样本和负样本

  • 正样本: 正样本是指与真实目标(如物体、目标物体的边界框等)高度重叠或包含真实目标的候选区域或者候选框。 在目标检测中,正样本通常被用于训练模型来识别和定位目标物体。

  • 负样本: 负样本是指与真实目标无关或者与真实目标重叠度较低的候选区域或者候选框。 在目标检测中,负样本通常被用于训练模型来识别背景,即图像中不含目标物体的区域。

2.2 为什么要存在正负样本?

  1. 训练模型: 正样本提供了目标物体的信息,有助于模型学习正确地识别和定位目标。负样本则提供了背景信息,有助于模型学习如何区分目标物体和背景。

  2. 防止过拟合: 过拟合是指模型在训练数据上表现很好,但在新数据上表现较差的现象。通过使用负样本,可以使模型学习更好地区分目标物体和背景,从而减少过拟合的风险。

  3. 平衡数据: 在目标检测任务中,正样本(包含目标物体的候选区域)通常远远少于负样本(不包含目标物体的候选区域)。因此,使用负样本可以平衡训练数据,使得模型更好地学习目标物体和背景之间的差异。

2.3 论文中如何定义正负样本

论文中从2000个候选框中选择64个候选框进行训练使用,其中如果与真实目标边界框的IOU值>0.5,则被认定为正样本,负样本则是与真实候选框的IOU值最大的且在(0.1 , 0.5]范围内的。

3 RoI Pooling层

在这里插入图片描述

通过pooling层把候选框产生的特征图都缩放到统一的尺寸(7*7)。

  • 优点:无需限制输入图片的尺寸。RCNN则需要输入的图片尺寸为227*227才行。

如何实现?

RoI Pooling Layer通过maxpooling方法把候选框的特征图都统一缩放到7*7的大小的特征矩阵。
在这里插入图片描述

4. 分类器和回归器

4.1 分类器classification

预测N+1个类别概率,全连接层需要N+1个节点,概率值都是经过softmax进行处理过的,相加为1。
在这里插入图片描述

4.2 边界框回归器regressor

每个候选框都有4个边界框回归参数:(dx,dy,dw,dh),因此对应N+1个类的全连接层需要的节点个数是(N+1)* 4.

  • d x d_x dx:调整中心点x坐标的回归参数
  • d y d_y dy:调整中心点y坐标的回归参数
  • d w d_w dw:调整边界框宽度的回归参数
  • d h d_h dh:调整边界框高度的回归参数

在这里插入图片描述

4.2.1 如何回归(公式)

根据如下的公式进行计算。可以将橙色的框回归调整到红色的框。

在这里插入图片描述

5. 损失函数

因为是主要了解算法流程,所以损失函数的具体计算方法暂时不详细展开介绍,大家可以去看视频。

在这里插入图片描述

6. 缺陷

  1. 候选框生成器瓶颈:Fast R-CNN仍然需要依赖于候选框生成器(如Selective Search或Region Proposal Network)来生成候选区域,这一过程仍然比较耗时,成为训练和推理的瓶颈之一。

  2. RoI池化固定尺寸的限制:Fast R-CNN中的RoI池化层将不同尺寸的RoI映射为固定长度的特征向量,这可能导致信息损失,尤其是对于不同大小的目标物体。

  3. 不支持端到端的训练:Fast R-CNN仍然需要多阶段的训练过程,包括候选框生成、特征提取和分类定位等,这种多阶段的训练过程不利于端到端的优化。

  4. RoI对齐:Fast R-CNN中的RoI池化操作存在位置量化的问题,可能导致特征偏移和信息损失。后续的一些方法(如RoI Align和RoI Transformer)对此进行了改进。

7. 改进

Faster R-CNN: