VarifocalNet_ An IoU-aware Dense Object Detector

本文介绍了一种新的目标检测方法,提出IACS(IoU-aware classification score),将分类和定位精度融合,通过设计VarifocalLoss解决类别不平衡问题。研究者采用星形框特征表示和边界框精炼,构建了VarifocalNet,优化了FCOS架构。实验结果显示了显著的性能提升。

研究背景

现在的object detector无论是one-stage还是two-stage,通常都是先生成一组具有分类score的bbox集,然后通过NMS进行后处理来去除同一目标上面的重复bbox。在NMS中,FCOS之前一般使用cls score对bbx进行排序,这损害了检测性能,因为cls score并不总是很好的表示bbox的好坏。为了解决这个问题,之前要么多预测一个IoU分数,要么预测一个centerness score(FCOS),然后将其乘以cls score,将最后的结果作为NMS的排序依据。这些方法可以缓解分类分数与目标定位精度之间的不匹配问题。然而,它们是次优的,因为将两个不完美的预测相乘可能会导致更差的秩基。此外,增加一个额外的network branch来预测 localization score并不是一个优雅的解决方案,而且会增加额外的计算负担。
基于上述说明,作者提出了他的问题:难道非得预测一个额外的 localization score?我们难道不能将其合并到cls score中吗?也就是说,预测一个localization-aware或IoU-aware的cls (IACS:IoU-aware classification score),该分数同时表示某个对象类的存在和生成的包围框的定位精度。

解决思路

IACS-IoU-Aware Classification Score

IACS定义为分类得分向量的标量元素,其中ground-truth类标签位置的值为预测边界框与其ground truth之间的IoU,其他位置为0。如图所示,不是学习预测一个bounding box的类标签(a),而是学习IoU-aware分类得分(IACS)作为检测分数,融合了目标存在置信度和定位精度(b)。
image.png

Varifocal Loss

本文设计了一种新的Varifocal Loss来训练密集目标检测器来预测IACS。由于它的灵感来自Focal Loss,这里也简要回顾一下Focal Loss。Focal Loss的设计是为了解决密集目标检测器训练中前景类和背景类之间极度不平衡的问题。定义如下。

### 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、付费专栏及课程。

余额充值