Press "Enter" to skip to content

测试阶段模型自适应方法总结

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

 

©PaperWeekly 原创  ·   作者 | 张一帆

 

单位 | 中科院自动化所博士生

 

研究方向 | 计算机视觉

 

Domain Generalization(DG:域泛化)一直以来都是各大顶会的热门研究方向。DA 假设我们有多个个带标签的训练集(源域),这时候我们想让模型在另一个数据集上同样表现很好(目标域),但是在训练过程中根本不知道目标域是什幺,这个时候如何提升模型泛化性呢?核心在于如何利用多个源域带来的丰富信息。

 

DG 最困难的地方在于 test-sample 的不可知,训练时不可用,近期有一系列方法开始尝试假设 test sample 以 online 的形式出现,然后利用其信息增强泛化性,下表总结了 test time daptation 方法与传统 DA,DG 方法的区别。

 

 

传统 DG 方法就是在源域 finetune 预训练模型,然后部署时不经过任何调整。DA 方法可以根据无标签的目标域数据在训练时调整模型,test-time training 方法在测试时会有一些无监督损失比如检测旋转角度等,然后对每个 test sample 也会进行旋转角度的检测,本文所述的 fully test-time adaptation 在 training 的时候不需要无监督损失,而只需要在 test 的时候进行 adaptation。

 

 

T3A

 

 

论文标题:

 

Test-Time Classifier Adjustment Module for Model-Agnostic Domain Generalization

 

论文来源:

 

NeurIPS 2021 Spotlight

 

论文链接:

 

https://proceedings.neurips.cc/paper/2021/hash/1415fe9fea0fa1e45dddcff5682239a0-Abstract.html

 

代码链接:

 

https://github.com/matsuolab/T3A

 

以往的 DG 方法都致力于研究如何利用好手头的域信息,这篇文章另辟蹊径。在 test 的阶段,我们在依然会选择更新模型头部的linear层。但是这与直接使用 test 的数据进行训练不同,主要的差异在于,本文假设在测试时,模型通常部署在某些环境中,并且必须在不断出现的各种示例上工作良好, 样本连续到来 是本文场景的主要特征,在拿到样本后模型需要立刻给出决策并更新。

 

本文的方法被称之为 test-time templates adjuster(T3A),接下来我们对其 intuition 和具体实现思路进行介绍。

 

首先,我们知道模型的分类是通过样本特征和分类层对于类的权重进行点积然后 softmax 得到的,也就是说分类层的权重在这里作为一个  prototype ,预测是在衡量样本到每个 prototype 之间的相似度。

 

 

作者维护了个不同的 support set,对于每一个到来的样本,首先根据上式得到初始的预测结果,然后更新 support set。

 

 

初始化的 support set 就是源域训练的分类器对每个类的权重。然后我们可以根据更新的 support set 完成预测:

 

 

这里新的 prototype。但是这里还有一个问题,就是一旦模型初始时分配了错误的标签,那幺这个噪音会一直存在,因此作者使用了预测的熵来排除不可信的 pseudo-labeled data,熵的定义如下

 

也就是说在使用上述公式进行预测之前,作者首先会对 support set 进行过滤。

 

 

这里是中第大的熵值,是一个超参。

 

T3A 有如下几个良好的性质:

 

1. T3A 隐式降低预测熵:预测熵一定程度上表征了 DG 的难度;看不见的区域的熵往往大于可见区域的熵。使用 T3A 大大降低了模型在 unseen dataset 上的预测熵。

 

 

2. 计算效率高:唯一的计算开销是最后一个线性层的前向传播的成本,与特征提取器的前向和后向传播相比,这通常可以忽略不计。

 

3. 性能提升明显,如上图 c 所示,在各个数据集上都取得了明显的提升,而而且和传统的一些算法正交。

 

 

 

DomainBed

 

 

论文标题:

 

Adaptive Methods for Real-World Domain Generalization

 

论文来源:

 

CVPR 2021

 

论文链接:

 

https://arxiv.org/abs/2103.15796

 

代码链接:

 

https://github.com/abhimanyudubey/DomainBed

 

本文的 intuition 在于,ERM 本身是学一个在多个 source domain上表现很好的分类器,即:

 

 

问题在于,在源域上表现好并不意味着在目标域上效果好,即本文所说的 “adaptivity gap”,如下图所示目标域上的最优分类器和源域训练出来的分类器差距是很大的。因此本文的目标是分类器既要依赖输入 x,也要依赖域 D,即,进而确保对于任何的测试集,我们学到的分类器和 target domain 的分类器不要太远。

 

 

具体实现分为如下几步:

 

1.  Computing domain embeddings:  这一步我们需要对每个 domain 计算一个嵌入,具体来说,我们每个 domain 给少量几个 data sample,然后训练一个神经网络我们有:

 

 

这样我们就可以计算每个 data 属于某 domain 的概率:

 

 

对,整个过程的训练目标为:

 

2. ERM using augmented inputs:  在第一步对每个 domain,我们能够得到一个 embedding,本文的另一个特殊点在于,网络的输入并不只是 x,而是,具体而言,首先通过一个 encode 得到 feature, 然后特征和域特征 concatenate 起来 ,一起作为分类器的输入,这里的训练目标就是简单的交叉熵损失。

 

3. Inference:  测试的时候同样的需要先得到 domain embedding 和 image embedding,将二者结合起来一起输入分类器得到最终结果。

 

文章在传统的 DG benchmark 和更大的真实数据集上都进行了实验,与传统 ERM 相结合就能够取得不错的结果。

 

 

 

Tent

 

 

论文标题:

 

Tent: Fully Test-Time Adaptation by Entropy Minimization

 

论文来源:

 

ICLR 2021 Spotlight

 

论文链接:

 

https://arxiv.org/abs/2006.10726

 

代码链接:

 

https://github.com/DequanWang/tent

 

本文并不仅仅关注 DG 问题,所提出的方法可以 general 到任意场景。本文的 setting 在测试过程中,模型必须在给定参数和目标数据的情况下进行适应。这种测试时间适应设置不能依赖于源数据或监督信息,因为当模型第一次遇到新的测试数据是在它可以被收集和注释之前,而如果每次遇到新的 test data 都和源域数据合并重新训练的话需要的成本太高了。

 

 

本文最主要的 intuition 是 最小化模型预测的 entropy ,具体实现如下所示。

 

测试时的训练目标即:

 

 

这里的是预测出的标签,是预测结果的 entropy。但是更新模型参数会有如下问题,因为是源域训练结果的参数,直接 alter 这个参数会导致模型发散,而且的维度太高了,这就导致了整个优化过程过于敏感并且不高效。

 

为了稳定性和效率,本文只更新线性(尺度和位移)和低维(通道)的参数,即如下的归一化和转化参数:

 

 

实现上只需重新定义源模型的归一化层。在测试过程中更新所有层和通道的归一化统计数据和仿射参数

 

实验在 CIFAR-10-C, CIFAR-100-C,ImageNet-C 的各种有 Corruption 的数据集上都表现得非常好。

 

 

 

TADE

 

 

论文标题:

 

Test-Agnostic Long-Tailed Recognition y Test-Time Aggregating Diverse Experts with Self-Supervision

 

论文来源:

 

ICCV 2021

 

论文链接:

 

https://arxiv.org/pdf/2107.09249.pdf

 

代码链接:

 

https://github.com/Vanint/TADE-AgnosticLT

 

这篇文章的主题并不是 DG,而是长尾分布。这项工作研究了一个更实际的任务设置,称为测试不可知性长尾识别,其中 训练类分布是长尾的,而测试类分布是未知的 ,可以任意倾斜。除了类不平衡的问题之外,这个任务还带来了另一个挑战:在训练样本和测试样本之间的类分布转移是未知的。

 

为了处理这个任务,本文提出了一种新的方法,称为测试时间聚合多样化专家 Test-time Aggregating Diverse Experts,顾名思义,也是用到了 test-time adaptation 的技术,因此我们对它的方法做一个简单介绍。

 

本文的主要出发点如下所示(a)现有的长尾识别方法旨在训练在类分布均匀的测试数据上表现良好的模型。然而,产生的模型可能无法处理任意倾斜的实际测试类分布。(b)我们的方法试图学习一个多专家模型,不同的专家熟练地处理不同的类分布。通过在测试时合理地聚集这些专家,我们的方法能够处理任何未知的测试类分布。

 

 

4.1 Test-time Self-supervised Aggregation

 

我们主要对其 test-time adapt 的部分进行介绍并假设以及通过训练得到了多个专家模型,其中每个专家擅长处理不同的类。本文的关键见解是,强大的专家应该更稳定地预测来自他们技能阶层的样本,即使这些样本受到了干扰。为了验证这一点,我们通过比较样本的两个增强视图的预测之间的余弦相似度来估计专家的预测稳定性。

 

 

Prediction stability maximization:  本文设计了一种新的自我监督方法,即预测稳定性最大化,通过最大化未标记测试样本的模型预测稳定性来学习专家(带有冻结参数)的聚集权值。如上图所示,该方法由以下三个主要组件组成。

 

1. Data view generation:像 moco v2 一样生成数据增强样本;

 

2. Learnable aggregation weight:给定一组可学习的权重,我们根据对每个 expert 的结果的加权组合得到最终结果;

 

3. Objective function:对每个测试样本我们最大化他的预测稳定性,从而更新加权权重。

 

 

所提出的方法总体称为 TADE,在多个数据集上都取得了不错的效果

 

 

 

Conclusion

 

测试分布相对于训练分布的偏移不管是在哪个领域都是很常见的事情,传统的 DG 任务假设测试数据不可见因此一定不能使用,但是近期很多的方法开始尝试利用 online 的 test sample,目前这类方法相比于传统方法还比较少,有较多的改进空间。

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。