Continual Test-Time Domain Adaptation--论文笔记

论文笔记

资料

1.代码地址

https://github.com/qinenergy/cotta

2.论文地址

https://arxiv.org/abs/2203.13591

3.数据集地址

论文摘要的翻译

TTA的目的是在不使用任何源数据的情况下,将源预先训练的模型适应到目标域。现有的工作主要考虑目标域是静态的情况。然而,现实世界的机器感知系统运行在非静态和不断变化的环境中,其中目标域分布可能会随着时间的推移而变化。现有的方法大多基于自训练和熵正则化,可能会受到这些非平稳环境的影响。由于目标域中的分布随时间移动,伪标签变得不可靠。嘈杂的伪标签会进一步导致错误累积和灾难性的遗忘。为了解决这些问题,我们提出了一种连续测试时间适应方法(continual test-time adaptation,COTTA),该方法包括两个部分。首先,我们建议通过使用通常更准确的加权平均和增广平均预测来减少误差积累。另一方面,为了避免灾难性的遗忘,我们建议在每次迭代期间随机将一小部分神经元恢复到源预先训练的权重,以帮助长期保存源知识。该方法能够对网络中的所有参数进行长期自适应。CONTTA易于实施,并且可以很容易地整合到现成的预训练的模型中。我们在四个分类任务和一个连续测试时间自适应的分割任务上证明了我们的方法的有效性,我们在这方面的表现优于现有的方法。

1 介绍

TTA旨在通过在推理时从未标记的测试(目标)数据中学习来适配源预先训练的模型。由于源训练数据和目标测试数据之间的域分布差异,需要进行自适应以获得良好的性能。源数据通常被认为在推理时间内不可用,这使得它比无监督的域自适应更具挑战性但更现实。
现有的测试时间自适应工作通常通过使用伪标记法或熵正则化来更新模型参数来处理源域和固定目标域之间的分布差异
然而,当目标测试数据来自一个不断变化的环境时,它们可能是不稳定的。这有两个方面的原因:
首先,在不断变化的环境下,由于分布偏移,伪标签变得更噪声和错误校准。因此,早期预测错误更有可能导致误差累积。
其次,由于模型长时间地不断适应新的分布,来自源域的知识更难保存,导致灾难性的遗忘。
这里主要介绍online continual test-time adaptation的实际问题。
如图1所示,目标是从现成的源代码预先训练的模型开始,并不断地使其适应当前的测试数据。
在这里插入图片描述

为了有效地使预先训练源模型适应不断变化的测试数据,我们提出了一种连续测试时间自适应方法(COTTA),解决了现有方法的两个主要局限性。该方法的第一个组成部分旨在减少误差累积。我们建议在自训练框架下通过两种不同的方法来提高伪标签的质量。一方面,由于教师平均预测往往比标准模型[55]具有更高的质量,我们使用加权平均教师模型来提供更准确的预测。另一方面,对于领域差距较大的测试数据,我们使用了增广平均预测来进一步提高伪标签的质量。提出的方法的第二个组成部分旨在帮助保存源知识和避免遗忘。我们建议随机地将网络中的一小部分神经元恢复到预先训练的源模型。通过减少错误积累和保存知识,CONTTA能够在不断变化的环境中进行长期适应,并使训练网络的所有参数成为可能。相比之下,以前的方法只能训练BN的参数。

2论文的创新点

  • 提出了一种连续的测试时间自适应方法COTTA,该方法能够有效地使现成的源预训练模型适应不断变化的目标数据。
  • 具体地说,通过使用更准确的加权平均和增广平均伪标签来减少误差累积。
  • 通过显式地保存来自源模型的知识来缓解长期遗忘效应。
  • 该方法显著提高了分类基准和分割基准的continual test-time adaptation的性能。

3 Continual Test-Time Domain Adaptation方法的概述

3.1 问题定义

给定具有对源数据 ( X S , Y S ) (\mathcal{X^S},\mathcal{Y^S}) (XSYS)训练的参数 θ θ θ的现有预训练模型 f θ 0 ( x ) f_{θ_0}(x) fθ0(x),在不访问任何源数据的情况下以在线方式不断变化的目标域。顺序地提供未标记的目标域数据 X T \mathcal{X^T} XT,并且该模型只能访问当前时间步长的数据。在时间步长 t t t处,目标数据 X t T X^T_t XtT被提供作为输入,并且模型 f θ t f_{θ_t} fθt需要做出预测 f θ t ( X t T ) f_{θ_t}(X^T_t) fθt(XtT),并相应地适应未来输入 θ t → θ t + 1 θ_t→θ_{t+1} θtθt+1 X t T X^T_t XtT的数据分布不断变化。根据在线预测对该模型进行了评估。这种设置在很大程度上是由于机器感知应用在不断变化的环境中的需求。我们在表1中列出了我们的在线连续测试时间适应设置与现有适应设置之间的主要区别。与以前专注于固定目标域的设置相比,我们考虑的是对不断变化的目标环境的长期适应
在这里插入图片描述

3.2 方法

提出了一种用于在线连续测试时间自适应设置的自适应方法。该方法采用现成的源预训练模型,并在线自适应不断变化的目标数据。基于错误累积是自训练框架中的关键瓶颈之一这一事实,我们提出使用加权和增强平均伪标签来减少错误累积。此外,为了帮助减少连续适应中的遗忘,我们建议显式保留来自源模型的信息。图2显示了所建议方法的概述。
在这里插入图片描述

3.2.1 Source Model

现有的测试时间自适应工作往往需要在源模型的训练过程中进行特殊处理,以提高领域泛化能力,促进自适应。本方法不需要修改体系结构或额外的源训练过程。因此,任何现有的预先训练的模型都可以使用,而不需要对源进行重新培训。

3.2.2 Weight-Averaged Pseudo-Labels

在给定目标数据 x t T x^T_t xtT和模型 f θ t f_{θ_t} fθt的情况下,自训练框架下的共同测试时间目标是最小化预测 y ^ t T = f θ t ( x t T ) a \hat{y}_{t}^{T} = f_{\theta_{t}}(x_{t}^{T}) \mathrm{a} y^tT=fθt(xtT)a和伪标签之间的交叉熵一致性。例如,直接使用模型预测本身作为伪标签导致TENT[61]的训练目标(即熵最小化)。虽然这对固定的目标域有效,但由于分布偏移,对于不断变化的目标数据,伪标签的质量可能会显著下降。
由于观察到训练步骤中的加权平均模型通常比最终模型提供更准确的模型,我们使用加权平均教师模型 f θ ′ f_{\theta^{\prime}} fθ来生成伪标签。在时间步长 t = 0 t=0 t=0时,教师网络被初始化为与源预训练网络相同。在时间处于 t t t时,首先由教师 y ′ ^ t T = f θ t ′ ( x t T ) . \hat{y^{\prime}}_{t}^{T}=f_{\theta_{t}^{\prime}}(x_{t}^{T}). y^tT=fθt(xtT).生成伪标签。
然后通过学生和教师预测之间的交叉点损失来更新学生 f θ t f_{θ_t} fθt
L θ t ( x t T ) = − ∑ c y ′ ^ t c T log ⁡ y ^ t c T , ( 1 ) \mathcal{L}_{\theta_{t}}(x_{t}^{T})=-\sum_{c}\hat{y'}_{tc}^{T}\log\hat{y}_{tc}^{T},\quad(1) Lθt(xtT)=cy^tcTlogy^tcT,(1)
在使用公式1更新学生模型 θ t → θ t + 1 θ_t→θ_{t+1} θtθt+1之后,我们使用学生权重通过指数移动平均来更新教师模型的权重 θ t + 1 ′ = α θ t ′ + ( 1 − α ) θ t + 1 , ( 2 ) \theta'_{t+1}=\alpha\theta'_t+(1-\alpha)\theta_{t+1},\quad(2) θt+1=αθt+(1α)θt+1,(2)
其中,α是一个平滑因子。我们对输入数据 x t T x^T_t xtT的最终预测是 y ′ ^ t T \hat{y^{\prime}}_{t}^{T} y^tT中具有最高概率的类。
重量平均一致性的好处有两个。一方面,通过使用通常更准确的加权平均预测作为伪标签目标,我们的模型在连续自适应过程中遭受的误差累积较少。
另一方面,平均教师预测 y ′ ^ t T \hat{y^{\prime}}_{t}^{T} y^tT编码了过去迭代中来自模型的信息,因此在长期的连续适应中不太可能遭受灾难性遗忘,并提高了对新的未知领域的泛化能力。

3.2.3 Augmentation-Averaged Pseudo-Labels

训练时间内的数据扩充已被广泛应用于提高模型的性能。对于不同的数据集,通常手动设计或搜索不同的扩充策略。虽然测试时间扩充也已被证明能够提高稳健性,但扩充策略通常是针对特定数据集确定和固定的,而不考虑推理时间期间的分布变化。在不断变化的环境下,测试分发可能会发生巨大变化,这可能会使增强策略无效。在这里,我们考虑了测试时间域的分布差异,并用预测置信度来逼近域差异。仅当域差异较大时才应用增强,以减少误差累积。
y ′ ~ t T = 1 N ∑ i = 0 N − 1 f θ t ′ ( arg ⁡ i ( x t T ) ) , (3) y ′ t T = { y ′ ^ t T , if conf ( f θ 0 ( x t T ) ) ≥ p t h y ′ ~ t T , otherwise , (4) \begin{aligned}\tilde{y'}_{t}^{T}&=\frac{1}{N}\sum_{i=0}^{N-1}f_{\theta_{t}^{'}}(\arg_{i}(x_{t}^{T})),&\text{(3)}\\{y'}_{t}^{T}&=\begin{cases}\hat{y'}_{t}^{T},&\text{if conf}(f_{\theta_{0}}(x_{t}^{T}))\geq p_{th}\\\tilde{y'}_{t}^{T},&\text{otherwise},\end{cases}&\text{(4)}\end{aligned} y~tTytT=N1i=0N1fθt(argi(xtT)),={y^tT,y~tT,if conf(fθ0(xtT))pthotherwise,(3)(4)
其中 y ′ ~ t T \widetilde{y^{\prime}}_{t}^{T} y tT是来自教师模型的增广平均预测, y ′ ^ t T \hat{y^{\prime}}_{t}^{T} y^tT是来自教师模型的直接预测, c o n f ( f θ 0 ( X t T ) ) conf(f_{θ_0}(X_t^T)) conf(fθ0(XtT)) 是源预训练模型对当前输入 x t T x^T_t xtT的预测置信度,以及 P t h P_{th} Pth是置信度阈值。通过使用公式4中的预训练模型 f θ 0 来 f_{θ_0}来 fθ0计算对当前输入Xtt的预测置信度,我们试图逼近源和当前域之间的域差异。我们假设较低的置信度表示较大的域间隙,而相对较高的置信度表示较小的域间隙。因此,当置信度高且大于阈值时,我们直接使用 y ′ ^ t T \hat{y^{\prime}}_{t}^{T} y^tT作为我们的伪标签,而不使用任何增广。当置信度较低时,我们采用额外的N个随机增强来进一步提高伪标签的质量。过滤是至关重要的,过滤是至关重要的,因为我们观察到随机增强,因为我们观察到,在具有小域间隙的自信样本上的随机增加有时会降低模型的性能。我们在补充材料中对这一观察结果进行了详细讨论。总而言之,我们使用置信度来逼近域差异,并确定何时应用扩展。学生通过改进的伪标签进行更新:

3.2.4 Stochastic Restoration

虽然更准确的伪标签可以减少错误积累,但长期自我训练的持续适应不可避免地会引入错误并导致遗忘。如果我们在数据序列中遇到强烈的域移,这个问题可能特别相关,因为强烈的分布移位会导致错误校准甚至错误的预测。在这种情况下,自我训练可能只会强化错误的预测。更糟糕的是,在遇到硬性例子后,即使新数据没有严重漂移,模型也可能因为不断的适应而无法恢复。为了进一步解决灾难性遗忘问题,我们提出了一种随机恢复方法,该方法显式地恢复源预先训练模型中的知识。考虑基于时间步 t t t处的公式1的梯度更新之后的学生模型 f θ f_θ fθ内的卷积层: x l + 1 = W t + 1 ∗ x l , ( 6 ) x_{l+1}=W_{t+1}*x_{l},\quad(6) xl+1=Wt+1xl,(6)其中,∗表示卷积运算, x l 和 x l + 1 x_l和x_{l + 1} xlxl+1表示到该层的输入和输出, W t + 1 W_{t + 1} Wt+1表示可训练的卷积滤波器。建议的随机恢复方法还通过以下方式更新权重 W W W M ∼ Bernoulli ( p ) , ( 7 ) W t + 1 = M ⊙ W 0 + ( 1 − M ) ⊙ W t + 1 , ( 8 ) \begin{aligned}M&\sim\text{Bernoulli}(p),\quad&(7)\\W_{t+1}&=M\odot W_0+(1-M)\odot W_{t+1},\quad&(8)\end{aligned} MWt+1Bernoulli(p),=MW0+(1M)Wt+1,(7)(8)其中同 ⊙ \odot 表示逐个元素的乘法。 p p p是一个小的恢复概率, M 是与 W t + 1 M是与W_{t+1} M是与Wt+1形状相同的掩模张量。随机恢复也可以看作是丢弃的一种特殊形式。通过随机地将可训练权值中的少量张量元素恢复到初始权值,网络避免了距离初始源模型太远的漂移,从而避免了灾难性遗忘。此外,通过保存来自源模型的信息,我们能够训练所有可训练的参数,而不会遭受模型崩溃的痛苦。这为自适应带来了更多的容量,并且与仅训练用于测试时间自适应的BN参数的熵最小化方法如算法1所示,将改进的伪标记法与随机恢复相结合,得到了在线连续测试时间自适应(COTTA)方法。
在这里插入图片描述

4 论文实验

五个连续测试时间自适应基准任务:CIFAR10-to-CIFAR10C(标准和渐进式)、CIFAR100-to-CIFAR100C、ImageNet-to-ImageNet-C以及用于语义分割的Cityscapses-to-ACDC上对我们的方法进行了评估。

4.1 Experiments on CIFAR10-to-CIFAR10C

我们首先评估了所提出的模型在CIFAR10到CIFAR10C任务上的有效性。我们将我们的方法与纯源代码基线和四种流行的方法进行了比较。
如表2所示,直接使用没有自适应的预训练模型产生了43.5%的高平均错误率,表明自适应是必要的。BN统计自适应方法保持网络权重,并使用来自当前迭代的输入数据的批量归一化统计用于预测。该方法简单且完全在线,在仅限源代码的基线上显著提高了性能。使用硬伪标签来更新BN可训练参数可以将错误率降低到19.8%。如果帐篷在线方法能够访问附加域信息,并在遇到新域时将其自身重置为初始的预训练模型,则性能可以进一步提高到18.6%。然而,这样的信息在实际应用中通常是不可用的。如果不能访问这些附加信息,帐篷连续方法不会比BNStats Adapt方法产生任何改进。值得一提的是,在适应的早期阶段,帐篷持续的表现优于国阵统计适应。然而,在观察到三种类型的腐败后,该模型很快就恶化了。这表明,由于误差累积,基于帐篷的方法在长期持续适应下可能不稳定。通过使用加权平均一致性,我们提出的方法可以持续地优于上述所有方法。误码率显著降低到16.2%。此外,由于我们的随机恢复方法,它在长期内不会受到性能下降的影响。
在这里插入图片描述
这一部分的消融实验
表2的下部分

4.2 Experiments on CIFAR100-to-CIFAR100C

为了进一步证明所提方法的有效性,我们在难度更大的CIFAR100to-CIFAR100C任务上进行了评估。表4总结了实验结果。
在这里插入图片描述

4.3 Experiments on ImageNet-to-ImageNet-C

为了对所提出的方法进行更全面的评估,在严重性级别为5的10个不同的腐败类型序列上进行了ImageNet到ImageNet-C的实验。如表6所示,CONTA能够持续地优于帐篷和其他竞争方法。±之后的数字是10种不同损坏类型序列的标准偏差。
在这里插入图片描述

4.4 Experiments on Cityscapes-to-ACDC

此外,我们还在更复杂的连续测试时间语义分割Cityscapesto-ACDC任务上对我们的方法进行了评估。实验结果如表5所示。实验结果表明,我们的方法对于语义分割任务也是有效的,并且对不同的体系结构选择具有较强的鲁棒性。我们提出的方法在基准的基础上产生了1.9%的绝对改进,并且达到了58.6%的MIU.值得一提的是,BN统计适应和帐篷在这项任务中表现不佳,随着时间的推移,性能会显著下降。这在一定程度上是因为两者都是专门为具有批归一化层的网络设计的,而Segformer中只有一个批归一化层,而transform模型中的大多数归一化层都基于LayerNorm。然而,我们的方法不依赖于特定的层,并且仍然可以在非常不同的体系结构上有效地完成这项更复杂的任务。改进的性能在经过相对较长的时间不断调整后也基本保持不变。
在这里插入图片描述

5 总结

在这项工作中,关注的是在非静态环境中的连续测试时间适应,其中目标域分布可以随着时间的推移而不断变化。为了解决这种方法中的误差累积和灾难性遗忘问题,我们提出了一种新的方法COTTA,该方法包括两部分。==首先,我们通过使用加权平均和增广平均预测来减少误差积累,这两种预测往往更准确。==其次,为了保存来自源模型的知识,我们随机地将一小部分权重恢复到源预先训练的权重。所提出的方法可以结合到现成的预训练模型中,而不需要对源数据的任何访问。在4个分类和1个分割任务上验证了COTTA的有效性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/768513.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【数据分享】《中国建筑业统计年鉴》2005-2022 PDF

而今天要免费分享的数据就是2005-2022年间出版的《中国建筑业统计年鉴》并以多格式提供免费下载。(无需分享朋友圈即可获取) 需要2023的数据的请添加小编咨询 数据介绍 在过去的十八个年头中,中国建筑业经历了翻天覆地的变化。从《中国建…

web自动化(三)鼠标操作键盘

selenuim 键盘操作 import timefrom selenium.webdriver.common.keys import Keys from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWait from selen…

windows@无密码的本地用户账户相关问题@仅用用户名免密登录远程桌面登录和控制@无密码用户访问共享文件夹以及挂载问题

文章目录 abstract此用户无法登录账户被禁用问题访问共享文件夹时带上凭据错误案例和解决 两类登录方式控制台登录与远程登录的区别为什么限制空密码账户只允许控制台登录相关安全策略如何修改该策略注意事项 启用允许被免密登录功能使用空密码进行远程桌面连接设置远程桌面链接…

day02-广播机制

广播机制 广播是numpy对不同形状的数组进行数值计算的方式,对数组的算术运算通常在相应的元素上进行 1.如果两个数组a和b形状相同,即满足a.shape b.shape,那么a*b的结果就是a与b数组对应位相乘。这要求维数相同且各维度的长度相同 a np.a…

干货:科技论文写作保姆级攻略

前言:Hello大家好,我是小哥谈。科技论文是报道自然科学研究或技术开发工作成果的论说文章。通常基于概念、判断、推理、证明或反驳等逻辑思维体系,使用实验调研或理论计算等研究手段,按照特定格式撰写完成。 科技论文可以粗略分为…

在Linux操作环境下搭建内网源

在修改配置文件之前都应该有备份。 比如在/目录下专门创建一个目录用来储存文件的备份。 1.安装vsftpd软件 首先使用命令yum search ftpd 来查看当前Linux操作系统下是否有ftpd软件。 随后使用yum install vsftpd,来安装vsftpd软件 2.修改vsftpd的配置文件&…

Linux系统之玩转SafeLine防火墙应用

Linux系统之玩转SafeLine防火墙应用 一、SafeLine介绍1.1SafeLine简介1.2 SafeLine功能1.3 SafeLine 的工作原理二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本四、部署SafeLine4.1 安…

Picocli 开发命令行工具

大家有没有想过用Java开发个命令行程序呢?给大家介绍个框架Picocli。 官方文档:https://picocli.info/ 推荐从官方提供的快速入门教程开始:https://picocli.info/quick-guide.html 什么的Picocli Picocli 是一个单文件框架,几乎…

基于Web技术的教育辅助系统设计与实现(SpringBoot MySQL)+文档

💗博主介绍💗:✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示:文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…

GNeRF代码复现

https://github.com/quan-meng/gnerf 之前一直去复现这个代码总是文件不存在,我就懒得搞了(实际上是没能力哈哈哈) 最近突然想到这篇论文重新试试复现 一、按步骤创建虚拟环境安装各种依赖等 二、安装好之后下载数据,可以用Blen…

汽车电子工程师入门系列——汽车操作系统架构学习研究-AUTOSAR

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…

MySQL高级-MVCC-原理分析(RR级别)

文章目录 1、RR隔离级别下,仅在事务中第一次执行快照读时生成ReadView,后续复用该ReadView2、总结 1、RR隔离级别下,仅在事务中第一次执行快照读时生成ReadView,后续复用该ReadView 而RR 是可重复读,在一个事务中&…

Java后端每日面试题(day2)

目录 Session和Cookie的关系Cookie与Session的区别JWT 由哪些部分组成?如何防止 JWT 被篡改?JWT 的特点 Session和Cookie的关系 Session和Cookie都可以用来实现跟踪用户状态,而二者是关系的:Session的实现依赖于Cookie。 Session…

字符串知识点

API API和API帮助文档 API:目前是JDK中提供的各种功能的Java类。 这些类将底层的实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可。 API帮助文档:帮助开发人员更好的使用API和查询API的一个工具。 String概…

Eslint与Prettier搭配使用

目录 前置准备 Eslint配置 Prettier配置 解决冲突 前置准备 首先需要安装对应的插件 然后配置settings.json 点开之后就会进入settings.json文件里,加上这两个配置 // 保存的时候自动格式化 "editor.formatOnSave": true, // 保存的时候使用prettier进…

无法定位程序输入点Z9 qt assertPKcS0i于动态链接库F:\code\projects\06_algorithm\main.exe

解决方法: 这个报错,是因为程序在运行时没要找到所需的dll库,如果把这个程序方法中对应库的目录下执行,则可正常执行。即使将图中mingw_64\bin 环境变量上移到msvc2022_64\bin 之前也不可以。 最终的解决方法是在makefile中设置环…

探索迁移学习:通过实例深入理解机器学习的强大方法

探索迁移学习:通过实例深入理解机器学习的强大方法 🍁1. 迁移学习的概念🍁2. 迁移学习的应用领域🍁2.1 计算机视觉🍁2.2 自然语言处理(NLP)🍁2.3 医学图像分析🍁2.4 语音…

AnyView 对 SwiftUI 性能的影响

文章目录 前言测试设置动画卡顿浏览数据没有 AnyView 有 AnyView在浏览数据时修改没有 AnyView 有 AnyView分析结果总结 前言 AnyView 是一种类型擦除的视图,对于 SwiftUI 容器中包含的异构视图非常方便。在这些情况下,你不需要指定视图层次结构中所有视…

day01-切片和索引

day01-切片和索引 ndarray对象的内容可以通过索引或切片来访问和修改,与 Python 中list 的切片操作一样。 ndarray数组可以基于0-n的下标进行索引 注意,数组切片并不像列表切片会重新开辟一片空间,而是地址引用,需要使用.copy()…

1105 链表合并

solution P1075的简单变形 #include<iostream> #include<vector> #include<algorithm> using namespace std; struct node{int data, next; }list[100000]; int main(){int first1, first2, n, addr;vector<int> l1, l2, ans;scanf("%d%d%d&quo…