结构简单理解:基于给定的初始框/Anchor Box,通过一个深度学习网络,判断这个初始框里面是否有物体(分类分支);如果有物体,那么该初始框和真实边框之间的偏移信息(回归分支)
初始框使用规则方式生成
;
结果输出是下一阶段算法的输入候选框
;
2 PRN的详细步骤
1 特征图提取:
- 输入图像首先通过基础卷积网络(例如VGG16, ResNet等),这个网络不负责做最终的对象检测,而是用来提取图像的特征。
- 输出是一个特征图(feature map),这个特征图包含了输入图像的抽象特征表示。
2 3x3卷积层:
- 在特征图上应用3x3卷积。这步操作不会改变特征图的尺寸,但会增加每个像素点的感受野(即该点能“看到”的周围区域)。把感受区域增大。
- 这意味着,经过这步操作后,特征图上每个点的特征都是由其周围区域共同决定的。
- 就如下图所示,经过3x3卷积之后,变成一个点,而特征图尺寸不变,增大了感受区域
3 定义Anchor Boxes:
- 在特征图的每个位置定义预先设定的多个Anchor Boxes。这些Anchor Boxes有不同的尺寸和长宽比,用来适应不同大小和形状的目标对象。
- 例如,在每个位置,你可能会定义9个Anchor Boxes:3种不同尺寸 × 3种不同长宽比。
- 如下例子
参考框Anchor box:
k=9
,每个区域获取k个anchor,如下图,在3x3卷积之后,在特征图的每个位置,我们定义多个Anchor Boxes,尽管特征图上的每个位置从数学角度来看只是一个点,但是我们可以在这个点的基础上定义多个不同尺寸和比例的Anchor Boxes。这是通过相对于原始输入图像的尺寸和位置来实现的。Anchor Box的尺寸(在原始图像上)由其预先设定的尺寸决定,而位置由特征图上的点映射到原始图像上的相应位置决定。Anchor Boxes的尺寸和比例是在原始输入图像的尺度上预设的。例如,你可能会定义一系列尺寸(如下面128x128, 256x256, 512x512像素)和比例(如下面1:1, 1:2, 2:1)。
3个尺度
scale
,
(128,256,512),
3个宽高比
ratio1:1, 1:2, 2:1
4 边界框回归和分类分支:
在介绍边界框回归和分类分支之前,首先要理解一件事情:
在Faster R-CNN的RPN过程中,特征图上的每个点对应多个Anchor Boxes,这些Anchor Boxes的顺序通常是预先定义好的,并在整个训练和推理过程中保持一致。
举个例子来说:假设你有 S 个不同的尺寸和 R 个不同的比例,那么总共会有 S×R 个Anchor Boxes。进行排序,可以首先按尺寸排序,对于每个尺寸,再按比例排序。如果有3个尺寸(128x128, 256x256, 512x512)和3个比例(1:1, 1:2, 2:1),那么首先排列尺寸为128x128的所有比例的Anchor Boxes,然后是256x256的,最后是512x512的。对于每个尺寸,先排列比例为1:1的Anchor Box,然后是1:2的,最后是2:1的。
在训练和预测阶段,模型会按照这个顺序对每个位置的Anchor Boxes生成预测结果。
对于边界框回归,模型会按照顺序为每个Anchor Box输出四个参数(偏移量和尺寸调整,也就是四个通道数)。
对于分类,模型会按照顺序为每个Anchor Box输出分类概率(在二分类问题中通常是对象和背景的概率,也就是两个通道数)。
其实对于模型来说,在一开始并不“知道”每个Anchor Box的具体意义,但它通过训练学习到如何为每个按顺序排列的Anchor Box生成准确的预测结果。其实就是说,对于一开始对一个点进行划分Anchor Boxes,放进模型里训练,其实我觉得对于模型来说是不是尺寸的划分并没有什么用,有用的是通过模型的预测与实际划分的尺寸的区域的损失来训练模型,
上面的内容的话,可以先看下面具体步骤,再来看这些
- 边界框回归(Bounding Box Regression):
- 在经过3x3卷积的特征图上,对每个Anchor Box应用一个小的网络(1x1卷积),输出每个Anchor Box的4个调整参数。这4个参数是相对于Anchor Box位置和尺寸的调整值,分别代表边界框中心的x、y坐标的偏移量以及宽度和高度的缩放因子。
- 如果特征图尺寸为WxH(宽x高),共有A个Anchor Boxes,那么边界框回归层将有WxHxAx4个输出。
就是说,假设你有 A 个Anchor Boxes,每个Anchor Box需要预测4个回归值(通常是中心点的x、y坐标的偏移量,以及宽度和高度的缩放因子)。因此,对于特征图上的每个位置(每个点),1x1卷积后你会得到 4A 个通道的输出。
这 4A 个通道的值按顺序对应于这个位置的 A 个Anchor Boxes的4个回归值。比如说,第1到第4个通道对应于第一个Anchor Box的4个回归值,第5到第8个通道对应于第二个Anchor Box的4个回归值,以此类推。
- 分类(Classification):
- 同样在经过3x3卷积的特征图上,对每个Anchor Box应用另一个小网络(1x1卷积),输出每个Anchor Box包含对象的概率。
- 分类层输出2A个值(对于二分类问题:对象vs背景),所以如果特征图尺寸为WxH,共有A个Anchor Boxes,那么分类层将有WxHxAx2个输出。
对于分类,假设你有 A 个Anchor Boxes,每个Anchor Box需要预测2个值(在二分类问题中,通常是对象和背景的概率)。因此,对于特征图上的每个位置,1x1卷积后你会得到 2A 个通道的输出。
这 2A 个通道的值按顺序对应于这个位置的 A 个Anchor Boxes的2个分类值。比如说,第1和第2个通道对应于第一个Anchor Box的对象和背景的概率,第3和第4个通道对应于第二个Anchor Box的对象和背景的概率,以此类推。
5 生成提议(Region Proposals):
- 使用边界框回归层的输出调整每个Anchor Box的位置和尺寸,得到调整后的提议。
- 使用分类层的输出评估每个提议是对象的概率。
6 应用非极大值抑制(NMS):
????????这一步可以在这里做,也可以在后面使用RPN提议进行后续处理来做
- 对生成的提议应用NMS。NMS通过去除那些与高分提议高度重叠的低分提议,保证最终的提议之间有较少的重叠。
- 选择NMS阈值是一个实验性的过程,需要根据具体任务和数据集调整。
7 训练RPN:
- 使用真实标注数据(ground truth data)定义正样本和负样本Anchor Boxes。
????????正样本定义规则:
????????????????-1. 和Ground Truth Box(真实边框)的IoU重叠区域比最高的anchor boxs;
????????????????-2. 和Ground Truth Box的IoU重叠区域比大于0.7的anchor boxs;
????????负样本定义规则:
????????????????和所有的Ground Truth Box的IoU重叠区域比小于0.3的anchor boxs;
- 对于每个Anchor Box,使用多任务损失函数来同时优化边界框的位置(通过回归损失)和分类准确性(通过分类损失)? ? ? ? ??
????????训练RPN的损失函数有softmax loss和smoth l1 loss两部分组成,类似 Fast R-CNN
8 使用RPN提议进行后续处理:
在RPN提取的RoI候选框区域后,类似Fast R-CNN,做一个Proposal Layer部分的结构
Proposal Layer:
在Faster R-CNN中,Proposal Layer是一层特殊的层,它的作用是从区域提议网络(RPN)输出的大量的锚框(Anchor Boxes)提议中,选择出一定数量的最优提议(Proposals)。这些提议是通过对锚框进行得分排序和非极大值抑制(Non-Maximum Suppression, NMS)来选出的,它们被认为最有可能包含对象的候选区域。
具体来说,Proposal Layer执行以下操作:
-
得分排序:
- 对于每个锚框,RPN会输出一个对象得分,即该锚框包含对象的概率。Proposal Layer会根据这个得分对所有锚框进行排序。
-
应用NMS:
- 在排序后的锚框中,很多高得分的锚框可能会有重叠。为了减少重复检测,非极大值抑制(NMS)被用来去除那些与得分最高的锚框重叠度较高的其他锚框。
-
选择Top-N提议:
- 在应用NMS之后,Proposal Layer会选择得分最高的N个提议。这个数字N可以根据需要设置,常见的值比如2000个提议用于训练,300个用于测试。
-
RoI Pooling:
- 选出的这些提议随后会被送到后续的网络结构中进行更详细的分类和边界框回归。这通常涉及到一个RoI Pooling层,它会将不同大小的提议区域转换成固定大小的特征图,以便进行后续的处理。
Proposal Layer是连接RPN和后续对象检测网络的重要组件,它确保了网络能够专注于那些最有可能包含对象的区域,从而提高了检测的效率和准确性。
第五步提到的IoU匹配与样本选择是为了训练第二次边界框回归。在Faster R-CNN中,这个步骤的确切目的是确定每个提议(由RPN生成并经过NMS处理的)是否作为正样本用于训练,这是通过计算每个提议与真实边界框(Ground Truth)之间的IoU来完成的。因为第一次是生成提议,生成的所有的anchor boxs都要进行边框回归,Proposal Layer之后的提议与真实边框可能iou比较小,所以进行分类正负样本。
上述有一个问题,在Faster R-CNN的不同实现和描述中,术语的使用可能会有所变化。有时,“Proposal Layer”可能被泛指为处理RPN提议的整个后续流程,即便这部分实际上是属于Fast R-CNN的组成。这可能包括提议的进一步筛选、训练样本的选择以及最终的RoI Pooling操作。上述图片中的“Proposal Layer”就是泛指为处理RPN提议的整个后续流程
3?Faster R-CNN的训练方式和多尺度问题
3.1 三种训练方式
对于RPN网络和
Proposal Layer
两个不同网络结构的训练,其Faster R- CNN中提出了三种方式
(上述句子的Proposal Layer指的就是泛指为处理RPN提议的整个后续流程)
Alternating training
:类似Fast R-CNN, 交叉的训练RPN和Fast R-CNN;
这种策略是逐步训练的。首先独立训练RPN网络,接着使用RPN的输出训练Fast R-CNN。这两个网络的训练是分开的,它们交替进行,每个网络的输出在下一次迭代中作为另一个网络的输入。
Approximate joint training
:将RPN和Fast R-CNN合并成为一个网络结构, 也就是相当于将RPN网络的loss和Fast R-CNN网络的loss合并成为一个loss值。
这里的Approximate的意思是对于RPN bounding box regression部分的反向传播计算得到的梯度舍弃;
在这种策略中,RPN和Fast R-CNN是同时训练的,它们共享卷积层并合并它们的losses。"近似"的部分指的是,在反向传播时,只对选定的固定数量的提议进行梯度计算,而不是对所有的提议进行计算。
Non-Approximate joint training
:同Approximate joint training,区在在于不会舍弃RPN bounding box regression部分的梯度值,是将四个loss值累加起来来进行模型优化的。
这是一种更精确的训练策略,其中对所有的提议都进行边界框回归梯度计算,而不是仅对固定的top-k个提议计算。这种方法计算量更大,但理论上能提供更准确的训练结果。
3.2 多尺度问题
4 R-CNN、SPP Net、Fast R-CNN、Faster R-CNN的区别