用前一个阶段的输出,作为后一个阶段的输入,且标准越来越严格。
1. 数据层面:样本分布的改变
这是最核心的动机。在训练检测器时,网络需要学习区分"前景(物体)"和"背景"。
-
标准检测器 :用一个固定的 IoU 阈值 (比如 0.5)来定义什么是正样本(好框)。问题是:输入给检测头的框质量参差不齐,有的很准,有的很偏。网络很难同时学好如何精修所有质量的框。
-
Cascade(级联)的作用:
-
第一阶段 :输入的是粗糙的框(质量较低),用较低的阈值(如 0.5)训练,负责把框大致挪到物体附近。
-
第二阶段 :接收第一阶段精修过的框(质量变高了),用更高的阈值(如 0.6)训练,负责进一步校准位置。
-
第三阶段 :输入已经是比较准的框,用更严格的阈值(如 0.7)训练,负责精细微调边缘。
-
2. 逻辑层面:阶梯式的递进
你可以把它类比成 质检流水线:
| 阶段 | 类比场景 | 操作目标 | 标准(IoU) |
|---|---|---|---|
| 第一级 | 粗检 | 大致框出物体范围 | 比较宽松 (0.5) |
| 第二级 | 复检 | 修正明显的位置偏差 | 比较严格 (0.6) |
| 第三级 | 精修 | 贴合物体真实边缘 | 非常严格 (0.7) |
3. 与 PointRend 的配合
-
Cascade 负责在框(Bbox)的维度上提供高质量、定位极准的检测框。
-
PointRend 依赖于这个准的框 ,才能在框内安心地对边缘像素进行精细渲染。
如果框本身就歪了(比如只框住了半只猫),PointRend 再厉害也只能渲染出半只猫的精细边缘。Cascade 就是保证了这个"画布"(框)的准确性。
🧠 核心实现原理:为何"级联"如此有效?
Cascade R-CNN 的实现,主要是为了解决目标检测中一个核心矛盾:单一检测器难以对所有质量的候选框都达到最优。如果 IoU 阈值设得低(如 0.5),会引入大量噪声;设得高(如 0.7),则正样本骤减导致过拟合。
它的实现核心可以用两点来概括:
-
针对性的"专家"检测器
它不期望一个检测器解决所有问题。相反,它级联了多个检测器,每个检测器都基于不同的 IoU 阈值训练,因此各自成为处理特定质量候选框的"专家"。
-
第一阶段:用 0.5 的 IoU 阈值训练,它的任务是进行初步筛选,框出物体大致位置。
-
第二阶段:用 0.6 的 IoU 阈值训练,它接收上一阶段精修过的框,进一步校准。
-
第三阶段:用 0.7 的 IoU 阈值训练,专注于最终的精修,以产出高质量的检测框。
-
-
训练与推理的高度一致
这是它与"迭代式边界框回归(Iterative BBox)"最根本的区别。Cascade R-CNN 在训练和推理时,都使用相同的级联流程,让数据分布保持高度一致,从而显著提升了精度。
整个架构可以分解为三个关键部分:
-
特征提取:骨干网络 (Backbone) 与 RPN
-
这和标准的双阶段检测器(如 Faster R-CNN)一样。首先由骨干网络(如你模型中的 ResNet-50)提取整张图片的深度特征。
-
然后,区域提议网络(RPN) 会基于这些特征生成一批初始的、相对粗糙的候选框(B0)。这些框"大概"圈出了物体,但定位还不够准。
-
-
逐级精修:级联检测头 (Cascade Heads)
-
这是 Cascade R-CNN 的灵魂所在。它由多个(通常是3个)结构相同但参数独立的检测头组成,顺序排列。
-
数据流:第一个检测头(H1)接收 RPN 生成的候选框(B0),对其进行分类和回归,输出精修后的框(B1)。接着,H1 的输出(B1)会作为第二个检测头(H2)的输入,H2 再进行一次精修,输出 B2,以此类推。
-
关键配置:每个检测头在训练时使用的正负样本 IoU 阈值是递增的。比如,H1 的阈值设为 0.5,H2 为 0.6,H3 为 0.7。这就确保了 H2 天生就比 H1 对边界框的质量要求更严格。
-
-
输出与训练:损失函数
-
在训练阶段,每个检测头都独立计算自己的分类和回归损失,然后将所有阶段的损失相加进行反向传播,实现端到端训练。
-
在推理阶段,最后一个检测头的输出(C3 & B3)会被作为最终结果
-