【Few-Shot Incremental Learning】ALICE in ECCV 2022 个人理解

文章介绍了一种在数据/任务不断到来且新数据稀缺的背景下,通过类增强、数据增强和AngularPenaltyLoss训练特征提取器,以NearestClassMean进行分类的少样本类增量学习方法。作者强调了在保持对旧数据的回忆能力的同时适应新类的挑战。

一、简介

题目: Few-Shot Class-Incremental Learning from an Open-Set Perspective
会议: ECCV 2022
任务: 数据/任务依次到来,新的数据/任务到来后旧的就不再可获取,并且新的数据相比旧数据可能是稀缺的(例如,旧的类别每类可能有100个样本,但新的类别每类可能只有5个样本),要求模型在学习新数据/任务的同时不要忘记旧数据/任务。
Idea:
(1)利用初始样本充足的训练数据训练一个强大的特征提取器: 首先,通过类增强策略(取自Mixup)创造大量新类;其次,通过数据增强策略(取自SimCLR)创造两个不同的增强样本;最后,通过Angular Penalty Loss(APL,取自cosFace)训练特征提取器。
(2)根据余弦相似度以最近类均值(Nearest Class Mean, NCM)规则进行分类: k k k-shot为例,首先,确定支撑集(Support Set),计算各类特征均值,取与特征均值的余弦相似度最大的 k k k个特征作为原型组成支撑集;其次,确定类特征均值,根据支撑集计算各类特征均值;最后,计算查询特征与各类特征均值的余弦相似度,分类为相似度最大的类。
Note: 该工作是纯粹的少样本类增量学习(Few-Shot Class-Incremental Learning),不执行开放集识别(Open Set Recognition, OSR),但用到了OSR的数据增强策略,详情可参考Mixup in NeurIPS 2019。

框架如图,作者用类增强和数据增量以及APL训练特征提取器,然后根据最近类均值规则进行分类。

二、详情

1. 特征提取器

特征提取器的训练仅使用有充足样本的初始训练集,它所包含的类与后续出现的增量类无重叠。如上图所示,其结构包括Backbone(ResNet18)+ 映射层(两层全连接)+ 分类头(一层全连接)。当训练结束进行特征提取时,映射层和分类头会被移除,Backbone会被冻结。

1.1 类增强

原始Mixup通过合并两个随机图像及它们的标签实现增强,公式如下:
x ~ = λ x i + ( 1 − λ ) x j y ~ = λ y i + ( 1 − λ ) y j \tilde{x}=\lambda x_i+(1-\lambda)x_j \\ \tilde{y}=\lambda y_i+(1-\lambda)y_j x~=λxi+(1λ)xjy~=λyi+(1λ)yj 其中, x ~ \tilde x x~ y ~ \tilde y

复现《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) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fulin_Gao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值