深入理解 Faster R - CNN:从原理到架构
1. 目标检测评估指标
在目标检测中,预测的边界框的 (x, y) 坐标很难与真实的边界框坐标完全匹配。这是因为模型的各种参数,如特征提取层、锚点放置、损失函数等,使得预测框和真实框完全匹配几乎是不现实的。
为了评估预测边界框的性能,我们需要定义一个评估指标。交并比(IoU)就是这样一个优秀的指标,它奖励与真实边界框高度重叠的预测边界框。IoU 值越高,说明预测框与真实框的重叠程度越高。
计算单类的平均精度时,我们需要确定该类所有数据点的 IoU,然后除以该类的总标签数,得到平均精度。而平均精度均值(mAP)则是计算所有 N 类的平均 IoU,然后取这 N 个平均值的平均值。在阅读目标检测论文时,结果通常以 mAP 表示。通常我们会报告 mAP@0.5,即测试集中的对象要被标记为“正检测”,其与真实框的 IoU 至少要达到 0.5,不过这个 0.5 的值是可以调整的。
以下是评估指标的总结表格:
| 评估指标 | 定义 | 用途 |
| ---- | ---- | ---- |
| IoU | 预测边界框与真实边界框的交集面积与并集面积之比 | 评估单个预测框与真实框的重叠程度 |
| mAP | 所有类别的平均精度的平均值 | 综合评估目标检测模型在所有类别上的性能 |
2. R - CNN 系列算法的发展历程
2.1 R - CNN
R - CNN(区域卷积神经网络)是目标检测领域的经典算法。它的工作流程包括以下四个步骤:
1.
输入图像
:将待检测的图像输入到算法中。
2.
提取区域建议
:使用选择性搜索(Selective Search)等算法提取图像中可能包含对象的区域。选择性搜索算法能智能地在不同尺度和位置检查输入图像,大大减少了要发送到网络进行分类的建议区域的数量。
3.
特征提取
:使用预训练的卷积神经网络(如在 ImageNet 上训练的网络)对每个建议区域进行特征提取。
4.
分类
:使用支持向量机(SVM)对提取的特征进行分类。
R - CNN 与传统的目标检测器(如 HOG + 线性 SVM 框架)有相似之处,但它使用了更智能的选择性搜索算法和卷积神经网络提取的特征。然而,R - CNN 的主要问题是速度极慢,而且它并没有通过深度学习来学习定位,而是将定位任务交给了选择性搜索算法。
graph LR
A[输入图像] --> B[提取区域建议]
B --> C[特征提取]
C --> D[分类]
2.2 Fast R - CNN
大约在 R - CNN 发表一年半后,Fast R - CNN 算法出现。它仍然使用选择性搜索来获取建议区域,但引入了感兴趣区域池化(ROI Pooling)。在 Fast R - CNN 中,我们将 CNN 应用于整个输入图像,提取特征图,然后通过 ROI 池化从特征图中提取固定大小的窗口,并使用这些特征来获得最终的类别标签和边界框。
Fast R - CNN 的主要优点是网络现在可以进行端到端的训练,但在推理时,由于依赖选择性搜索算法,性能仍然受到很大影响。其工作流程如下:
1. 输入图像和相关的真实边界框。
2. 提取特征图。
3. 应用 ROI 池化并获得 ROI 特征向量。
4. 使用两组全连接层获得类别标签预测和每个建议的边界框位置。
2.3 Faster R - CNN
Fast R - CNN 发表一个多月后,Faster R - CNN 问世。它引入了区域建议网络(RPN),将区域建议直接集成到 R - CNN 架构中,从而消除了推理前运行选择性搜索的需求。
在 Faster R - CNN 中,输入图像通过预训练的 CNN(即基础网络)提取特征,这些特征同时被发送到 RPN 和 ROI 池化模块。RPN 的作用是确定图像中可能存在对象的位置,它会在图像上均匀放置不同尺度和宽高比的锚点,然后检查这些锚点,输出它认为可能存在对象的建议区域。RPN 并不直接对 ROI 进行标记,而是计算其“对象性分数”,判断该区域是否像某种对象。
Faster R - CNN 的整个架构是端到端可训练的,完整的目标检测流程都在网络内部完成,包括区域建议、特征提取、计算对象的边界框坐标和为每个边界框提供类别标签。根据所使用的 GPU 和基础架构,Faster R - CNN 现在可以达到约 7 - 10 帧每秒(FPS),向基于深度学习的实时目标检测迈出了一大步。
以下是 R - CNN 系列算法的对比表格:
| 算法 | 区域建议算法 | 特征提取 | 分类器 | 端到端训练 | 速度 |
| ---- | ---- | ---- | ---- | ---- | ---- |
| R - CNN | 选择性搜索 | 预训练 CNN | SVM | 否 | 慢 |
| Fast R - CNN | 选择性搜索 | 预训练 CNN + ROI 池化 | 全连接层 | 是,但依赖选择性搜索 | 一般 |
| Faster R - CNN | RPN | 预训练 CNN + ROI 池化 | 全连接层 | 是 | 较快 |
3. Faster R - CNN 架构的核心组件
3.1 基础网络
基础网络通常是一个针对特定分类任务预训练的卷积神经网络,用于特征提取。在目标检测中,我们通常使用在 ImageNet 数据集上预训练的 CNN。原始的 Faster R - CNN 论文使用 VGG 和 ZF 作为基础网络,而现在我们通常会使用更深、更准确的网络,如 ResNet,或者为资源受限设备使用更小巧的网络,如 MobileNet。
目标检测网络应该是全卷积的,而不是全连接的。全卷积神经网络不包含通常在网络末端用于输出预测之前的全连接层。这样的网络有两个主要优点:一是速度快,因为只涉及卷积操作;二是能够接受任意空间分辨率的图像,只要图像和网络能装入内存即可。
对于像 VGG 这样原本有全连接层的网络,我们可以通过传播输入图像到特定的卷积(或池化)层并停止,来获取我们需要的特征图,而不需要将图像通过整个网络。这个特征图将在后续的区域建议网络和 ROI 池化模块中使用。
3.2 锚点
在传统的目标检测流程中,我们会使用滑动窗口 + 图像金字塔或类似选择性搜索的算法来生成建议区域。为了实现基于深度学习的端到端目标检测器,我们需要定义一种生成建议 ROI 的方法,锚点就是这样一种解决方案。
锚点的生成过程如下:
1.
均匀采样点
:在输入图像上均匀采样点,例如在原始 Faster R - CNN 实现中,每隔 16 像素采样一个点。
2.
创建锚点
:在每个采样点周围创建一组固定的边界框,即锚点。每个采样点周围会生成 9 个锚点,这些锚点由不同的尺度(64×64、128×128、256×256)和宽高比(1 : 1、2 : 1、1 : 2)组合而成,这样可以覆盖输入图像中所有可能的对象大小和尺度。
然而,生成的锚点数量可能会非常大。例如,在 600×800 的图像上使用 16 像素的步长,会得到 1989 个位置,每个位置周围有 9 个锚点,总共就有 17901 个边界框位置需要 CNN 评估。不过,通过区域建议网络(RPN),我们可以大大减少候选建议窗口的数量。
graph LR
A[输入图像] --> B[均匀采样点]
B --> C[创建锚点]
C --> D[RPN 筛选]
综上所述,Faster R - CNN 通过引入 RPN 和锚点机制,在目标检测的速度和性能上取得了显著的提升。它的架构虽然复杂,但各个组件协同工作,为实现高效的端到端目标检测提供了有力的支持。
4. 区域建议网络(RPN)详解
区域建议网络(RPN)是 Faster R - CNN 架构中的关键组件,它的主要作用是生成可能包含对象的建议区域,从而减少后续处理的工作量。
4.1 RPN 的工作原理
RPN 基于基础网络提取的特征图进行工作。它在特征图上均匀地放置不同尺度和宽高比的锚点,然后对每个锚点进行评估,判断该锚点对应的区域是否包含对象。具体步骤如下:
1.
锚点生成
:如前文所述,在特征图上按照一定的间隔均匀采样点,每个采样点周围生成 9 个不同尺度和宽高比的锚点。
2.
特征提取
:对于每个锚点,RPN 会提取其对应的特征。
3.
对象性分数计算
:RPN 会为每个锚点计算一个“对象性分数”,用于判断该锚点对应的区域是前景(包含对象)还是背景。这个过程可以看作是一个二分类问题。
4.
边界框回归
:除了判断对象性,RPN 还会对锚点的边界框进行回归,预测其偏移量,从而得到更精确的边界框位置。
graph LR
A[特征图] --> B[锚点生成]
B --> C[特征提取]
C --> D[对象性分数计算]
C --> E[边界框回归]
D --> F[筛选前景锚点]
E --> F
4.2 RPN 的优势
RPN 的引入带来了诸多优势:
-
减少计算量
:通过在特征图上进行操作,RPN 可以快速筛选出可能包含对象的区域,大大减少了后续需要处理的候选区域数量。
-
端到端训练
:RPN 可以与整个 Faster R - CNN 架构一起进行端到端的训练,使得模型能够更好地学习到对象的特征和位置信息。
-
提高检测速度
:由于减少了不必要的计算,RPN 使得 Faster R - CNN 在检测速度上有了显著的提升。
5. 感兴趣区域池化(ROI Pooling)
感兴趣区域池化(ROI Pooling)是 Fast R - CNN 和 Faster R - CNN 中用于处理不同大小的建议区域的重要技术。
5.1 ROI Pooling 的作用
在目标检测中,不同的建议区域可能具有不同的大小和形状,而后续的全连接层通常需要固定大小的输入。ROI Pooling 的作用就是将不同大小的建议区域转换为固定大小的特征向量,以便输入到全连接层进行分类和边界框回归。
5.2 ROI Pooling 的工作流程
ROI Pooling 的工作流程如下:
1.
确定建议区域
:由 RPN 生成的建议区域会被传递给 ROI Pooling 层。
2.
划分网格
:对于每个建议区域,将其划分为固定大小的网格。例如,如果要将建议区域转换为 7×7 的特征向量,则将该区域划分为 49 个小网格。
3.
最大池化
:在每个小网格内进行最大池化操作,提取该网格内的最大值作为该网格的特征值。
4.
输出固定大小的特征向量
:将所有网格的特征值组合起来,得到一个固定大小的特征向量。
以下是 ROI Pooling 的简单示例表格:
| 步骤 | 操作 | 说明 |
| ---- | ---- | ---- |
| 1 | 确定建议区域 | 接收 RPN 生成的建议区域 |
| 2 | 划分网格 | 将建议区域划分为固定大小的网格 |
| 3 | 最大池化 | 在每个网格内进行最大池化操作 |
| 4 | 输出特征向量 | 组合所有网格的特征值得到固定大小的向量 |
6. Faster R - CNN 的训练与推理
6.1 训练过程
Faster R - CNN 的训练过程是一个端到端的过程,主要包括以下几个步骤:
1.
数据准备
:收集包含对象的图像数据集,并为每个对象标注真实的边界框和类别标签。
2.
基础网络初始化
:使用预训练的 CNN 作为基础网络,例如在 ImageNet 上预训练的 ResNet。
3.
RPN 训练
:在基础网络提取的特征图上训练 RPN,使其能够准确地生成建议区域。
4.
联合训练
:将 RPN 生成的建议区域传递给 ROI Pooling 层,然后与基础网络一起进行联合训练,优化分类和边界框回归的性能。
5.
损失函数优化
:使用合适的损失函数,如交叉熵损失用于分类,平滑 L1 损失用于边界框回归,通过反向传播算法更新网络参数。
训练流程的简要列表如下:
1. 数据准备
2. 基础网络初始化
3. RPN 训练
4. 联合训练
5. 损失函数优化
6.2 推理过程
在推理阶段,Faster R - CNN 的工作流程如下:
1.
输入图像
:将待检测的图像输入到基础网络。
2.
特征提取
:基础网络提取图像的特征图。
3.
建议区域生成
:RPN 根据特征图生成可能包含对象的建议区域。
4.
ROI Pooling
:对建议区域进行 ROI Pooling 操作,得到固定大小的特征向量。
5.
分类和边界框回归
:通过全连接层对特征向量进行分类和边界框回归,得到最终的检测结果。
推理流程的 mermaid 流程图如下:
graph LR
A[输入图像] --> B[特征提取]
B --> C[建议区域生成]
C --> D[ROI Pooling]
D --> E[分类和边界框回归]
E --> F[输出检测结果]
7. 总结
Faster R - CNN 是目标检测领域的重要算法,它通过引入区域建议网络(RPN)和感兴趣区域池化(ROI Pooling)等技术,实现了端到端的目标检测,在速度和性能上都取得了显著的提升。其核心组件包括基础网络、RPN、锚点和 ROI Pooling,各个组件协同工作,为高效的目标检测提供了有力支持。在实际应用中,我们可以根据具体的需求选择合适的基础网络和参数,进一步优化 Faster R - CNN 的性能。同时,随着深度学习技术的不断发展,Faster R - CNN 也在不断改进和完善,为目标检测领域带来更多的可能性。
超级会员免费看
15

被折叠的 条评论
为什么被折叠?



