Faster-RCNN是最著名的对象检测神经网络之一。它也是许多衍生网络的基础,用于分割,三维物体检测,激光雷达点云与图像的融合等。直观深入了解Faster-RCNN的工作方式非常有用。
Faster-RCNN的3个网络
在概念层面,Faster-RCNN由3个神经网络组成 - 特征网络,区域建议网络(RPN),检测网络(Detection Network )。
特征网络通常是众所周知的预训练图像分类网络,例如VGG减去一些最后/顶层。该网络的功能是从图像中生成良好的特征。该网络的输出保持原始图像的形状和结构(即,仍然是矩形,原始图像中的像素粗略地映射到对应的特征“像素”等)。
RPN通常是一个具有3个卷积层的简单网络。有一个通用的层,它提供给两个层——一个用于分类,另一个用于边界框回归。RPN的目的是生成许多称为兴趣区域(ROIs)的边界框,这些框很可能包含任何对象。该网络的输出是由两个对角线角的像素坐标标识的若干个包围盒,以及一个值(1、0或-1,表示一个对象是否在这个包围盒中,或者这个盒子是否可以被分别忽略)。
检测网络(有时也称为RCNN网络)从特征网络和RPN中获取输入,并生成最终类和边界框。它通常由4个全连接或密集层组成。分类层和边界盒回归层共享两个叠加的公共层。为了帮助它只对边界框的内部进行分类,这些特性会根据边界框进行裁剪。
RPN和检测网络都需要训练。这就是Faster-RCNN最复杂的地方。
训练RPN
为了训练RPN,首先要用一种叫做anchor boxes的机制来生成一些边界框。特征图像的每个“像素”都被视为anchor 。每个anchor 对应于原始图像中的一组较大的像素方块(在特征提取之前,通常会对原始图像进行一些处理)。如图3所示,anchors被均匀地放置在(重塑)图像的两个维度上。特征生成层生成anchor boxes所需的输入是张量的形状,而不是完整的特征张量本身。
图3:Anchors (红点),由成千上万的 anchor boxes(淡蓝色)和ground truth boxes(绿色)覆盖在原始图像上。
以每个Anchor为中心生成许多不同形状和尺寸的矩形框。通常每个Anchor产生9个boxes(3 sizes x 3 shapes),如图4所示。因此,每个图像有成千上万个anchor boxes。例如,在图1中,生成了38x57x9 = 19494 anchor boxes。
在减少的第一步中使用了一种称为非最大抑制(NMS)的操作。NMS移除与具有较高分数的其他框重叠的框(分数是非归一化的概率,例如在softmax应用于归一化之前)。在训练阶段抽取了大约2000个boxes (测试阶段的数字较低,大约300个)。在测试阶段,这些boxes 连同它们的分数直接进入检测网络。在训练阶段,在进入检测网络之前,通过采样将2000个boxes 进一步减少到大约256个。
为了生成RPN分类的标签(例如前景、背景和ignore ),我们取所有与ground truth框相对的边界框的IOU。然后使用白条将256 ROIs标记为前景和背景,然后忽略。然后,在首先删除被忽略的(-1)类框之后,使用这些标签来计算交叉熵损失。
除了分类之外,RPN还试图收紧目标周围的anchor boxes的中心和大小。这称为边界框回归。为此,需要生成目标,并且需要针对反向传播计算损失。取从ground truth box中心到anchor box的距离向量,并对其大小进行归一化处理。这是中心的目标delta矢量。尺寸目标是anchor box上每一维度的地面真实尺寸比的对数。损失是通过使用一个称为Smooth L1损失的表达式计算的。
L1的常规损失(例如范数或绝对值)在0时是不可微的。Smooth L1损失通过使用接近0的L2损失来克服这一点.L2损失的程度由称为sigma的参数调整。在数学上,公式看起来像下面的伪代码。图5显示了Smooth L1损失与标准(d)的关系图。
if abs(d) < 1/sigma**2
loss = (d*sigma)**2 /2
else
loss = abs(d)?—?1/(2*sigma**2)
反向传播的损失是对RPN进行训练的常用方法。RPN可以自行训练,也可以与检测网络联合训练。
训练检测网络
检测网络可以看作是用于生成特征的分类网络的删除层(顶部)。因此,在训练之前,可以从该网络预先加载初始权重。
训练检测网络类似于RPN。首先,计算NMS在RPN之后针对每个ground truth边界框生成的所有2000个左右的ROI的IOU。然后根据相应的阈值将ROI标记为前景或背景。然后从前景和背景中选择固定数量(例如256个)ROI。如果没有足够的前景和/或背景ROI来填充固定数量,则随机复制一些ROI。
根据ROI的大小将特征裁剪(和缩放)到14x14(最终在进入检测网络之前最大化为7x7)(为此,ROI宽度和高度按比例缩放到特征尺寸)。图6给出了覆盖在特征图像上的ROI的示例。每个图像的裁剪特征集作为批处理通过检测网络。每个裁剪特征的最终密集层输出,每个类的分数和边界框(例如256 x C,256x4C,one-hot编码形式,其中C是类的数量)。
为了生成检测网络分类的标签,计算了所有ROIs和ground truth框。根据IOU阈值(例如,在0.5以上的前景,以及在0.5和0.1之间的背景),为ROIs的子集生成标签。RPN的不同之处在于这里有更多的类。类是用稀疏形式编码的,而不是one-hot编码。遵循与RPN目标生成类似的方法,也生成边界框目标。但是,这些目标都是前面提到的紧凑形式,因此扩展为用于计算损失的one-hot编码。
损失计算再次类似于RPN网络的损失计算。对于分类,使用稀疏交叉熵,对于边界框,使用 Smooth L1 损失。与RPN损失的区别在于需要考虑更多的类(比如20个包括背景),而不仅仅是2个(前景和背景)
结论:
Faster-RCNN中有3个独立的神经网络 - 特征网络,区域建议网络和检测网络。复杂性在于 - 如何生成目标和标签,如何计算损失,是否共同或单独训练等。
本文暂时没有评论,来添加一个吧(●'◡'●)