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.rhkb.cn/news/367739.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue项目打包上线

Nginx 是一个高性能的开源HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。它在设计上旨在处理高并发的请求,是一个轻量级、高效能的Web服务器和反向代理服务器,广泛用于提供静态资源、负载均衡、反向代理等功能。 1、下载nginx 2、…

探讨命令模式及其应用

目录 命令模式命令模式结构命令模式适用场景命令模式优缺点练手题目题目描述输入描述输出描述题解 命令模式 命令模式是一种行为设计模式, 它可将请求转换为一个包含与请求相关的所有信息的独立对象。 该转换让你能根据不同的请求将方法参数化、 延迟请求执行或将其…

【高级篇】第9章 Elasticsearch 监控与故障排查

9.1 引言 在现代数据驱动的应用架构中,Elasticsearch不仅是海量数据索引和搜索的核心,其稳定性和性能直接影响到整个业务链路的健康度。因此,建立有效的监控体系和掌握故障排查技能是每一位Elasticsearch高级专家的必备能力。 9.2 监控工具:洞察与优化的利器 在Elastics…

Rough.js在Vue3中生成随机蒙德里安风格的抽象艺术

本文由ScriptEcho平台提供技术支持 项目地址:传送门 Mondrian风格艺术生成器:用Vue和RoughJS创造抽象艺术 应用场景 Mondrian风格艺术以其大胆的色彩块和简单的几何形状而闻名。这种风格可以应用于各种设计项目,包括海报、插图和网页设计…

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

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

Markdown+VSCODE实现最完美流畅写作体验

​下载VSCODE软件 安装插件 Markdown All in One :支持markdown的语言的; Markdown Preview Enhanced :观看写出来文档的效果; Paste IMage :添加图片的 Code Spell Checker检查英文单词错误; 基础语法 标题 #一个…

AI 会淘汰程序员吗?

前言 前些日子看过一篇文章,说国外一位拥有 19 年编码经验、会 100% 手写代码的程序员被企业解雇了,因为他的竞争对手,一位仅有 4 年经验、却善于使用 Copilot、GPT-4 的后辈,生产力比他更高,成本比他更低&#xff0c…

西南交通大学【算法分析与设计实验3】

实验3.3 任务分配问题 实验目的 (1)理解穷举法典型算法的求解过程。 (2)学习穷举法的时间复杂度分析方法,并通过实验验证算法的执行效率。 (3)学会如何利用穷举法求解具体问题,了…

按是否手工执行测试的角度划分:手工测试、自动化测试

1.手工测试(Manual testing) 手工测试是由人一个一个的输入用例,然后观察结果,和机器测试相对应,属于比较原始但是必须的一个步骤。 由专门的测试人员从用户视角来验证软件是否满足设计要求的行为。 更适用针对深度…

哈希表 | 哈希查找 | 哈希函数 | 数据结构 | 大话数据结构 | Java

🙋大家好!我是毛毛张! 🌈个人首页: 神马都会亿点点的毛毛张 📌毛毛张今天分享的内容🖆是数据结构中的哈希表,毛毛张主要是依据《大话数据结构📖》的内容来进行整理,不…

程序化交易广告及其应用

什么是程序化交易广告? 程序化交易广告是以实时竞价技术即RTB(real-time bidding)为核心的广告交易方式。说到这里,你可能会有疑问:像百度搜索关键词广告还有百度网盟的广告,不也是CPC实时竞价的吗&#x…

创建kset

1、kset介绍 2、相关结构体和api介绍 2.1 struct kset 2.2 kset_create_and_add kset_create_and_addkset_createkset_registerkobject_add_internalkobject_add_internal2.3 kset_unregister kset_unregisterkobject_delkobject_put3、实验操作 #include<linux/module.…

kafka(一)原理(2)组件

一、broker 1、介绍 kafka服务器的官方名字&#xff0c;一个集群由多个broker组成&#xff0c;一个broker可以容纳多个topic。 2、工作流程 3、重要参数 参数名称 描述 replica.lag.time.max.ms ISR中&#xff0c;如果Follower长时间未向Leader发送通信请求或同步数据&a…

【分布式数据仓库Hive】HivQL的使用

目录 一、Hive的基本操作 1. 使用Hive创建数据库test 2. 检索数据库&#xff08;模糊查看&#xff09;&#xff0c;检索形如’te*’的数据库 3. 查看数据库test详情 4. 删除数据库test 5. 创建一个学生数据库Stus&#xff0c;在其中创建一个内部表Student&#xff0c;表格…

开源自动化热键映射工具autohotkey十大用法及精选脚本

AutoHotkey&#xff08;AHK&#xff09;是一款功能强大的热键脚本语言工具&#xff0c;它允许用户通过编写脚本来自动化键盘、鼠标等设备的操作&#xff0c;从而极大地提高工作效率。以下是AutoHotkey的十大经典用法&#xff0c;这些用法不仅解放了用户的双手&#xff0c;还展示…

OpenGL3.3_C++_Windows(27)

法线/凹凸贴图 如何让纹理产生更细节的效果&#xff0c;产生凹凸视觉感&#xff1f;解决思路之一&#xff1a;镜面贴图(黑—白&#xff09;&#xff08;&#xff08;diffuse贴图&#xff08;rgba&#xff09;&#xff09;&#xff0c;阻止部分表面被照的更亮&#xff0c;但这并…

不是大厂云用不起,而是五洛云更有性价比

明月代维的一个客户的大厂云境外云服务器再有几天就到期了&#xff0c;续费提醒那是提前一周准时到来&#xff0c;但是看到客户发来的续费价格截图&#xff0c;我是真的没忍住。这不就是在杀熟吗&#xff1f;就这配置续费竟然如此昂贵&#xff1f;说实话这个客户的服务器代维是…

ForkJoin框架与工作窃取算法详解

文章目录 一、ForkJoin框架概述1_核心概念2_主要类和方法1_ForkJoinPool2_ForkJoinTask 二、启用异步模式与否的区别三、ForkJoinPool的三种任务提交方式四、执行逻辑及使用示例1_示例&#xff1a;并行计算数组元素和2_forkJoinPool.submit3_ForkJoinTask<?>中任务的执行…

Web3 前端攻击:原因、影响及经验教训

DeFi的崛起引领了一个创新和金融自由的新时代。然而&#xff0c;这种快速增长也吸引了恶意行为者的注意&#xff0c;他们试图利用漏洞进行攻击。尽管很多焦点都集中在智能合约安全上&#xff0c;但前端攻击也正在成为一个重要的威胁向量。 前端攻击的剖析 理解攻击者利用前端漏…

uniapp标题水平对齐微信小程序胶囊按钮及适配

uniapp标题水平对齐微信小程序胶囊按钮及适配 状态栏高度胶囊按钮的信息计算顶部边距模板样式 标签加样式加动态计算实现效果 t是胶囊按钮距离的top h是胶囊按钮的高度 s是状态栏高度 大概是这样 状态栏高度 获取系统信息里的状态栏高度 const statusBarHeight uni.getSy…