Cascade R-CNN论文笔记

CascadeR-CNN是一种用于提升物体检测精度的方法,通过一系列递增IoU阈值的检测器,解决传统两步检测模型在不同质量水平假设上的次优问题。实验显示,与Faster R-CNN和Mask R-CNN相比,CascadeR-CNN在检测性能上有显著提高。

1 简介

本文依据《Cascade R-CNN: Delving into High Quality Object Detection》翻译总结。Cascade R-CNN探究高质量物体检测。

物体检测有两种方法,一种是单步的,像YOLO、SSD是单步物体识别模型。还有一种是两步的,如R-CNN系列。

对于R-CNN物体检测方法,分为两步,第一步是proposal检测者(detector),产生假设(hypothesis)/box,第二步是region-wise检测者(detector)/分类器。

其中,IoU(intersection over union)阈值用来区分正的或负的box。采用0.5阈值的话,通常会产生噪声检测。但是如果增加阈值,又倾向于降低检测的能力,有两个原因吧,一是因为指数级别消失的正样本导致训练中的过拟合,二是预测时IoU(region-wise检测者对于该IoU是最优的)与输入假设间的不匹配。

如下图a,阈值u=0.5时会检测出来多余的box。但这些多余的box也许也富含丰富的信息。

一个单独的region-wise检测者仅在一个单独的质量水平上是最优的。高质量的region-wise检测者仅仅对高质量的假设hypothesis是最优的,当它们在其他质量水平上的假设hypothesis进行工作时,其可能是次优的。如下图c、d,0.5阈值的region-wise检测者(detector)对低IoU输入有较好的检测能力;0.7阈值的region-wise检测者(detector)对高IoU输入有较好的检测能力
在这里插入图片描述

Cascade R-CNN就是为了克服上面问题提出的,它包括一系列递增IoU阈值的检测者(detector)。

2 物体检测

本文主要是扩展两步检测模型Fast R-CNN。如下图,H0是proposal 子网络,产生检测假设hypothesis,即object proposal。H1是第二步,对第一步的假设hypothesis进行处理,是对region感兴趣的子网络。最后的C、B分别是分类分数(classification score)、bounding box。

在这里插入图片描述

2.1 Bounding box 回归

在这里插入图片描述

避免受尺度等影响,经常换成距离向量。
在这里插入图片描述

因为该损失的值较分类损失会很小,所以距离向量通常用均值和方差归一化。

2.2 分类

在这里插入图片描述

2.3 检测质量

如果IoU高于阈值,样本才会被考虑为分类的样本。所以一个假设x的分类标签是u的函数。如下:
在这里插入图片描述

g_y表示ground truth object g的分类标签。

IoU的阈值u决定着检测者的质量。当u值较高时,正的样例中就包含很少的background,但它是很难来拥有足够的正训练样例。当u值较低时,拥有丰富多样的训练样例,但训练检测者会对拒绝错误的正样例不敏感

一种优化:积分损失integral loss

将各种不同质量水平的损失整合在一起,像积分损失。但这种方法只获得了一点点改进。因为不同损失要在不同数量的正样例上操作。
在这里插入图片描述

一种优化:迭代bbox

这种优化也只是获得了微小的改进。因为不同水平上的regressor f是不同的,如果用相同f不会达到最优。
在这里插入图片描述

3 Cascade R-CNN

3.1 级联的regressor f

在这里插入图片描述

3.2 级联的检测:

在这里插入图片描述

4.实验结果

4.1迭代(iterative)bbox、integral loss结果

如下图a,迭代(iterative)bbox效果不如cascade r-cnn;如下图b,integral loss 并没有比u=0.6好多少。
在这里插入图片描述
在这里插入图片描述

4.2 Cascade stage数量

可以看到采用3个stage就很好,如果4个,AP下降了。

在这里插入图片描述

4.2 Cascade R-CNN结果

可以看到比faster R-CNN和mask R-CNN效果好。
在这里插入图片描述

### Mask R-CNNCascade R-CNN 对于实例分割的支持 #### Mask R-CNN 的实例分割支持 Mask R-CNN 是一种用于实例分割的任务框架,它通过引入一个额外的分支来预测目标掩码(mask),从而实现了像素级的目标检测和分类功能。该模型基于 Faster R-CNN 扩展而来,并在其基础上增加了 mask 预测的功能[^1]。具体来说,Mask R-CNN 使用 RoIAlign 层替代了传统的 RoIPooling 层,以更好地处理浮点数坐标并减少量化误差,这有助于提高掩码预测的质量[^3]。 在实际实现中,Mask R-CNN 的网络结构分为三个主要部分:类别预测、边界框回归以及掩码生成。其中,掩码分支负责生成每个感兴趣区域 (ROI) 的二值掩码,这些掩码可以用来表示对象的具体形状和位置[^4]。因此,Mask R-CNN 完全支持实例分割任务。 #### Cascade R-CNN 的实例分割支持 Cascade R-CNN 主要是针对目标检测精度提升的一种改进方法,其核心思想是通过多阶段的方式逐步优化候选框的位置和类别置信度。尽管原始版本的 Cascade R-CNN 更专注于二维目标检测任务,但它也可以被扩展至实例分割场景下工作。当应用于实例分割时,通常会在最后一个阶段之后加入类似于 Mask R-CNN 中使用的掩码预测模块[^2]。 这意味着如果适当调整架构设计,则 Cascade R-CNN 同样能够完成高质量的实例分割操作。然而需要注意的是,在这种情况下,整个系统的复杂性和计算成本可能会有所增加,因为不仅需要多次迭代更新建议框参数,还需要执行额外的掩码推理过程。 综上所述,无论是 Mask R-CNN 还是经过改造后的 Cascade R-CNN ,两者均具备良好的实例分割能力。 ```python import torch.nn as nn class InstanceSegmentationModel(nn.Module): def __init__(self, backbone, rpn, roi_heads, mask_head=None): super(InstanceSegmentationModel, self).__init__() self.backbone = backbone self.rpn = rpn self.roi_heads = roi_heads self.mask_head = mask_head def forward(self, images, targets=None): features = self.backbone(images.tensors) proposals, proposal_losses = self.rpn(images, features, targets) detections, detector_losses = self.roi_heads(features, proposals, images.image_sizes, targets) if self.mask_head is not None and 'masks' in targets[0]: masks = self.mask_head(features, detections, targets) return detections.update(masks=masks), {**proposal_losses, **detector_losses} return detections, {**proposal_losses, **detector_losses} ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值