【论文解读】SiamMAE:用于从视频中学习视觉对应关系的 MAE 简单扩展

来源:投稿 作者:橡皮
编辑:学姐

论文链接:https://siam-mae-video.github.io/resources/paper.pdf

项目主页:https://siam-mae-video.github.io/

1.背景

时间是视觉学习背景下的一个特殊维度,它提供了一种结构,在该结构中,可以感知顺序事件、学习因果关系、跟踪物体在空间中的移动,以及预测未来事件。所有这些功能的核心是随着时间的推移建立视觉对应的能力。我们的视觉系统擅长在场景之间建立对应关系,尽管存在遮挡、视点变化和对象变换。这种能力是无人监督的,对人类视觉感知至关重要,并且仍然是计算机视觉领域的重大挑战。为机器配备这种能力可以实现广泛的应用,例如视频中的对象分割和跟踪、深度和光流估计以及 3D 重建。

一种强大的自监督学习范例是预测性学习,即根据信号的任何观察到或未隐藏部分预测信号的任何未观察到或隐藏部分。值得注意的是,这种形式的预测学习已被用于通过观察(彩色)过去参考帧来预测灰度未来帧的颜色来学习对应关系。然而,这些方法的性能落后于对比自监督学习方法。学习对应的最先进方法主要采用某种形式的对比学习。直观上,基于对比学习的方法非常适合学习对应的任务,因为它们利用广泛的数据增强来学习不随姿势、光照、视点和其他因素的变化而变化的特征。然而,对对比方法的一个主要批评是它们依赖于仔细选择增强来学习有用的不变性 ,以及一套额外的组件来防止表征崩溃。

最近,掩蔽语言建模和掩蔽视觉建模 (MVM)等预测学习方法在自然语言处理和计算机视觉领域取得了令人鼓舞的成果。像 Masked Autoencoders (MAE) 这样的 MVM 方法通过学习从随机屏蔽的输入图像块中重建丢失的块,在不依赖数据增强的情况下学习良好的视觉表示。然而,出于两个原因,将 MVM 方法从图像扩展到视频以学习对应关系并非易事。首先,MAE 学习的特征专门用于像素重建任务,在微调方面表现出出色的下游性能,但在零样本设置中迁移效果不佳。其次,视频领域中 MAE 的现有扩展也对称地掩盖了所有帧中的大部分补丁。与(大约)各向同性的图像不同,时间维度是特殊的,并且并非所有时空方向都同样可能。因此,对称地处理空间和时间信息可能是次优的。事实上,在视频实例跟踪基准上,在视频上训练的 MAE 的表现并不优于在 ImageNet 上训练的 MAE(表 1)。

2.本文主要贡献

为了解决这些限制,我们提出了 Siamese Masked Autoencoders (SiamMAE):MAE 的简单扩展,用于从视频中学习视觉对应。

在我们的方法中,从视频剪辑中随机选择两帧,未来帧的大部分 (95%) 补丁被随机屏蔽,而过去的帧保持不变。这些帧由编码器网络独立处理,由一系列交叉注意层组成的解码器负责预测未来帧中丢失的补丁。我们的非对称掩蔽方法鼓励网络对物体运动进行建模,或者换句话说,理解什么去了哪里。将 MAE 简单扩展到具有对称掩蔽的帧会浪费模型容量来建模低级图像细节。然而,通过提供整个过去的帧作为输入,我们的网络主要专注于将补丁从过去的帧传播到它们在未来帧中的相应位置。我们解码器中的交叉注意层的功能类似于自监督对应学习方法中经常使用的亲和力矩阵。根据经验,我们发现非对称掩蔽、连体编码器和我们的解码器的组合可以有效地学习适合需要细粒度和对象级对应的任务的特征。

尽管我们的方法在概念上很简单,但它在视频对象分割、姿势关键点传播和语义部分传播方面优于最先进的自监督方法。

此外,我们的 ViT-S/16 模型在视频对象分割任务中通过 MVM 显着优于在 ImageNet(+8.5% J &Fm for ViT-B)和 Kinetics-400(+7.4% J &Fm for ViT-L)上训练的大型模型。我们还观察到使用较小补丁大小 (ViT-S/8) 训练的模型在所有任务中的显着性能提升。 SiamMAE 在不依赖数据增强、手工制作的基于跟踪的借口任务、多作物训练、防止表征崩溃的附加技术的情况下取得了有竞争力的结果或提高性能。我们相信,我们详细的分析、直接的方法和最先进的性能可以作为自我监督对应学习的强大基线。

3.方法介绍

我们的目标是开发一种学习对应关系的自我监督方法。为此,我们研究了 MAE对视频数据的简单扩展(图 1)。在本节中,我们描述了连体蒙版自动编码器的关键组件。

图 1:Siamese Masked 自动编码器。在预训练期间,我们随机采样一对视频帧并随机屏蔽未来帧的大部分 (95%) 块,同时保持过去帧不变。这两帧由 ViT [31] 参数化的连体编码器独立处理。解码器由一系列交叉注意层组成,并预测未来帧中丢失的补丁。

3.1 Patchify.

给定一个有 L 帧的视频剪辑,我们首先随机采样 2 帧 f1 和 f2。这两个帧之间的距离是通过从预定的潜在帧间隙范围中选择一个随机值来确定的。按照原始 ViT [31],我们通过将每一帧转换为一系列非重叠的 N×N 补丁来“补丁化”每一帧。最后,将位置嵌入 [94] 添加到补丁的线性投影 [31] 中,并附加一个 [CLS] 标记。我们不使用任何时间位置嵌入。

3.2 Masking.

图像和视频等自然信号是高度冗余的,分别表现出空间和时空冗余。为了创建具有挑战性的预测性自监督学习任务,MAE 随机屏蔽了高比例 (75%) 的图像块,视频扩展使用了更高的屏蔽率 (90%)。在图像和视频中,屏蔽策略是对称的,即所有帧都具有相似的屏蔽率。这种深思熟虑的设计选择阻止了网络利用和学习时间对应,导致对应学习基准的性能不佳。

我们假设不对称掩码可以创建具有挑战性的自我监督学习任务,同时鼓励网络学习时间相关性。具体来说,我们不屏蔽 f1 中的任何补丁 (0%) 并屏蔽 f2 中非常高比例 (95%) 的补丁。通过提供整个过去的帧作为输入,网络只需要将补丁从过去的帧传播到它们在未来帧中的适当位置。这反过来又鼓励网络对物体运动进行建模并关注物体边界(图 5)。为了进一步增加任务的难度,我们对时间间隔较大的两帧进行采样。尽管进一步预测未来本质上是模棱两可的,并且可能会产生多个似是而非的结果,但提供少量补丁作为第二帧的输入会导致具有挑战性但易于处理的自监督学习任务。

3.3 Encoder.

我们探索了两种不同的编码器配置来处理输入帧。

joint encoder是图像 MAE 到一对帧的自然扩展。来自两个帧的未屏蔽补丁被连接起来,然后由标准 ViT 编码器处理。

*siamese encoder *是用于比较实体的权重共享神经网络,是现代对比表示学习方法的重要组成部分。 Siamese 网络已用于对应学习,并且通常需要一些信息瓶颈来防止网络学习琐碎的解决方案。例如,Lai 和 Xie提出使用颜色通道 dropout 来强制网络避免依赖颜色来匹配对应关系。我们使用孪生编码器独立处理两个帧,我们的不对称掩码成为信息瓶颈。

3.4 Decoder.

使用线性层投影编码器的输出,并添加具有位置嵌入的 [MASK] 标记以生成与输入帧对应的完整标记集。我们探索了三种不同的解码器配置,它们对全套令牌进行操作。

joint decoder将原始 Transformer 块应用于来自两个帧的完整标记集的串联。这种方法的一个主要缺点是显着增加了 GPU 内存需求,尤其是在使用较小的补丁大小时。

cross-self decoder类似于 Transformer模型的原始编码器-解码器设计。每个解码器块由一个交叉注意层和一个自注意层组成。来自 f2 的标记通过交叉注意层关注来自 f1 的标记,然后通过自注意层相互关注。我们注意到,交叉注意层在功能上类似于自监督对应学习方法中经常使用的亲和矩阵。

cross decoder由仅具有交叉注意层的解码器块组成,其中来自 f2 的标记参与来自 f1 的标记。

最后,解码器的输出序列用于预测屏蔽补丁中的归一化像素值。 l2 loss应用于解码器的预测和ground truth之间。

4.实验

在本节中,我们在三个不同的任务上评估我们的方法,将其性能与现有的最先进方法进行比较,并对不同的设计选择进行广泛的消融研究。

图 2:Kinetics-400验证集的可视化(掩蔽率 90%)。对于每个视频序列,我们采样一个 8 帧的剪辑,帧间距为 4,并显示原始视频(顶部)、SiamMAE 输出(中间)和屏蔽的未来帧(底部)。重建显示为 f1 作为视频剪辑的第一帧,f2 作为剩余帧,使用 SiamMAE 预训练的 ViT-S/8 编码器,屏蔽率为 95%。

图 3:三个下游任务的定性结果:视频对象分割 (DA VIS2017)、人体姿势传播 (JHMDB) 和语义部分传播 (VIP)。

4.1 实验设置

骨干网络。 我们在大部分实验中使用 ViT-S/16 模型,因为它在参数数量(21M 与 23M)方面与 ResNet-50 相似,并且允许对不同的自监督学习和对应学习方法进行公平比较。

预训练。 使用 Kinetics-400对模型进行预训练以进行自我监督学习。 SiamMAE 将随机采样帧 (224 × 224) 作为输入对,帧间隙范围为 4 到 48 帧,速率为 30 fps。我们执行最小的数据增强:随机调整大小的裁剪和水平翻转。为消融研究(表 2、3)进行了 400 个时期的训练,为表 1 中的结果进行了 2000 个时期的训练。我们采用重复采样因子为 2 并报告“有效时期”,即数量训练期间观看培训视频的次数。我们使用批量大小为 2048 的 AdamW 优化器。

评估方法。 我们在三个下游任务上使用 k 最近邻推理评估密集对应任务的学习表示质量:视频对象分割 (DA VIS-2017)、人体姿势传播 (JHMDB) 和语义部分传播 (VIP))。在之前的工作之后,所有任务都被表述为视频标签传播:给定初始帧的真实标签,目标是预测视频未来帧中每个像素的标签。我们还通过维护最后 m 帧的队列在推理期间提供时间上下文,并且我们将考虑的源补丁集限制在查询补丁的空间邻域内。

4.2 与之前工作的比较

视频对象分割。 我们首先在 DA VIS 201上评估我们的模型,这是视频对象分割的基准,用于半监督多对象分割的任务。我们遵循先前工作的评估协议,并使用 480p 分辨率的图像进行评估。我们发现 SiamMAE 明显优于 VideoMAE(39.3% 至 62.0%),我们将其归因于 VideoMAE 中使用的管掩蔽方案阻止了模型学习时间对应关系。与 DINO一样,我们还发现减小补丁大小可以显着提高性能。我们的 ViT-S/8 (+9.4%) 模型优于所有先前的对比学习和自我监督对应学习方法。最后,我们注意到,尽管使用随机掩码训练的较大 MAE-ST 模型(ViT-L/16、304M 参数)的性能优于 VideoMAE,但它们的性能仍然落后于 SiamMAE 相当大的差距。令人惊讶的是,我们发现在视频上训练的 MAE 与图像 MAE 的表现相似。与(大约)各向同性的图像不同,时间维度是特殊的,并且并非所有时空方向都同样可能。因此,对称地处理空间和时间信息可能是次优的。

视频部分分割。 接下来,我们在视频实例解析 (VIP) 基准上评估 SiamMAE,它涉及为 20 个不同的人体部分传播语义掩码。与我们评估中的其他数据集相比,VIP 特别具有挑战性,因为它涉及更长的视频(长达 120 秒)。我们遵循先前工作的评估协议,使用 560 × 560 图像和单个上下文框架。在这项具有挑战性的任务中,我们的 ViT-S/8 模型大大优于 DINO(39.5 至 45.9)。与 DINO 相比,SiamMAE 从更小的补丁尺寸中获益更多,比 DINO 的 +3.3 mIoU 提高了 +8.6 mIoU。最后,SiamMAE 优于所有先前的对比学习和自我监督对应学习方法。

姿势追踪。 我们在关键点传播任务上评估 SiamMAE,这涉及传播 15 个关键点并需要空间精确对应。我们遵循先前工作的评估协议,使用 320 × 320 图像和单个上下文框架。 SiamMAE 优于所有先前的工作,并且从比 DINO(+14.9 到 +10.9 PCK@0.1)更小的补丁尺寸中受益更多。

表 1:与三个下游任务的先前工作比较:视频对象分割 (DA VIS-2017)、人体姿态传播 (JHMDB) 和语义部分传播 (VIP)。

表 2:DA VIS上的 SiamMAE 消融实验,默认设置:连体编码器、交叉自解码器、不对称 (a) 掩蔽率 (95%) 和帧采样间隙。默认设置标记为蓝色,(s) 表示对称掩蔽。

表 3:数据扩充。我们消除了手动(空间和颜色抖动)和自然数据增强(帧采样)对于通过 DA VIS 上的 SiamMAE 学习对应关系的重要性。

图 4:训练计划和补丁大小。 ViT-S/16 和 ViT-S/8 模型的 3 个下游任务的 SiamMAE 性能评估。在所有任务中,更长的训练时间和更小的补丁大小可以提高性能。

4.3 消融研究

我们消融 SiamMAE 以了解每个设计决策对默认设置的贡献:孪生编码器、交叉自我解码器、不对称掩蔽率 (95%)、帧采样间隙 4 − 48。

帧MAE。 我们将 SiamMAE 与 FrameMAE(表 2a)进行比较,FrameMAE 是 MAE 对视频帧的扩展,即具有对称屏蔽比的联合编码器和联合解码器。当掩蔽率过高 (90%) 或过低 (50%) 时,FrameMAE 的性能明显变差。在 90% 的掩蔽率下,由于可用于学习时间对应的补丁数量不足,任务变得具有挑战性(更高的损失)。当掩蔽率为 50% 时,任务变得更容易(损失更低),并且由于图像的空间冗余,网络可以在不依赖时间信息的情况下重建帧。具有不对称掩蔽率的 SiamMAE 效果最好。

编码器-解码器设计。 SiamMAE 的一个重要设计决策是编码器和解码器的选择。我们在表 2b 中研究了具有不对称掩蔽的编码器和解码器的各种组合的性能。在所有解码器设计中,联合编码器的性能明显低于连体编码器。这可以归因于训练和测试设置之间的差异,因为每个帧在测试阶段都是独立处理的。带有交叉解码器的连体编码器在连体编码器中表现最差。我们还观察到训练损失更高并且重建的帧在空间上不连贯,因为来自 f2 的所有补丁都是独立处理的。最后,孪生编码器与交叉自我解码器的组合优于所有其他配对。交叉注意力操作类似于自监督对应学习中使用的亲和矩阵,也用于我们的评估协议中的标签传播。因此,通过独立处理帧并通过交叉自我解码器解码它们,鼓励网络学习良好的密集视觉对应表示。

掩码。 接下来,我们讨论屏蔽方案对连体编码器与自交叉解码器组合的影响。随机对称掩蔽性能较差,也比相应的 FrameMAE 配置差(表 2a、2c)。我们还研究了网格方式的掩码采样策略,该策略保留每个交替的补丁。这是一项更容易的任务,因为掩蔽模式使网络能够利用和学习时空相关性。尽管我们看到了显着的进步(41.5 到 48.2),但与 SiamMAE 相比,性能仍然很差。在表 2d 中,我们研究了不同不对称掩蔽比的作用。我们注意到一个明显的趋势:将掩蔽率从 50% 增加到 95% 会提高性能(49.0% 到 58.1%)。

数据扩充。 在表 3a 中,我们研究了不同数据增强策略的影响。与图像 [24] 和视频 [27] 领域中的发现类似,我们发现 SiamMAE 不需要大量的数据增强来实现竞争性能。缩放范围为 [0.5, 1] 的随机裁剪和水平翻转效果最好,添加颜色抖动会导致性能下降。像 DINO 这样的对比方法通过使用广泛的数据增强显示出令人印象深刻的 k-NN 性能。相比之下,SiamMAE 依靠视频中可用的自然数据增强实现了卓越的结果,接下来将讨论。

帧采样。 视频数据是数据增强的丰富来源,例如姿势、光照视点、遮挡等方面的变化。为了有效利用这一点,我们在表 3b 中研究了帧采样的重要性。当我们增加帧采样间隙时,性能会提高。自然视频经常表现出渐进的时间变化;因此,增加帧间隔会导致更强大的自然数据增强,从而提高性能。我们的帧采样策略简单有效:随机采样帧间隙为 4 到 48 帧的帧。

训练时间表。 如前所述,我们的消融基于 400 个纪元的预训练。图 4 研究了 ViT-S/16 和 ViT-S/8 模型的训练长度计划对本工作中考虑的三个下游任务的影响。由于计算限制,我们报告了在不同检查点对单个模型的评估。在两个补丁大小和所有任务中,准确性会随着训练时间的延长而逐渐提高。

4.4 定性分析**

在图 5 中,我们可视化了 ViT-S/8 模型的自注意力图。我们使用 [CLS] 标记作为查询,并使用来自 ImageNet 的 720p 图像可视化最后一层单个头部的注意力。

图 5:自注意力图。来自 ViT-S/8 模型的自注意力图。我们检查了最后一层头部 [CLS] 标记的自注意力。与对比方法不同,没有明确的损失函数作用于 [CLS] 标记。这些自注意力图表明该模型已经从视频中的对象运动中学习了对象边界的概念。

我们发现该模型关注对象边界。例如,它可以清楚地勾勒出标志性物体(如第一行第一列的羊)、多个物体(如第三行第六列的三名棒球运动员),甚至在场景杂乱时(如图所示)第二行第四列的鸟)。虽然其他自监督学习方法已经报告了涌现的对象分割能力,但我们不知道有任何方法展示了预测对象边界的涌现能力。这种涌现能力是独特且令人惊讶的,因为与对比学习方法不同,SiamMAE(或 MAE)中的 [CLS] 标记没有损失函数。我们将这种能力的出现归因于我们的不对称掩蔽率,这鼓励模型从视频中的物体运动中了解物体边界。

5.结论和局限性

在这项工作中,我们介绍了 SiamMAE,这是一种从视频中进行表示学习的简单方法。我们的方法基于这样一种直觉,即时间维度应该与空间维度区别对待。我们证明了一种非对称掩蔽策略,即在保持过去帧不变的同时,掩蔽未来帧的大部分补丁,是学习对应的有效策略。通过预测未来帧的大部分,我们发现我们的 SiamMAE 能够学习对象边界的概念(图 5)。此外,与 MAE 不同的是,通过我们的方法学习的特征可以以零样本的方式使用,并且在各种任务中优于最先进的自监督方法,例如视频对象分割、姿势关键点传播和语义部分传播. SiamMAE 实现了这些有竞争力的结果,而无需数据增强、手工制作的基于跟踪的借口任务或其他防止表征崩溃的技术。我们希望我们的工作能够通过预测未来来鼓励进一步探索学习表征。

局限性和未来的工作。 我们的研究侧重于通过对视频帧对进行操作来学习对应关系。这种选择是由该方法的经验成功和可用计算资源有限驱动的。因此,我们认为需要进一步研究以了解基于过去帧预测多个未来帧的作用,包括一般视觉表示学习和特定的对应学习。一个重要的未来方向是系统地检查我们的方法在数据和模型大小方面的可扩展性。继之前的工作之后,我们利用互联网视频进行预训练。然而,还必须调查不同类型的视频数据的影响,例如以自我为中心的视频与“野外”互联网视频。最后,我们学习到的表征在涉及具体代理(即机器人)的应用中具有潜力,因为对应的概念在诸如对象操纵、导航和动态环境中的交互等任务中可能很有用。

关注下方《学姐带你玩AI》🚀🚀🚀

回复“ViT200”获取全部190+篇ViT论文+代码合集

码字不易,欢迎大家点赞评论收藏!

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

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

相关文章

QT上位机开发(加密和解密)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 加密和解密是我们在软件开发中经常遇到的一种情形。最早的时候,加密是用在军事上面。现在由于各个行业、各个公司之间的竞争也非常激烈…

Kafka的安装、管理和配置

Kafka的安装、管理和配置 1.Kafka安装 官网: https://kafka.apache.org/downloads 下载安装包,我这里下载的是https://archive.apache.org/dist/kafka/3.3.1/kafka_2.13-3.3.1.tgz Kafka是Java生态圈下的一员,用Scala编写,运行在Java虚拟机上&#xf…

不会 python 语言没关系,GPT 会呀

在日常办公或者是编程过程中,经常要处理一些琐碎的任务。就拿编程来说,假如你现在收到一个任务,要提取源代码中所有的字符串,进行国际化。 一般来说,很多软件开发工具提供了国际化方案,比如 QT,…

x-cmd pkg | fx - Warp 支持的 JSON 查看和处理工具

目录 简介首次用户功能特点类似工具与竞品进一步探索 简介 fx 是一款由专为 JSON 定制的双用途命令行工具,提供基于终端的 JSON 查看器和 JSON 处理实用程序。虽然 JSON 查看器是用 Go 编写的,并且无需外部依赖即可运行,但 JSON 处理工具是用…

openGauss学习笔记-196 openGauss 数据库运维-常见故障定位案例-强制结束指定的问题会话

文章目录 openGauss学习笔记-196 openGauss 数据库运维-常见故障定位案例-强制结束指定的问题会话196.1 强制结束指定的问题会话196.1.1 问题现象196.1.2 处理办法 openGauss学习笔记-196 openGauss 数据库运维-常见故障定位案例-强制结束指定的问题会话 196.1 强制结束指定的…

实验室服务器升级

cuda、python、pytorch 版本兼容查看顺序及网站 任务: 在一个有GPU的电脑上安装pytorch时选择合适版本。 简述: 安装 pytorch 时,若要使用 GPU,需要考虑与 CUDA,python 的版本兼容情况。推荐考虑顺序:CUD…

NUS CS1101S:SICP JavaScript 描述:四、元语言抽象

原文:4 Metalinguistic Abstraction 译者:飞龙 协议:CC BY-NC-SA 4.0 …魔法就在于文字——Abracadabra,开门,以及其他——但一个故事中的魔法词在另一个故事中并不神奇。真正的魔法是理解哪些词起作用,何时…

Jenkins创建maven项目

Jenkins创建maven项目 环境准备 如果在项目没有看到maven,需要下载插件 本机需要有maven,并且maven配置过国内镜像,否则很大概率插件下不下来,如果有docker之前没有配置过需要进入docker手动配置。 需要在全局中配置maven的set…

Kubernetes (十一) 存储——Secret配置管理

一. 简介 从文件创建 echo -n admin > ./username.txt echo -n westos > ./password.txt kubectl create secret generic db-user…

力扣(leetcode)第606题根据二叉树创建字符串(Python)

606.根据二叉树创建字符串 题目链接:606.根据二叉树创建字符串 给你二叉树的根节点 root ,请你采用前序遍历的方式,将二叉树转化为一个由括号和整数组成的字符串,返回构造出的字符串。 空节点使用一对空括号对 “()” 表示&…

【大数据】Flink 详解(九):SQL 篇 Ⅱ

本系列包含: 【大数据】Flink 详解(一):基础篇【大数据】Flink 详解(二):核心篇 Ⅰ【大数据】Flink 详解(三):核心篇 Ⅱ【大数据】Flink 详解(四…

第十六章 i18n国际化

第十六章 i18n国际化 1.什么是i18n国际化2.i18n国际化三要素介绍3.i18n国际化基础示例4.通过请求头实现国际化5.通过语言类型选择实现国际化6.通过JSTL标签库fmt实现国际化 1.什么是i18n国际化 2.i18n国际化三要素介绍 3.i18n国际化基础示例 如果我要准备一个国际化的信息&…

测试工程师能否作为一份「终身职业」?30岁+怎么办?

【讨论】测试工程师可否作为一份终生的职业? 这是我在论坛看到的一个讨论,你的答案是什么呢? 我希望大家能认真思考后给出一个属于自己的答案,无论你是新手入门,还是资深专家。回答这个问题请不要凭一腔热血&#xff…

网络服务之DHCP

目录 一、DHCP是什么? 1、DHCP就是动态主机配置协议 2、DHCP的作用: 3、DHCP是应用层协议 二、DHCP的优点 三、DHCP的分配过程 1、自动分配:分配到一个ip地址后永久使用 2、手动配置:由DHCP服务器管理员专门指定ip地址&am…

ArchVizPRO Interior Vol.8 URP

ArchVizPRO Interior Vol.8 URP是一个在URP中制作的建筑可视化项目。这是一个完全可导航的现代公寓,包括一个带开放式厨房的客厅、休息区、两间卧室和两间浴室。从头开始构建每一个细节,这个室内有130多件家具和道具、自定义着色器和4K纹理。所有家具和道具都非常详细,可以在…

使用CentOS搭建高性能静态HTTP服务器

在互联网应用中,静态内容是广泛存在的,例如HTML页面、图片、视频等。为了提供高效、稳定和安全的静态内容服务,我们可以使用CentOS来搭建高性能的静态HTTP服务器。 1. 选择合适的软件 Nginx和Apache是两个流行的HTTP服务器软件。Nginx以其高…

如何定义核心场景用例?

首先我们解决两个问题: 1.什么是场景测试?2.什么是核心场景? 1、什么是场景测试? 🎯 1.1:什么是场景 事件触发时的情景形成了场景。场景必不可少的几个要素:环境、人、时间、行为。简而言之&…

javascript_forEach中使用异步函数执行顺序问题,错误原因+解决思路

javascript_forEach中使用异步函数执行顺序问题,错误原因解决思路 start 最近在写异步逻辑的时候,经常会使用 async/await。有些时候需要执行异步逻辑的函数比较多,就习惯用 forEachasync/await 去处理函数了。在测试的过程中会发现&#x…

Opencv实验合集——实验九:姿势估计

在上一章节(相机校准),你已经找到了相机矩阵,畸变系数等等参数。给出一个图案图像,我们便可以利用上面的信息用于计算其姿势,或者物体在空间中位于何处,比如如何旋转,如何移动等等问题。对于一个平面物体&a…

【数据结构】二叉树问题总结

目录 1.二叉树前序遍历,中序遍历和后序的实现 2.层序遍历 3.求二叉树中的节点个数 4.求二叉树中的叶子节点个数 5.求二叉树的高度 6.求二叉树第k层节点个数 7.二叉树查找值为x的节点 8.单值二叉树 9.二叉树最大深度 10.翻转二叉树 11. 检查两颗树是否相同…