Press "Enter" to skip to content

Test time adaptation方法总结

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

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。

NeurIPS 2021 [Spotlight] Test-Time Classifier Adjustment Module for Model-Agnostic Domain Generalization
CVPR 2021 Adaptive Methods for Real-World Domain Generalization
ICLR 2021 [Spotlight] Tent: Fully Test-Time Adaptation by Entropy Minimization
ICCV 2021 Test-Agnostic Long-Tailed Recognition y Test-Time Aggregating Diverse Experts with Self-Supervision
Conclusion

NeurIPS 2021 [Spotlight] Test-Time Classifier Adjustment Module for Model-Agnostic Domain Generalization

 

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

 

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

 

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

 

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

 

初始化的support set就是源域训练的分类器对每个类的权重 \mathbb{S}_0^k=\{\frac{w^k}{||w^k||}\} 。然后我们可以根据更新的support set完成预测

 

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

 

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

 

这里 \alpha^k 是 \mathbb{S}_t^k 中第 M 大的熵值, M 是一个超参。

 

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

 

 

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

 

 

 

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

 

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

 

 

CVPR 2021 Adaptive Methods for Real-World Domain Generalization

 

本文的intuition在于,ERM本身是学一个在多个source domain D\sim\mathcal{E} 上表现很好的分类器 f_* ,即

 

f_*=\arg\min_{f\in\mathcal{F}}\mathbb{E}_{D\sim\mathcal{E}}\mathbb{E}_{x,y\sim D}[l(f(x),y)] \\

 

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

 

具体实现分为如下几步

 

 

    1. Computing domain embeddings ,这一步我们需要对每个domain计算一个嵌入,具体来说,我们每个domain给少量几个data sample,然后训练一个神经网络 \Phi_D:\mathcal{X}\rightarrow \mathbb{R}^d 我们有 \mu(D_i)=\frac{1}{n_d}\sum_{x\in D}\Phi_D(x;\theta)\\ 这样我们就可以计算每个data属于某domain的概率

 

 

对 x\in D_x ,整个过程的训练目标为

 

 

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

 

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

 

 

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

 

ICLR 2021 [Spotlight] Tent: Fully Test-Time Adaptation by Entropy Minimization

 

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

 

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

 

测试时的训练目标即

 

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

 

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

 

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

 

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

 

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

 

这篇文章的主题并不是DG,而是长尾分布。这项工作研究了一个更实际的任务设置,称为测试不可知性长尾识别,其中 训练类分布是长尾的,而测试类分布是未知的 ,可以任意倾斜。除了类不平衡的问题之外,这个任务还带来了另一个挑战:在训练样本和测试样本之间的类分布转移是未知的。为了处理这个任务,本文提出了一种新的方法,称为测试时间聚合多样化专家Test-time Aggregating Diverse Experts,顾名思义,也是用到了test-time adaptation的技术,因此我们对它的方法做一个简单介绍。

 

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

 

Test-time Self-supervised Aggregation。

 

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

 

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

 

 

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

 

    1. Learnable aggregation weight: 给定一组可学习的权重 w=[w_1,w_2,w_3];w_1+w_2+w_3=1 ,我们根据对每个expert的结果的加权组合得到最终结果 \hat{y}=\sigma(w_1v_1+w_2v_2+w_3v_3)

 

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

 

 

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

 

Conclusion

 

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

 

最后,欢迎大家关注github,聚合了OOD,causality,robustness,optimization以及一些前沿研究方向的一些阅读笔记

Be First to Comment

发表回复

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