RCNN算法详解:【目标检测经典算法】R-CNN、Fast R-CNN和Faster R-CNN详解系列一:R-CNN图文详解
学习视频:Faster RCNN理论合集
Fast RCNN
概念辨析
1. RoI
在Fast R-CNN中,RoI(Region of Interest,感兴趣区域) 是指在图像中提取的候选区域或者候选框,这些区域被认为可能包含目标物体。RoI是由候选框生成器(例如Selective Search或者Region Proposal Network)生成的,通常通过在图像上滑动窗口或者其他区域生成方法获得。
2. RoI池化
RoI池化(RoI Pooling) 是指将不同尺寸的RoI映射到相同大小的特征图上,从而能够将RoI中的特征提取出来用于后续的分类和定位。在Fast R-CNN中,RoI池化层将每个RoI划分成固定大小的子区域,并对每个子区域进行最大池化操作,最终将每个RoI映射为固定长度的特征向量。
RoI是Fast R-CNN中的关键组成部分,它通过提取候选区域的特征,为后续的分类器提供输入,从而实现目标检测任务。RoI池化操作使得Fast R-CNN能够处理不同大小和形状的候选区域,并且减少了特征提取的计算量,提高了检测速度。
框架结构
1. 实现步骤
- 将图片输入Deep ConvNet中进行特征图的提取
- 通过RoI projection获取到候选框的特征图
- 通过RoI pooling layer将候选框的特征图都缩放到7*7大小
- 链接两个全连接层后进行特征的展平,获得RoI feature vector
- RoI feature vector后并连两个网络:分类器和回归器,分类器负责对候选框中的目标进行分类,回归框负责对候选框的位置进行调整
2. 框架图
Fast R-CNN的框架图如下所示:
- Region proposal:通过区域选择SS算法生成候选框;
- 通过CNN网络把特征提取、分类和边界框回归都集成到了一起,只使用一个网络就可以完成。
Fast R-CNN和RCNN比较可以看到,RCNN需要单独训练4个部分,而Fast R-CNN只有两个部分,更加简洁并且快速。
具体实现
1. 计算整张图片的特征并通过投影获得候选框的特征
-
RCNN:生成了2000个候选框,都要传入神经网络中,所以需要进行2000次的网络计算得到2000个特征,计算量极大且会存在大量冗余计算;
-
Fast-RCNN:直接将整张图片输入神经网络获得该图片的特征图,通过每个候选框与该张特征图的映射关系,就可以得到每个候选框的特征图,从而无需输入神经网络进行大量冗余计算,大幅提升计算效率。
2 随机采样 Sampling
在训练过程中,我们并不使用SS算法生成的全部候选框(约2000个),而是从中随机采样一部分候选框进行使用。
2.1 正样本和负样本
-
正样本: 正样本是指与真实目标(如物体、目标物体的边界框等)高度重叠或包含真实目标的候选区域或者候选框。 在目标检测中,正样本通常被用于训练模型来识别和定位目标物体。
-
负样本: 负样本是指与真实目标无关或者与真实目标重叠度较低的候选区域或者候选框。 在目标检测中,负样本通常被用于训练模型来识别背景,即图像中不含目标物体的区域。
2.2 为什么要存在正负样本?
-
训练模型: 正样本提供了目标物体的信息,有助于模型学习正确地识别和定位目标。负样本则提供了背景信息,有助于模型学习如何区分目标物体和背景。
-
防止过拟合: 过拟合是指模型在训练数据上表现很好,但在新数据上表现较差的现象。通过使用负样本,可以使模型学习更好地区分目标物体和背景,从而减少过拟合的风险。
-
平衡数据: 在目标检测任务中,正样本(包含目标物体的候选区域)通常远远少于负样本(不包含目标物体的候选区域)。因此,使用负样本可以平衡训练数据,使得模型更好地学习目标物体和背景之间的差异。
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. 缺陷
-
候选框生成器瓶颈:Fast R-CNN仍然需要依赖于候选框生成器(如Selective Search或Region Proposal Network)来生成候选区域,这一过程仍然比较耗时,成为训练和推理的瓶颈之一。
-
RoI池化固定尺寸的限制:Fast R-CNN中的RoI池化层将不同尺寸的RoI映射为固定长度的特征向量,这可能导致信息损失,尤其是对于不同大小的目标物体。
-
不支持端到端的训练:Fast R-CNN仍然需要多阶段的训练过程,包括候选框生成、特征提取和分类定位等,这种多阶段的训练过程不利于端到端的优化。
-
RoI对齐:Fast R-CNN中的RoI池化操作存在位置量化的问题,可能导致特征偏移和信息损失。后续的一些方法(如RoI Align和RoI Transformer)对此进行了改进。
7. 改进
Faster R-CNN: