论文阅读《Incremental Few-Shot Object Detection》

本文介绍了一种增量学习的框架——ONCE,用于小样本目标检测任务。该方法基于CentreNet,通过解耦class-generic和class-specific模块,实现对新类别的增量学习,避免了重复计算和数据隐私问题。ONCE包含特征提取器、对象定位器和类码生成器,其中类码生成器通过元学习训练,能用少量Novel数据更新模型。实验表明,ONCE在非增量和增量学习场景下都表现出有效性和可行性。

Background & Motivation

目标检测领域一阶段和二阶段的网络都不是增量学习的模式,本文的方法是基于一阶段的 CentreNet。小样本分类任务的方法各式各样,其思想应该是小样本检测任务的创新源泉。文章提出了一个增量学习的范式(Incremental Few-Shot Detection,iFSD):

  • 使用 Base 数据完成对模型的预训练。
  • 这个模型部署到设备上后,设备应该能随时接收数据量很少的 Novel 数据完成增量训练,并不影响其在 Base 数据上的精度。
  • 这个增量训练不应需要太多的计算、存储以及内存开销,因为这个设备往往很 source-limited。

之前没有增量学习的模式的小样本检测方法,之前的做法会带来巨大且重复的计算开销,同时牵涉到了数据隐私的问题。

选择 CentreNet 很重要的一个原因是其遵循了 class-specific 的范式:

For few-shot object detection in particular, a key merit of CentreNet is that each individual class maintains its own prediction heatmap and makes independent detection by activation thresholding.

因此很容易将 Novel 数据的特征通过增量学习添加到模型中,Novel 数据中的类别应该是 order-free 并且 combination-insensitive。CentreNet 的结构图如下所示:

将传统的检测任务变为中心点和 b

复现《Learning with Fantasy: Semantic-Aware Virtual Contrastive Constraint for Few-Shot Class-Incremental Learning》这篇论文可按以下步骤进行: ### 1. 准备工作 - **获取代码**:该论文的代码地址为https://github.com/zysong0113/SAVC ,可从该地址下载代码到本地 [^2]。 - **明确任务**:论文主要解决少样本类增量学习(Few-shot class-incremental learning,FSCIL)问题,即在有限样本下持续学习新类别且不遗忘旧类别的分类任务 [^3]。 ### 2. 数据处理 - **初始数据处理**:利用初始样本充足的训练数据训练特征提取器。对初始训练样本进行数据增强(增强次数和顺序确定)以扩充初始数据集。例如,可采用特定的图像旋转、翻转等操作,且后续所有增强都按此方式进行 [^4]。 - **增量数据处理**:计算增量训练数据(少样本)中新增类别的原型,通过数据增强和特征提取后得到特征的均值来确定 [^4]。 ### 3. 模型训练 - **特征提取器训练**:采用MoCo的学习策略构建对比损失,结合标准交叉熵分类损失更新模型。扩充版的初始训练数据集经训练好的特征提取器(训练好后冻结)输出特征,并据此计算各初始类别不同增强方式下的原型(特征均值) [^4]。 - **联合优化**:论文采用分类对比任务联合优化框架,同时还涉及每个增量会话的微调更新 [^2]。 ### 4. 模型测试 - **相似度计算与分类**:对测试样本进行数据增强,将增强后的测试样本输入特征提取器得到特征,并对测试特征和所有原型进行标准化。计算测试特征与各原型的平均相似度,将测试样本分类为平均相似度最高的类 [^4]。 ### 代码示例 由于不清楚代码仓库中的具体实现,以下是一个简单示意代码说明数据增强和原型计算的过程: ```python import torch import torchvision.transforms as transforms # 数据增强示例 transform = transforms.Compose([ transforms.RandomRotation(10), transforms.RandomHorizontalFlip() ]) # 假设初始训练数据 initial_data = torch.randn(100, 3, 32, 32) # 100个样本,3通道,32x32图像 augmented_data = [] for sample in initial_data: augmented_sample = transform(sample) augmented_data.append(augmented_sample) augmented_data = torch.stack(augmented_data) # 计算原型示例 def calculate_prototype(data): return torch.mean(data, dim=0) prototype = calculate_prototype(augmented_data) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值