度量学习思路整合
few-shot learning的度量学习方法阅读与总结,目标是找到一篇文章,解决few-shot的以下问题:
在基类上,模型学会区分相似和不相似的实例,从而提高下游任务的性能;
支持集的样本过少,计算得到的类代表原型和实际期望得到的类原型有较大偏差,如何矫正有偏的类原型,进而提高模型分类精度。
1.Prototype Rectification for Few-Shot Learning
1.1 基本信息
2020年,ECCV会议论文
无开源源码
提出了如何减少类原型的偏置、减少support和query dataset之间的分布差。
1.2 方法记录
1.2.1 intra-class bias
为了减少实际计算出的原型和真实原型之间的差距,采用伪标签策略,补充support set
的样本,由此得到更接近真实的原型。具体操作是取top-k
个置信度的未标记样本,加上伪标签,加入support set
一起计算类代表原型,其中为了避免伪标签错分给原型带来大的误差,使用加权和的平均作为修改的原型,权重的计算公式:样本和basic prototypes有更大的余弦相似度,则在修改的原型中有更高占比。
伪标签有一个使用前提,即需要一次性给出某个类的所有未标记样本,不适用于一个个给测试样本的情况。在脑电身份识别上,一个人作为一个类,他的测试样本是否可以一次性获取到?,决定了伪标签是否适用。
1.2.2 cross-class bias
首先两个set被假设为分布在同一个domain中,但support set
和quary set
之间存在分布差,提出为了减少两者的分布差,可以把quary set
朝support set
移动。具体地,文章提出给每个标准化后的quary feature
减小分布差,脑电身份识别,support set用的是登记session的样本,quary set可能用的是另一个session的样本,由于时变性,两者的分布差肯定是存在的,甚至于同一个session,随着人状态的波动,样本之间估计也存在明显的分布差,这个方法可以一试。
2.Free Lunch for Few-shot Learning: Distribution Calibration
2.1 基本信息
2021年,ICLR会议论文
提出从语义相似的基类(s)迁移统计数据来校准这些少数样本类的分布,接着依据新分布的均值和方差随机采样一定数量的样本,对novel classes的n_way k_shot任务的支持集进行补充,补充后的support set aug输入分类器fit。
2.2 方法记录
前提假设:假设特征嵌入的每个维度都服从高斯分布。
这篇代码基类是有充足样本的类,用别人的SOTA分类模型,取倒数第二层作为特征提取器,用于提取基类和novel类的特征嵌入。接着计算每个基类特征层面的均值向量和协方差。
测试类(novel classes)用的是轮次训练的方式,例如:
1 |
|
每次从novel classes中抽5个类,每个类有1个support sample,15个query sample。每一次run,对抽取的5个support_data(先转成特征嵌入)分别做分布校准,然后生成若干个数的特征向量作为support集的补充,一起输入分类器fit,在query samples上测试,计算acc,最后取10000次run的平均acc。
分布校准core代码:
1 |
|
- 这篇文章在细粒度数据集CUB上也应用了DC方法,有超过200种不同的鸟类图片。每个人的脑电虽然说各自有判别性特征,其实还是很相似的细粒度数据,这个方法通过迁移k个距离最小的基类的分布,来直接增加支持集的样本,进而提高分类性能。
- 要调的超参数多,采样个数、k个基类、离散程度a。
- 在脑电上是否有效呢?特征向量都是经过标准化/幂变换的。
3.Semantic-Based Implicit Feature Transform for Few-Shot Classification
3.1 基本信息
2024年,International Journal of Computer Vision
源码:SIFT
借鉴的是前面分布矫正的论文,同样是通过从基类补充特征向量到novel类上面去,不同的是图像类别标签(如cat、dog),本身具有语义信息,可以用不同的词向量来表达。然后通过语义嵌入的相似度来选择最近的基类,而不是前面通过统计特征。
3.2 方法记录
脑电的类别标签纯粹是'Person A'、'Person B'的形式,并不具有语义信息,所以如果要用,应该采用Free Lunch的方法做跨时段的分布矫正。
提出了一种原型矫正的方法。适用于transductive setting,即查询样本全部一次给出的情况。通过K-means把查询样本分簇为N类,接着建立路径规划问题的数学模型,为这N个类别确定互相不重复的标签,与初始的每个类原型做平均。
1 |
|
4.Matching Feature Sets for Few-Shot Image Classification
4.1 基本信息
2022年,CVPR会议论文
源码:SetFeat-fs
以Conv4-64骨干网络为例,提出把一张图像输入进去,经过一个Block,就输出一个经自注意力机制mapper计算后的特征向量
,这样处理从一张图片中提取出一组m(4)个特征向量。距离度量用的是负余弦相似度,实际上和原型网络的距离度量很相似,区分在于有多个特征向量,它这里统一了向量的shape,相当于在同一个特征空间内,按mapper聚合多个类中心。
4.2 方法记录
训练流程:两个阶段,第一阶段就是正常带FC层的分类器,并且本文是在每个Block后面都接一个FC层,分别训练到这个Block为止的网络,第二阶段,舍去FC层,应用轮次训练在基类上模拟FSL Task,通过公式6的负对数概率计算loss,反向传播微调编码器的参数。微调结束,最终在novel类上面推理,之前的Free Lunch也是一样的流程。
- 总结一下,它提高原型网络分类精度的手段就是,同一个特征space,一个类别聚合m个类中心。
- 感觉第一阶段训练就相当于独立地训练了4个encoder,但是又不独立,前面的参数是要重复使用的,具体要看代码train部分。
- 这种在预训练阶段,训练一个分类器的做法和我之前看的有监督对比学习训练编码器的方式不一样,我的想法是也许可以借用这个metric,然后用SCL的做法分别独立训练出3个encoder。之后可以有两种metric方法,一种是和本文做法一样,投射到同一个特征空间;另一种映射到不同特征空间分别做相似度计算,再求和,作为新的metric。
- 还有一个想法是SCL的encoder很关键,决定了特征向量的质量,借鉴GoogleNet的多尺度卷积方法,预训练出一个encoder,也可以试一下。
4.3 参考博客
5.BSNet: Bi-Similarity Network for Few-shot Fine-grained Image Classification
5.1 基本信息
2020年,IEEE Transactions on Image Processing(TIP)期刊论文
源码:BSNet
代码格式简洁,是基于度量学习的图像细粒度分类,提出同时使用余弦相似度和欧式距离两种loss,即在ProtoNet上添加一个余弦相似度的loss,分类精度在图像分类上有所提高。
最后调优模型的时候可以试一下,有空看代码。
6.Supervised Contrastive Learning
6.1 基本信息
2020年,NeurIPS
源码:SupContrast
SCL集合了传统度量学习领域的Triplet loss、N-pair loss两者的特点,提出对一个Anchor除了考虑多个负样例之外,也同时考虑多个正样例,设计的损失函数避开了需要显式地调参以挖掘半难样本的需求。
6.2 方法记录
在一个batch中,每一个样本
都经过一个数据增强模块 生成两个随机增强 ,两个增强后的样本标签一样,属于同一个类别。接下来如何保证随机生成的一个batch有多个样本标签相同呢,除了数据增强的方式生成正样本对之外,相对于类别个数大小C,batch的batch_size = N
要远大于C,这样平均N/C,就必定会采样到同一个类的多个样本。代码与对应公式的解释:监督对比学习SupConLoss代码学习笔记
1 |
|
仿照这篇论文的三个核心模块:数据增强模块、编码网络、映射网络,计划对脑电原始数据做Channel Reflection数据增强,以及一个其他数据增强操作,和本文的监督对比loss匹配,Backbone也需要找一个替换。
7.Channel reflection: Knowledge-driven data augmentation for EEG-based brain–computer interfaces
7.1 基本信息
2024年,Neural Networks
源码:EEGAug
提出了一种无需超参数的通道交换(CR)数据增强方法,传统的数据增强如添加Noise、Scale、Frep都需要调超参数,并且十分鲁棒,在MI、SSVEP、ERP、癫痫检测4个实验范式下均适用,相比于Baseline(没有数据增强),分类精度更好。注意经CR数据增强之后,训练数据翻倍。
7.2 方法记录
1 |
|
- 即根据脑电极通道的索引,位于中线的电极不变,左脑和右脑对称分布的电极做一个交换,类似于图像的翻转操作。除左右手MI想象要调换标签之外,ERP不需要换标签。调用方法如下:
1 |
|
8.Revisiting Prototypical Network for Cross Domain Few-Shot Learning
8.1 基本信息
2023年,CVPR会议论文
源码:LDP-Net
是基于baseline原型网络的改进,指出全局特征提取器倾向于学习浅显的颜色、形状等简单特征,而没有学习到这个类不变的、深层的所谓“语义特征”,作者由此提出了局部全局蒸馏-原型网络,通过建立一个两分支网络对查询图像和其局部随机多个裁剪增强进行分类,并利用知识蒸馏强制这两个分支保持类原型预测结果一致,使得特征提取网络学到更多的语义信息。
8.2 方法记录
方法在消融实验的结果上可以看出,主要是局部裁剪的图像要和原始的图像类标签保持一致这一步起作用,也就是
self-image distill
,并且“知识蒸馏”是包装过的说法,实际上方法的有效性建立在图像经随机裁剪之后,能关注到更多的细节信息,结合这个分支和原始的整张图像分支,两者共同对特征提取器的参数做反向传播,共同发挥作用。特征提取器首先经预训练。接着值得注意的是为了不同时训练两个分支的模型参数,并且以全局图像为主干,本文提出了用Exponential Moving Average (EMA),一种加权移动的方法来更新局部分支的模型参数。
9.Cross-session SSVEP brainprint recognition using attentive multi-subband depth identity embedding learning network
9.1 基本信息
2024年,Cognitive Neurodynamics
使用2s的样本,仅利用1个session的数据做训练,训练和验证集比例设置为8:2,在另一个session上检验有效性。模块包括Deepconvwise、Res2Net、时空注意力、Attentive Statistic Pooling。
10.TST_MFL: Two-stage training based metric fusion learning for few-shot image classification
10.1 基本信息
2024年,Information Fusion
源码:TST_MFL
传统的度量学习方法大多只提取全局特征表示,一些在元训练阶段结合了局部特征表示,而本文提出不仅要在元训练阶段特征融合,也要在预训练阶段特征融合,进一步提高特征的判别性。
10.2 方法记录
10.2.1 Pre-training Stage
- 提出了一个双路(dual-path)的预训练网络,采用传统的交叉熵损失在基类上训练一个多分类任务,具体的:
- 全局分类subnet:图像尺寸为84x84,backbone采用ResNet12用于特征提取,最后接全连接层和Softmax计算全局分类损失;
- 局部分类subnet:图像尺寸为26x26,backbone也是ResNet12用于局部图像块的特征提取,接了一个8头自注意力层,然后全连接层加Softmax。假设一张图像分割为36块,这36块都属于同一个类别,标签的范围和全局一样是D类,则这36小块每块分别提取特征,独立预测分类标签,计算一个局部分类损失。
- 损失函数1和2:全局交叉熵损失
、平均局部交叉熵损失 - 损失函数3:预测蒸馏损失
,改进了知识蒸馏的KL散度,让老师(全局预测出来的类标签概率分布)和学生(局部预测出来的平均类标签概率分布)能够相互学习,通过对这两个概率分布取平均,然后作为老师,指导前面两个概率分布靠近这个老师。 - 损失函数4:局部多样性损失
,目的是最小化同一张图像的局部块之间的预测概率分布差异。
10.2.2 Meta-training Stage
- 提出了一个全局-局部度量融合网络,在基类上以轮次训练的方式继续提高小样本分类性能,具体的:
- 保留预训练网络的全局子网特征提取器、局部子网的特征提取器、self-attention模块;
- Global metric subnet:在一个小样本任务中,Support集按照类别计算类原型,Query集中的每个样本转为特征之后,利用余弦相似度来计算和每个类原型(N类)的相似度,最后一个Query就是一条相似度向量:
; - Local metric subnet:
- 输入:支持集、查询集样本的局部裁剪块作为输入,每个样本裁剪为
块; - 由于可能裁剪到和关键分类信息不相关的背景图像,提出了一个基于相似度阈值的局部特征过滤模块,即把局部块提取出的特征和这张图像的全局特征进行余弦相似度对比,如果低于阈值0.2,则把这个局部特征清零,达到过滤的效果;
- 接着计算相似度,支持集每类K个样本,每个样本拆为m个,则一共有Km个局部块,每个经过过滤的Query局部块为m个。挨个计算余弦相似度,得到余弦相似度矩阵,即km行m列,然后根据KNN为每个Query局部块(共m个)选出前k个值最大的相似度,求和最后取平均,作为最终的该Query样本和该类的相似度。
- 1个Query对应N类,有n个相似度值,组成一条相似度向量
。
- 输入:支持集、查询集样本的局部裁剪块作为输入,每个样本裁剪为
- Metric Fusion module: 两个权重是可学习的超参数。
- 标签的预测最后采用公式:
- 代码实际上用的是meta-baseline的,创新点是在全局特征表示的基础上,加了一个局部特征表示,并行蒸馏。
- 局部裁剪用在脑电上有一定作用,但不够明显,计划使用1d卷积模型,并行学习模型并蒸馏。
- 小样本分类的度量指标:欧式距离的效果要差于余弦相似度。
11.Meta-Baseline: Exploring Simple Meta-Learning for Few-Shot Learning
11.1 基本信息
2021年,CVPR oral
主要提出了用整个base数据集训练的分类器、和在base数据集上构建fs任务的meta-training之间的权衡。当基类上的类别和新类的上未见的类分布相似时,使用meta-training是有帮助的,否则可能对分类器的类可偏移能力负面影响,容易在base类上过拟合。
12.Joint Distribution Matters: Deep Brownian Distance Covariance for Few-Shot Classification
12.1 基本信息
2022年,CVPR
源码:DeepBDC
提出。。。