论文阅读-ATSS

Abstract

  • 论文验证了造成anchor_base和anchor_free两种检测方法精度差异的原因:如何定义正负样本.
  • 进而提出了Adaptive Training Sample Selection方法,根据样本特性动态调整正负样本的 IoU threshold.
  • 验证了不需要在featurn map的每个位置设置多个anchor,单个anchor也不会掉点.
  • 源码参考:https://github.com/sfzhang15/ATSS.
  • 论文链接:https://arxiv.org/abs/1912.02424

Introduction

说明了anchor_base和anchor_free检测器的3个不同点,以RetinaNet和FCOS为例:

  1. 特征图上每一个位置的的anchor数目不同:RetinaNet多个anchor,FCOS只有1个point.
  2. 正负样本的定义方式不同:RetinaNet用IOU阈值来定义;FCOS利用空间位置和尺度来定义.
  3. dtbox回归方式不同:RetinaNet从anchor_box回归;FCOS从anchor_point回归.

Related Work

  1. 排除其他trik的影响,对RetinaNet和FCOS进行训练,精度如下,AP差异为0.8%
  1. 让RetinaNet和FCOS采用相同的正负样本采样的方式进行对比,精度结果如下:
    同时采用IOU或者空间尺度信息会得到相同的效果,得出了造成anchor_base和anchor_free两种检测方法精度差异的原因:如何定义正负样本的结论.
    除此之外,也尝试了从anchor_box和anchor_point进行回归,结论是精度无差异.
  1. 基于以上结论提出了 Adaptive Training Sample Selection,具体实现步骤如下图:
  • 之前的正负样本选择方式(IOU或者空间尺度限制)都有超参数的限制,超参数的值会对检测器的结果造成很大影响,为了消除超参数的影响,提出了以上算法.
  • k值的设定也是鲁棒的,从7-19,精度差异不大,完全可以认为是hyperparameter_free的,作者选择的值是9.
  • 为什么IOU threshold = IOU均值+IOU标准差:
    IOU的标准差是为了选择出最合适的FPN曾:标准差大就意味者存在一个特别适合的FPN曾用来检测次对象,小就意味着不存在.IOU均值是为了筛选个好的正样本出来,所以IOU阈值用了他们的和.
  • 根据统计,正样本数量大概为0.2kL
  • ATSS会提升大概2个点
### 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) ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值