TENT:熵最小化的Fully Test-Time Adaption
摘要
在测试期间,模型必须自我调整以适应新的和不同的数据。在这种完全自适应测试时间的设置中,模型只有测试数据和它自己的参数。我们建议通过test entropy minimization (tent[1])来适应:我们通过其预测的熵来优化模型的置信度。我们的方法估计归一化统计量,并优化通道仿射变换,以在线更新每个批次。Tent降低了ImageNet和CIFAR-10/100上图像分类的泛化误差,并在ImageNet- c上达到了新的最先进的误差。Tent处理从SVHN到MNIST/MNIST- m /USPS的数字识别的source-free domain 适应,从GTA到cityscape的语义分割,以及在VisDA-C基准上。这些结果是在不改变训练的情况下在测试时间优化的一个epoch中获得的。
背景
当训练(源)数据与测试(目标)数据不同时,准确性会受到影响,这种情况称为dataset shift.在测试期间,模型可能对训练期间不知道的变化很敏感,无论是自然变化还是损坏,例如意外的天气或传感器退化。然而,可能有必要在不同的数据分布上部署模型,因此需要进行调整。
在测试过程中,模型必须只适应给定的参数和目标数据。这种完全的测试时适应(fully test-time adaptation)设置不能依赖于源数据或监督。
任务需求:
1. 可用性。出于带宽、隐私或利润的考虑,模型可能在没有源数据的情况下发布。
2. 效率。在测试期间(重新)处理源数据在计算上可能不实用。
3. 准确性。如果不进行adaption,模型可能太不准确,无法达到其目的。
为了适应测试过程,我们将模型预测的熵最小化。我们称这个目标为test entropy,并以此为我们的方法命名tent。我们选择熵是因为它与error和shift的联系
熵与error有关,因为更有信心的预测总体上更正确(图1)。
熵与由于损坏引起的shift有关,因为损坏越多导致熵越大,随着损坏程度的增加,与图像分类损失的等级相关性很强(图2)。


为了最小化熵,tent通过估计statistics 和optimizing affine parameters(仿射参数) batch-by-batch 对目标数据的推理进行归一化和转换。这种选择的low-dimensional, channel-wise feature modulation 在测试期间的adapt是有效的,即使是在线更新。Tent不限制或改变模型训练:它独立于给定模型参数的源数据。如果模型可以运行,就可以进行调整。最重要的是,tent不仅有效地减少了熵,还减少了误差。
affine parameters
通常用来描述一种线性变换,该变换包括平移、旋转、缩放和剪切等操作。在神经网络中,仿射变换常常用于定义神经网络层的权重矩阵和偏置向量,从而实现输入数据的线性变换
相关工作
Train-Time Adaptatv
领域自适应通过跨域损失L(x s, xt)对源和目标进行联合优化,以减轻偏移。这些损失优化特征融合,adversarial invariance, 或者共享代理任务。Transduction 对训练和测试进行联合优化,以更好地拟合特定的测试实例。虽然在它们的设置中有效,但当拒绝源/训练和目标/测试的联合使用时,两者都不适用。Tent只会在target上adapt。这些无源方法对多个epoch进行多损失离线优化,这比tent需要更多的调优和计算,但可以通过更多的计算获得更高的精度。Tent在线优化,只有一个损耗和调制的有效参数化,以强调在推理期间充分适应测试时间。我们鼓励在没有原始数据的情况下,在改编的前沿研究这些作品。
Test-Time Adaptation
Tent adapt 通过test-time optimization and normalization去更新模型。
(Test-time adaptation of predictions),即根据较容易和特定的情况调整较困难和不确定的情况(Jain & Learned-Miller, 2011),为像我们这样基于确定性的模型适应方案提供了灵感。
测试时间训练Test-time training(TTT) (Sun et al., 2019b)也在测试期间优化,但其损失不同,必须改变训练。TTT依赖于一个代理任务,比如识别图像的旋转,因此它的损失取决于代理的选择。
TTT改变训练,在适应目标之前优化源上的代理损失。Tent 适应没有代理任务和不改变训练
对特征统计进行规范化是domain adaption的常用方法。批量归一化Li et al. (2017);Carlucci et al.(2017)在训练过程中分离源统计和目标统计。Schneider et al. (2020);Nado等人(2020)在测试期间估计目标统计量以提高泛化。Tent建立在测试时间规范化的基础上,以进一步减少泛化错误。
Entropy Minimization
熵最小化是域自适应的关键正则化器(Carlucci et al., 2017;Shu et al., 2018;Saito等人,2019;Roy等人,2019),半监督学习(Grandvalet & Bengio, 2005;李,2013;Berthelot et al., 2019)和few-shot learning (Dhillon et al., 2020)。正则化熵惩罚数据分布中高密度的决策,以提高不同类别的准确性(Grandvalet & Bengio, 2005)。这些方法在训练过程中与其他有监督和无监督的附加数据损失一起使熵正则化。Tent是第一个去在测试中最小化熵的方法。为适应数据集的变化,没有其他损失或数据。熵损失很常见;我们的贡献是展示熵作为完全测试时间适应的唯一损失。
Feature Modulation
调制使模型随其输入而变化。我们优化了比完整模型更简单的调制,以实现稳定和有效的适应。我们对通道仿射变换进行调制,使其与规范化相结合(Ioffe & Szegedy, 2015;Wu & He, 2018),以及他们对不同任务的调节灵活性(Perez et al., 2018)。这些归一化和调节方法在训练期间通过监督损失优化调制,但在测试期间保持固定。我们在测试过程中利用无监督损失对调制进行优化,使其能够适应不同的目标数据。
贡献
1)我们强调只有目标数据而没有源数据的完全测试时间适应设置。为了强调推理过程中的实际适应性,我们对离线和在线更新进行基准测试。
2)我们将熵作为自适应目标进行研究,并提出了一种测试时间熵最小化方案,通过减少测试数据上模型预测的熵来减少泛化误差。
3)对于损坏的鲁棒性,tent在ImageNet-C上达到44.0%的错误率,优于最先进的鲁棒训练(50.2%)和测试时间标准化的强基线(49.9%)。
4)对于领域自适应,tent能够online和source free 地适应数字分类和语义分割,甚至可以与使用源数据并进行更多优化的方法相媲美
Fully Test-Time Adaption
一组输入数据和标签:X,Y
source distribution: Xs, Ys
target distribution: Xt, Yt
带参数 θ的模型fθ(x)在Xs, Ys 上训练的不一定会生成当在偏移的目标数据 Xt 上
我们的fully test-time adaptation 设置只需要模型fθ(x)和未标记的目标数据Xt在推理过程中进行自适应。

方法:TEST ENTROPY MINIMIZATION VIA FEATURE MODULATION
我们在测试期间优化模型,通过调节其特征来最小化其预测的熵。我们把我们的方法tent称为测试熵(test entropy)。Tent需要一个兼容的模型compatible model、最小化目标an objective to minimize (章节3.1)和优化参数parameters to optimize over(章节3.2)来完全定义算法(章节3.3)。图3概述了我们完全适应测试时间的方法。
在测试期间没有提供监督,因此模型必须已经经过训练。测量预测的熵需要预测的分布,所以模型必须是概率性的。
快速迭代优化需要梯度,因此模型必须是可微的。用于监督学习的典型深度网络满足这些模型要求。
3.1 ENTROPY OBJECTIVE
我们的test-time 目标L(xt) 是去最小化模型预测 yˆ = fθ(xt)的熵 H(yˆ)
特别的,我们参考信息熵 
用于类c的yˆc
熵是一个无监督的目标,因为它只依赖于预测而不是注释。然而,作为预测的度量,它与被监督的任务和模型直接相关。
相比之下,自监督学习的代理任务与监督任务没有直接关系。
代理任务从输入xt 在没有标签y的情况下 派 生出一个自监督标签y'。这些代理的例子包括旋转预测(Gidaris等人,2018)、上下文预测(Doersch等人,2015)和跨通道自动编码(Zhang等人,2017)。代理任务的太多进展可能会干扰监督任务的性能,自监督适应方法必须相应地限制或混合更新(Sun et al., 2019b;a)。因此,需要谨慎选择与领域和任务兼容的代理,为代理模型设计体系结构,并在任务和代理目标之间平衡优化。我们的熵目标不需要这样的努力。
3.2 MODULATION PARAMETERS
模型参数θ是test-time优化的自然选择,也是训练时间熵最小化的先验选择。然而,θ是我们设置中训练/源数据的唯一表示,改变θ可能会导致模型偏离其训练。此外,f可能是非线性的,θ可能是高维的,这使得优化对测试时间的使用过于敏感和低效。
为了稳定性和效率,我们只更新线性(scales and shifts)和低维(通道方向)的特征调制。
本图展现了我们调制的两个步骤

1)normalization by statistics
输入x
输出 x¯ = (x − µ)/σ
其中平均值µ和标准差σ
2)transformation by parameters
输入 x¯
输出 x‘ = γx¯ + β
仿射参数 scale γ, shift β
注意,统计量µ,σ是从数据中估计的,而参数γ, β是通过损失优化的
3.3 ALGORITHM
Initialization
优化器对于源模型中的每个归一化层l和通道k收集仿射变换参数{γl,k, βl,k},其余参数θ\ {γl,k, βl,k}被放回原处。源数据的归一化统计{µl,k, σl,k}被丢弃。
Iteration
每一步更新一个batch的数据的normalization statistics 和 transformation parameters。在向前传递期间,依次估计每层的归一化统计量。在反向传播的过程中transformation参数 γ, β由预测熵∇H(y^)的梯度更新。注意这里的transformation更新遵循当前批的预测,因此它只影响下一个批(除非forward重复)。每个额外的计算点只需要一个梯度,所以我们默认使用这个方案来提高效率。
Termination
对于在线adaption,不需要终止,只要有测试数据,迭代就会继续。对于离线adaption,首先更新模型,然后重复推理。当然,适应可以通过多个epoch的更新来继续
实验
数据集
corruption robustness:
CIFAR-10/CIFAR-100
ImageNet
domain adaptation:
SVHN
MNIST/MNIST-M/USPS
模型
corruption:
residual networks(R-26) CIFAR-10/CIFAR-100 (R-50)ImageNet
domain adaption: (R-26)
实验结果





总结
Tent通过最小化测试时间熵来减少移位数据的泛化误差。在最小化熵的过程中,模型根据自己预测的反馈进行自我调整。这才是真正的自我监督的自我提升。这种类型的自我监督完全由被监督任务定义,不像代理任务旨在从数据中提取更多的监督,但它仍然显著地减少了错误。然而,由于corruption 和其他变化造成的错误仍然存在,因此需要更多的适应。接下来的步骤应该追求测试时间适应更多和更困难类型的转移,在更一般的参数,并通过更有效和高效的损失。
Shifts
Tent减少了各种转换的错误,包括图像损坏,数字外观的简单变化以及模拟到真实的差异。
Parameters
Tent通过规范化和转换来调整模型,但模型的大部分保持固定。test-time adaption可以更新更多的模型,但问题是要确定既具有表现力又可靠的参数,这可能与损失的选择相互作用。
Losses
Tent使熵最小化。对于更强的adaption,对于一般的但偶然的测试时间优化是否有有效的损失?熵在任务中是通用的,但在范围上是有限的。它需要批量优化,并且不能一次在一个点上偶然更新。
相关文章:
TENT:熵最小化的Fully Test-Time Adaption
摘要 在测试期间,模型必须自我调整以适应新的和不同的数据。在这种完全自适应测试时间的设置中,模型只有测试数据和它自己的参数。我们建议通过test entropy minimization (tent[1])来适应:我们通过其预测的熵来优化模型的置信度。我们的方法估计归一化…...
研发日记,Matlab/Simulink避坑指南(五)——CAN解包 DLC Bug
文章目录 前言 背景介绍 问题描述 分析排查 解决方案 总结 前言 见《研发日记,Matlab/Simulink避坑指南(一)——Data Store Memory模块执行时序Bug》 见《研发日记,Matlab/Simulink避坑指南(二)——非对称数据溢出Bug》 见《…...
机器人3D视觉引导半导体塑封上下料
半导体塑封上下料是封装工艺中的重要环节,直接影响到产品的质量和性能。而3D视觉引导技术的引入,使得这一过程更加高效、精准。它不仅提升了生产效率,减少了人工操作的误差,还为半导体封装技术的智能化升级奠定了坚实的基础。 传统…...
(十二)Head first design patterns代理模式(c++)
代理模式 代理模式:创建一个proxy对象,并为这个对象提供替身或者占位符以对这个对象进行控制。 典型例子:智能指针... 例子:比如说有一个talk接口,所有的people需要实现talk接口。但有些人有唱歌技能。不能在talk接…...
C++从零开始的打怪升级之路(day21)
这是关于一个普通双非本科大一学生的C的学习记录贴 在此前,我学了一点点C语言还有简单的数据结构,如果有小伙伴想和我一起学习的,可以私信我交流分享学习资料 那么开启正题 今天分享的是关于vector的题目 1.删除有序数组中的重复项 26. …...
《设计模式的艺术》笔记 - 观察者模式
介绍 观察者模式定义对象之间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。 实现 myclass.h // // Created by yuwp on 2024/1/12. //#ifndef DESIGNPATTERNS_MYCLASS_H #define DESIGNPATTERNS_MYCLA…...
Java如何对OSS存储引擎的Bucket进行创建【OSS学习】
在前面学会了如何开通OSS,对OSS的一些基本操作,接下来记录一下如何通过Java代码通过SDK对OSS存储引擎里面的Bucket存储空间进行创建。 目录 1、先看看OSS: 2、代码编写: 3、运行效果: 1、先看看OSS: 此…...
ModuleNotFoundError: No module named ‘half_json‘
问题: ModuleNotFoundError: No module named ‘half_json’ 原因: 缺少jsonfixer包 解决方法: pip install jsonfixerjson修正包地址: https://github.com/half-pie/half-json...
深入探究 Android 内存泄漏检测原理及 LeakCanary 源码分析
深入探究 Android 内存泄漏检测原理及 LeakCanary 源码分析 一、什么是内存泄漏二、内存泄漏的常见原因三、我为什么要使用 LeakCanary四、LeakCanary介绍五、LeakCanary 的源码分析及其核心代码六、LeakCanary 使用示例 一、什么是内存泄漏 在基于 Java 的运行时中࿰…...
Linux CentOS使用Docker搭建laravel项目环境(实践案例详细说明)
一、安装docker # 1、更新系统软件包: sudo yum update# 2、安装Docker依赖包 sudo yum install -y yum-utils device-mapper-persistent-data lvm2# 3、添加Docker的yum源: sudo yum-config-manager --add-repo https://download.docker.com/linux/cen…...
第六课:Prompt
文章目录 第六课:Prompt1、学习总结:Prompt介绍预训练和微调模型回顾挑战 Pre-train, Prompt, PredictPrompting是什么?prompting流程prompt设计 课程ppt及代码地址 2、学习心得:3、经验分享:4、课程反馈:5、使用Mind…...
网络安全(初版,以后会不断更新)
1.网络安全常识及术语 资产 任何对组织业务具有价值的信息资产,包括计算机硬件、通信设施、IT 环境、数据库、软件、文档 资料、信息服务和人员等。 漏洞 上边提到的“永恒之蓝”就是windows系统的漏洞 漏洞又被称为脆弱性或弱点(Weakness)&a…...
开始学习Vue2(脚手架,组件化开发)
一、单页面应用程序 单页面应用程序(英文名:Single Page Application)简 称 SPA,顾名思义,指的是一个 Web 网站中只有唯一的 一个 HTML 页面,所有的功能与交互都在这唯一的一个页面内完成。 二、vue-cli …...
平替heygen的开源音频克隆工具—OpenVoice
截止2024-1-26日,全球范围内语音唇形实现最佳的应该算是heygen,可惜不但要魔法,还需要银子;那么有没有可以平替的方案,答案是肯定的。 方案1: 采用国内星火大模型训练自己的声音,然后再用下面…...
【自动化测试】读写64位操作系统的注册表
自动化测试经常需要修改注册表 很多系统的设置(比如:IE的设置)都是存在注册表中。 桌面应用程序的设置也是存在注册表中。 所以做自动化测试的时候,经常需要去修改注册表 Windows注册表简介 注册表编辑器在 C:\Windows\regedit…...
php二次开发股票系统代码:腾讯股票数据接口地址、批量获取股票信息、转换为腾讯接口指定的股票格式
1、腾讯股票数据控制器 <?php namespace app\index\controller;use think\Model; use think\Db;const BASE_URL http://aaaaaa.aaaaa.com; //腾讯数据地址class TencentStocks extends Home { //里面具体的方法 }2、请求接口返回内容 function juhecurl($url, $params f…...
uniapp 在static/index.html中添加全局样式
前言 略 在static/index.html中添加全局样式 <style>div {background-color: #ccc;} </style>static/index.html源码: <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"utf-8"><meta http-…...
acrobat调整pdf的页码和实际页码保持一致
Acrobat版本 具体操作 现在拿到pdf的结构如下: pdf页码实际页码1-10页无页码数11页第1页 操作,选择pdf第10页,右键点击 具体设置 最终效果...
ctfshow-命令执行
大佬文章 L i n u x \rm Linux Linux 下空格绕过 无参数 r c e \rm rce rce 无字符 r c e \rm rce rce web29 通配符: *:匹配任意多个字符 ?:匹配任意一个字符 []:匹配某个范围的字符( [ a d ] [ad] [ad] 表示 …...
【Python基础015】集合的用法
1、定义 集合是无序可变,元素不能重复。实际上,集合底层是字典实现,集合的所有元素都是字典中的 “ 键对象”,因此是不能重复的且唯一的。 2、创建 (1)使用{}创建 a {1, 2, 3} # 集合存储整数b {1, 2,…...
19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...
Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...
视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...
使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...
