目标检测:VarifocalNet: An IoU-aware Dense Object Detector(CVPR2021)

VarifocalNet是针对目标检测网络中分类与定位相关性低的问题提出的新方法。通过VarifocalLoss,星形边界框特征表达和精细化边界框调整,提高检测器的性能。实验表明,这种IoU感知的分类得分能有效避免高精度定位框被NMS误删,从而提升平均精度(AP)。

VarifocalNet: An IoU-aware Dense Object Detector
在这里插入图片描述

Motivation

文中第三章作者基于FCOS+ATSS网络的实验结果是本文的动机,首先对这个实验中的每个AP逐一解析:在这里插入图片描述

1	38.5:训练时没有centerness(ctr)分支
2	39.2:训练和测试时加入ctr分支,该方法设为baseline
3	41.1:基于baseline,把测试时的ctr换成label值,AP小幅提升0.9
4	43.5:基于baseline,把测试时的ctr换成预测框与gt框的iou,AP提升了4.3,比使用ctr高。
5	56.1:没有ctr分支,将测试时的bbox推理结果替换为gt bbox,分类结果仍是网络的预测结果
6	56.3:与上一个为对比实验,训练测试时多加入ctr,多引入的ctr只将AP提升了0.2
7	43.1:没有ctr分支,将预测的分类结果替换为gt的类别标签,AP为43.1,只比实验14.6
8	58.1:与上一个为对比实验,多引入ctr分支,AP提升了15
9	74.7:没有ctr分支,将预测的分类结果替换为gt与预测框的IoU。
'''基于实验1,对比该实验和实验5,说明定位很准的框已经被预测
### VarifocalNet 的工作原理 VarifocalNet 是一种基于 FCOS 和 ATSS 架构的 IoU 感知密集目标检测器,旨在通过改进候选框排序机制提升检测性能。其核心创新在于引入 IACS(IoU-Aware Confidence Score),并设计了新的损失函数——Varifocal Loss 以及星形锚框特征表示方法。 #### 1. **IACS 定义** IACS 被定义为分类得分向量中的标量元素,在 ground-truth 类标签位置上的值等于预测边界框与其对应的 ground truth 边界框之间的 IoU 值,而其他位置则设置为零[^3]。这种方法使得模型能够同时考虑目标存在的置信度和定位精度,从而提供更加可靠的候选框排序依据。 #### 2. **Varifocal Loss** 为了优化 IACS 预测,作者提出了一种新的损失函数——Varifocal Loss。该损失函数不仅关注正样本与负样本之间的区分能力,还进一步强调高 IoU 正样本的重要性。具体而言,Varifocal Loss 可以动态调整不同类别样本对总损失的影响权重,从而使模型更好地聚焦于高质量的目标区域[^1]。 以下是 Varifocal Loss 的计算公式: ```python def varifocal_loss(pred, target, beta=2.0): pt = torch.where(target == 1, pred, 1 - pred) focal_weight = (target * (1 - pred)**beta + (1 - target) * pred**beta).detach() loss = F.binary_cross_entropy_with_logits( pred, target, reduction='none') * focal_weight return loss.mean() ``` #### 3. **星形锚框特征表示** 传统的锚框表示方式可能无法充分捕捉复杂场景下的目标形状变化。因此,VarifocalNet 提出了星形锚框特征表示法,通过对初始锚框进行微调来适应实际目标的位置偏移和尺度差异。这种表示方法有助于提高模型对目标边界的敏感程度,并增强最终预测的质量。 #### 4. **整体框架结构** VarifocalNet 结合上述技术模块构建了一个完整的端到端解决方案。它继承自 FCOS+ATSS 架构,但在以下几个方面进行了显著改进: - 使用 IACS 替代传统分类分数; - 引入 Varifocal Loss 进行更高效的监督信号传递; - 利用星形锚框特征表示改善回归分支的表现。 这些改动共同作用下,使 VarifocalNet 成功实现了更高的 AP(Average Precision)指标表现[^2]。 --- ### 实现细节 在 PyTorch 中实现 VarifocalNet 主要涉及以下部分: 1. 数据预处理:加载图像数据集并对输入图片执行标准化操作。 2. 模型搭建:按照论文描述创建主干网络(如 ResNet)、FPN 层次化特征提取层以及头部组件(包括分类头、回归头等)。 3. 训练流程配置:设定超参数(学习率调度策略、批次大小等),指定使用的损失函数形式(即 Varifocal Loss),最后完成前向传播与反向梯度更新过程。 下面给出一段简化版代码片段展示如何初始化模型及定义主要组成部分之一—分类头的设计思路: ```python import torch.nn as nn class VFNetClsHead(nn.Module): def __init__(self, num_classes, in_channels): super(VFNetClsHead, self).__init__() self.conv_cls = nn.Conv2d(in_channels, num_classes, kernel_size=3, padding=1) def forward(self, x): cls_score = self.conv_cls(x) return cls_score.flatten(start_dim=2).permute(0, 2, 1) ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值