[论文笔记] Few-Shot Learning with Global Class Representations
0. 写在前面的话
-
解决的问题
- 由于基类和新类之间存在严重的样本不均衡问题,导致容易过拟合到基类数据
- 训练模型的时候,使用来自novel class的样本。
-
新颖点
- 在few-shot里面使用类原型。
- 有点聚类的思想
-
训练数据包括来自novel class的样本。
-
面临的困难- base classes 与 novel classes 样本数量的不对等
- 数据扩充
- 元学习策略
项目代码以及开源->网址
iccv 2019
1,概况
为了解决few-shot中由于基类和新类之间存在严重的样本不均衡问题,导致容易过拟合到基类数据的问题,作者将新类样本加入至训练集对模型进行训练。此外,作者将类原型的概念引入few-shot,但相比于之前学习阶段性类别表征的方法,本文使用的是全局类别表征直接与所有基类和新类训练样本进行比较,更具可分辨性。
2,具体框架介绍
2.1 Registration Module
输入&输出
-
输入
- 局部类原型{rcj, cj ∈ \in ∈ Ctrain}
- all global class representations G = {gcj, cj ∈ \in ∈ Ctotal}
-
输出
- 一个矩阵,其中每一列向量
代表 ith visual features 与 G 全局类原型的相似度
- 一个矩阵,其中每一列向量
具体步骤
(在我看来,这个作用在于:就是用局部类原型计算和全局类原型之间的相似度,有利于后面选出最合适的全局类原型)
2.2 Sample Synthesis Module
输入&输出
- 输入
- support集合中对应novel类的visual 特征
- 输出
- 代表这个类的局部类原型
具体步骤
-
首先通过随机裁剪、随机翻转和数据幻觉来将每一个novel class的数据扩充至kt
-
对于每一个novel class, 从第一步得到的kt 样本中随机取kr个,进行如下操作
(这个模块的作用在于 生成support集中 novel 类样本的局部类原型)
2.3 整体框架介绍
- 首先用每一个类中所有样本的视觉特征的平均值初始化全局类原型G
- 构造局部类原型{rcj, cj
∈
\in
∈ Ctrain}
- 对于base classes,直接取support集合中对应类样本视觉特征的平均值
- 对于novel classes, 使用Sample Synthesis Module生成
- 把局部类原型当作输入,通过registration module 认领对应的全局类原型
- 其中为了可微性(梯度下降优化参数),采取软优化,认领 ξ \xi ξi = Vi G,而非直接argmaxVi(G)
- 计算query集合的视觉特征到全局类原型的欧氏距离,最小者对应的类别为最终结果
3,损失
registration loss Lreg
CE(.) 代表交叉熵损失
classifacation loss Lfsl
4,部分实验效果
4.1 标准小样本学习
作者从 miniImageNet 中取 64 类用作 training,16 类用作 validation,20 类用作 testing。待分类的测试图片只从新类中选取。1 shot 表示在训练集中每个新类有 1 个样本,5 shot 表示每个新类有 5 个样本。每次预测需要从 5 个候选类中选择一个作为给定图片的分类。
4.2 广义小样本学习
作者仍在 miniImageNet 上进行实验,具体设定和小样本学习的设定相同。唯一的区别在于测试样本同时从基类和新类抽取。每个新类包含 5 个训练样本。衡量指标有三个:
- accb:基类(base)测试样本的分类准确度;
- accn:新类(novel)测试样本的分类准确度;
- acca: :所有(all)测试样本的分类准确度。