BMVC 23丨多模态CLIP:用于3D场景问答任务的对比视觉语言预训练

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

论文链接:https://arxiv.org/abs/2306.02329

摘要:

训练模型将常识性语言知识和视觉概念从 2D 图像应用到 3D 场景理解是研究人员最近才开始探索的一个有前景的方向。然而,2D 提炼知识是否可以为下游 3D 视觉语言任务(例如 3D 问答)提供有用的表示仍然尚未得到充分研究。在本文中,我们提出了一种新颖的 3D 预训练视觉语言方法,即 Multi-CLIP,该方法使模型能够学习基于语言的且可转移的 3D 场景点云表示。我们通过对比目标最大化编码的 3D 场景特征与 CLIP 空间中相应的 2D 多视图图像和文本嵌入之间的一致性,从而利用 CLIP 模型的表征能力。为了验证我们的方法,我们考虑了 3D 视觉问答 (3D-VQA) 和 3D 情境问答 (3D-SQA) 具有挑战性的下游任务。为此,我们开发了新颖的基于多模态变压器的架构,并演示了我们的预训练方法如何提高其性能。定量和定性实验结果表明,Multi-CLIP 在 3D-VQA 和 3D-SQA 下游任务中的性能优于最先进的工作,并产生结构良好的 3D 场景特征空间。

1.引言

人类本质上具有文本和视觉结构的耦合表征来塑造他们对世界的感知。近年来,视觉和语言研究在开发有效绘制视觉和文本模式之间对应关系的模型方面取得了显着进展。

第一个视觉和语言任务是视觉问答(VQA),它需要高级常识推理以及增强的文本和视觉理解,其中模型根据图像中的视觉内容预测答案。这项任务的主要方法利用精心设计的预训练策略和基于多模式变压器的架构,这些架构学习可概括的上下文文本和视觉嵌入。然而,这些方法仅限于 2D 视觉信息,这种限制影响了它们在许多 3D 世界应用中的可用性,例如机器人和 AR/VR。

在这个方向上,最近的工作旨在将 VQA 扩展到 3D 领域。最近发布的两个基准测试,即 ScanQA和 SQA3D,分别介绍了 3D 视觉问答(3D-VQA)和 3D 情境问答(3D-SQA)的任务。在 3D-VQA 设置中,模型从丰富的 RGB-D 室内扫描接收 3D 场景的视觉信息,并且必须回答有关场景内容的给定问题并定位所涉及的对象。在 3D-SQA 设置中,提供了额外的文本输入来描述场景中代理的情况(即位置和方向)。任务是首先了解智能体的情况,然后回答有关周围环境的问题。然而,将 2D VQA 方法扩展到 3D 领域并非易事,因为 3D 模型面临着理解复杂几何结构和对象之间空间关系的挑战。

图 1:我们的预训练方法鼓励通过对比损失将 3D 场景表示与 CLIP 空间中的相应文本和多视图图像嵌入对齐。

为了赋予模型 3D 语义理解和推理能力,出现了一条新的研究方向。最近的工作利用基础模型的 2D 知识,例如 CLIP [9],并在 3D 对象识别和 3D 语义分割任务上实现了最先进的零样本性能。 3D 表示学习的其他工作通过利用预训练策略来解决这些任务。采用对比像素到点方法将2D视觉信息传输到3D模型,探索了一种无监督预训练方案来对齐3D点云和体素表示。然而,据我们所知,尚未提出用于视觉语言任务(例如 3D 问答)的借口方法来指导模型将场景级 3D 视觉输入与语言线索和 2D 信息相关联。

在这项工作中,我们提出了 Multi-CLIP,这是一种简单而有效的 3D 视觉语言 (V-L) 预训练方法,可帮助模型学习可转移且具有语义意义的场景表示。我们证明,注入来自大规模预训练 2D 视觉和语言模型的知识可以增强模型基于 3D 场景的感知,并提高下游 3D 视觉语言任务的性能。为此,我们开发了一个基于 Transformer 的 3D 场景编码器模块,它通过对场景对象特征之间的空间关系进行建模来捕获整体 3D 场景表示。我们提出的预训练目标是通过训练场景编码器将 3D 扫描的外观和几何特征投影到具有所需属性的可解释嵌入空间来促进 3D 点云理解。这可以通过将 3D 场景感知嵌入与 CLIP生成的相应文本和多视图图像表示对齐来实现。

为了验证我们方法的有效性,我们考虑了 3D-VQA 和 3D-SQA 具有挑战性的下游任务。为此,我们将预训练的 3D 场景编码器的权重转移到一种新颖的 3D 视觉语言架构中,该架构融合了多模态表示并以监督方式微调模型。我们的微调模型在 3D-VQA 和 3D-SQA 任务以及参考对象定位的辅助任务上实现了最先进的结果。我们还提供了预训练后所学习的 3D 场景特征的可视化,证明我们的模型学习语义结构的潜在空间中的映射,其中具有相似属性的场景聚集在一起。

2.相关工作

3D问答。启动语言驱动的 3D 场景理解研究的任务是 3D 语言基础,其中模型必须在文本描述的指导下定位场景中的对象。基于这些进展,提出了一项新任务,即 3D 视觉问答,它测试模型的空间关系理解和常识推理能力。在此问题中,模型通常以 3D 场景扫描的形式接收 3D 视觉信息,并负责回答有关场景的问题。在这个方向上已经提出了一些基准,如基于 ScanNet场景引入了一个新的 3D-VQA 数据集,即 ScanQA,并开发了一种联合建模 3D 对象和问题特征的架构来预测正确答案。最近,Ma 等人提出了 SQA3D,一个用于具体场景理解和问题回答的数据集。在此设置中,代理必须按照文本提示的描述定位其在 3D 场景中的位置,并回答有关其环境的问题。在这项工作中,我们开发了新颖的架构来处理 3D-VQA 和 3D-SQA 的任务,并表明我们的预训练方法在 ScanQA 和 SQA3D 基准上取得了最先进的结果。

2D 和 3D 视觉语言预训练。在 2D 领域,V-L 预训练已经得到了彻底的研究。用于语言和图像理解任务的方法在很大程度上受益于大规模 V-L 数据集的广泛预训练,从而能够提取有意义的图像文本表示。两个典型的例子是 VL-BERT和 UNITER。这些架构的核心是多模态转换器编码器,它利用丰富的预训练策略进行全局图像文本对齐和细粒度单词区域映射。

在 3D 领域,当前最先进的预训练方法侧重于学习增强的 3D 点云语义属性,这些属性可以成功部署在下游任务中,例如 3D 对象分类和场景分割。最初的工作重点是学习可转移和增强不变的点云表示。在 DepthContrast中,作者通过实例辨别目标提出了点云和体素架构的联合预训练框架。最近的工作通过利用大规模 2D 模型,采用跨模式预训练方法。在其他工作中,作者使用像素到点对比损失将像素级和点级特征映射到相同的潜在空间。类似地,在 CrossPoint中,作者通过自监督对比学习强制执行对象特征的 3D-2D 对应性和仿射点云变换的不变性。然而,这些方法研究的是 2D 图像背景下的预训练,或者专注于单个对象而缺乏场景背景。据我们所知,基于语言的 3D 场景推理和问答任务的预训练方法尚未被探索,这些方法利用文本、2D 和 3D 视觉模式之间的协同作用,通过这项工作,我们的目标是激发人们对这个方向的兴趣。

3.提出的方法

我们提出了一种代理方法(图 1),通过对比学习损失将 3D 场景表示与 CLIP 空间中相应的文本和多视图图像嵌入对齐。为了证明其有效性,我们 (a) 以此目标预训练 3D 场景编码器(第 3.1 节),以及 (b) 将学习到的表示转移到新颖的 3D V-L 模型,并针对 3D-VQA 的下游任务对其进行微调(第 3.2 节)和 3D-SQA(第 3.3 节)。由于两个下游任务的问题设置不同,我们稍微修改了 3D V-L 模型的架构,以独立地训练每个任务。

3.1 预训练框架概述

3D 场景编码器。我们将场景建模为由 N 个点组成的 RGB 颜色点云,p ∈ R N×6 ,由 3D 场景编码器处理以生成场景对象的整体表示。场景编码器 fθ 包含一个带有预先训练的 PointNet++主干的 VoteNet,它输出一组 M 点簇,Cv ∈ RM×128,表示具有丰富点特征的 3D 对象备选。 VoteNet 模型后面是一个transformer编码器层,它利用自注意力通过建模对象的空间关系来细化对象表示。我们将场景编码器 fθ 获得的最终场景表示表示为 C ∈ RM×128 。

3D 场景编码器预训练。 3D-VQA 和 3D-SQA 的检查任务需要常识推理以及对场景中文本和 3D 对象区域之间的潜在关系的深入理解。因此,我们预训练方法的目标是通过将对 CLIP 的丰富 2D 视觉和语言理解转移到 3D 模型来鼓励判别性特征学习。为了实现这一目标,我们的目标是最大限度地提高 3D 场景编码器 fθ 生成的场景级特征与相应的 CLIP 文本和多视图图像表示之间的一致性。为了学习场景的增强 2D 表示,我们通过沿 z 轴等角度旋转从五个不同的视图渲染它。这些视图由 CLIP 图像编码器处理,我们通过对它们进行平均来融合多视图特征,以获得视图鲁棒的场景表示 Zimage。我们通过 CLIP 的文本编码器将场景的文本描述嵌入到相同的特征空间中,接收文本表示 Ztext。

图 2:针对 3D-VQA(左)和 3D-SQA(右)两个下游任务提出的模型架构。

为了生成 3D 场景全局表示 Zscene,我们遵循[27]的做法,并将可学习的分类标记附加到 VoteNet 提取的对象特征的输入序列中。 Transformer 编码器输出处的该 token 的状态(即全局特征)通过线性投影头投影到 R d 中的 CLIP 特征空间。我们的目标是对齐文本、图像和点云模式。为了实现这一目标,我们通过修改 InfoNCE 损失,利用 3D-2D 和 3D 文本噪声对比估计 (NCE) 损失进行对比学习。我们提出的损失鼓励模型使 3D 场景特征接近其相应的 2D 图像和文本特征,同时将它们与其他不同的 2D 图像和文本嵌入分开。正式地,

其中 (Zi,scene, Zi,text) 和 (Zi,scene, Zi,image) 分别是批次中每个样本 i 的正文本场景和图像场景对,B 是批次大小,τ 是温度系数。

形式上,预训练的最终损失定义为

其中我们设置 α, β = 0.5。

3.2 3D-VQA 模型架构

我们的下游 3D-VQA 任务架构(图 2)由三个模块组成:预训练的 3D 场景编码器 fθ(处理 3D 场景点特征)、CLIP 文本编码器(生成问题词嵌入)和 3D 视觉语言转换器融合视觉和问题表征。该模型的任务是找到问题的正确答案并定位问题所引用的目标对象。

为了处理这个问题,我们使用 CLIP 的文本编码器来获得 512 维的单词级嵌入 Q ∈ R Nq×512,其中 Nq 是问题中的单词数量。由场景编码器 fθ 提取的单词和 3D 场景特征使用两个独立的线性层转换为相同的隐藏维度 h。然后,它们通过两层转换器编码器连接和融合,该编码器利用自注意力来建模模内和模间关系。更新的场景对象特征 C' ∈ RM×h 被转发到线性层,该线性层通过确定 M 个对象框中的每一个与问题相关的可能性来执行目标对象定位。在 CLIP 之后,我们将问题的更新的 EOT 嵌入(序列中的最后一个标记)视为池问题特征 Q′ ∈ R h 并将其用作两个线性分类器的输入。第一个通过将 Q′ 投影到 Na 候选答案的向量 a ∈ R Na 中来预测正确答案。第二个预测 18 个 ScanNet类中的哪些对象与问题相关。

损失函数。我们将最终损失建模为四项的线性组合。我们利用[13]中定义的参考对象定位损失 Lloc 和 VoteNet [25] 的对象检测损失 Ldet。为了进一步监督训练,我们包括一个对象分类损失 Lobj ,它被建模为多类交叉熵损失和一个答案分类损失 Lans ,它是一个二元交叉熵(BCE)损失函数,因为可能有多个候选人回答。因此,总损失定义为Lvqa = Ldet + Lobj + Lans + Lloc。

3.3 3D-SQA 模型架构

在 3D-SQA 中,模型会获得一个额外的输入句子,用于描述场景中代理的情况并回答相关问题。因此,我们修改了架构(图 2),将这种情况纳入我们的管道中。我们利用 CLIP 的文本编码器获得 512 维的词级情境嵌入 S ∈ R Ns×512,其中 Ns 是情境描述中的词数。

情境词嵌入 S 用作转换器解码器的输入(充当查询标记),3D 场景特征 C 用于生成键和值。我们利用交叉注意模块来捕获它们之间的关系,并根据情况生成以对象为中心的特征标记。这些被转发到第二个转换器解码器,在那里它们处理问题 Q 的语言标记以产生最终表示。最后,我们利用两个 MLP,一个用于预测问题的答案 a ∈ R Na,另一个用于预测场景中智能体的位置 l = (s pos, srot)。

损失函数。我们采用与上一节中描述的类似的损失公式。为了使其适应 3D-SQA 任务,我们用两个辅助 MSE 损失 Lpos 和 Lrot 代替对象定位和分类损失,这两个损失鼓励模型准确预测所描述输入中代理的位置 s pos 和方向 s rot分别情况。方向表示为四元数 (x, y, z, w),位置表示为 3D 坐标 (x, y, z)。因此,总损失定义为 Lsqa = Ldet + Lans + Lpos + Lrot。

4.实验

在本节中,我们通过将预训练 3D 网络的学习表示转移到两个下游 3D 视觉语言任务来验证我们的方法。评估任务是 (a) ScanQA 数据集上的 3D 视觉问答和参考对象定位的辅助任务,以及 (2) SQA3D 数据集上的 3D 情境问答。

4.1 实验设置

数据集。 ScanQA数据集包含 ScanNet数据集的 800 个室内 3D 场景的 41,363 个不同的问答对和 3D 对象定位注释。 ScanQA 还包括两个带对象注释和不带对象注释的测试集。 SQA3D数据集基于 650 个 ScanNet 场景提供了大约 6,800 种独特的情况,并附有针对这些情况的 20,400 个描述和 33,400 个不同的推理问题。 ScanNet 是内部空间 3D 网格重建的大规模带注释数据集。在预训练阶段,我们使用 ScanRefer 数据集获取文本描述,该数据集提供了 800 个 ScanNet 场景的 51,583 条描述。我们还使用 ScanNet 点云数据通过 Open3D 软件渲染多个视图的 RGB 图像。

实施细节。我们使用 Adam优化器,使用 16 的批量大小、1e-4 的学习率和 1e5 的权重衰减,对 3D 场景编码器进行 15K 次迭代的预训练。我们使用场景编码器的预训练权重,并在 ScanQA 上微调 3D-VQA 网络 40 个时期,初始学习率为 5e-4,我们在第 15 个时期将其降低了 0.2 倍。同样,我们使用相同的初始学习率对 SQA3D 上的 3DSQA 网络进行 50 个 epoch 的微调。为了减轻过度拟合,我们使用 [−5°, 5°] 范围内的随机角度围绕所有三个轴进行旋转,并在所有方向上随机平移 0.5 m 范围内的点云。我们还使用了随机长方体增强,它从输入点云中提取随机长方体。

4.2 结果

3D 视觉问答。为了衡量我们的模型在 3D-VQA 上的下游性能,我们报告了 EM@1 指标,它是预测答案与任何真实答案完全匹配的预测百分比。我们引入了句子评估指标BLEU、ROUGE-L、METEOR和CIDEr。这些指标对于评估稳健的答案匹配非常重要,因为某些问题有多种可能的答案表达。为了评估所引用的对象定位精度,我们报告了 Acc@0.25 和 Acc@0.5 指标,它们是与地面事实的 IoU 分别高于阈值 0.25 和 0.5 的边界框预测的百分比。作为基线,我们使用当前最先进的 ScanQA以及 ScanRefer+MCAN方法,其中预训练的 ScanRefer模型识别引用的对象并应用 MCAN 模型到它周围的图像。我们还比较了从头开始训练的模型的性能。结果如表1和表2所示。通过我们的预训练方法,我们报告问题回答指标显着增加,Acc@0.25 和 Acc@0.5 指标分别提高了 3.03% 和 2.83%。这验证了我们的预训练策略在问答和引用对象定位方面的有效性。我们还观察到我们的方法比 ScanQA 基线取得了显着的改进。

表 2:ScanQA 有效数据集上参考对象定位结果的比较。

3D 情境问答。我们在 SQA3D 测试集上进一步评估我们的方法。我们采用EM@1作为我们的评估指标。我们在表 3 中报告了我们的结果,其中我们使用当前最先进的方法作为基线。在对 SQA3D 训练分割进行预训练和微调后,我们报告与从头开始训练相比,答案准确性有了明显的性能提升。

表 3:SQA3D 测试数据集上的 3D 情境问答结果比较。

4.3 可视化

在图 4 中,我们提供了预训练 3D 场景编码器学习特征的 T-SNE可视化,无需对下游任务进行微调。我们观察到具有语义相似属性(即相同场景类型)的场景在嵌入空间中形成簇。这凸显了该模型在使用丰富的 2D 视觉和语言信息进行预训练时获得的高级语义理解能力。此外,我们观察到,与使用常用的余弦相似性损失来对齐 3D-2D 和 3D 文本特征相比,我们提出的对比预训练目标会在特征空间中产生更具辨别力的表示,如稍后在 4.4 节中讨论的。

图 4:ScanNet 中场景级特征的 T-SNE 可视化。在预训练期间学习的 3D 场景编码器权重会产生结构化的特征表示空间。

4.4 消融实验

为了证明我们的预训练流程设计选择的合理性,我们在 SQA3D 上进行了消融研究(表 4)。

多个视图有帮助吗?许多工作已经证实,学习对视图变化具有鲁棒性的多模态表示有利于 3D 对象和场景的理解。因此,我们假设将 3D 场景点云渲染到多个 2D 平面并聚合多视图信息将在所检查的下游任务中带来性能提升。我们将使用 5 个视图进行预训练的结果与仅使用自上而下的场景视图进行训练的结果进行比较。可以看出,添加更多视图会提高准确性。这证实了我们的直觉,即多视图表示可以促进 3D 场景和语言查询之间的对应学习。

对比损失是一个好的选择吗?我们通过用余弦相似距离损失代替对比目标,通过实验研究对比学习是否是我们的预训练策略的最佳选择。我们可以从表 4 中的实验结果和图 4 中的特征空间可视化中推断出,对比学习可以提高下游性能,并鼓励模型捕获更有效地区分相似和不相似数据点的表示。

所有损失项都很重要吗?我们在对比损失公式中探索了每个项的额外好处。结果表明,删除 Ltext 或 Limage 都会降低准确性。这验证了我们的假设,即将 3D 点云与其语言描述和 2D 多视图图像连接起来可以促进空间关系理解和推理。

表 4:SQA3D 测试集的消融研究。

5.结论

在本文中,我们提出了 Multi-CLIP,这是一种新颖的 V-L 预训练策略,可帮助模型学习语义上有意义且基于语言的 3D 场景特征,这些特征可以转移到 3D 场景推理和问答下游任务。这是通过对比目标将 3D 提取的特征与相应的字幕对齐并在 CLIP 嵌入空间中渲染的 2D 多视图图像来实现的。我们在 3D-VQA 和 3D-SQA 下游任务上的定量和定性结果表明了我们的方法在学习丰富的 3D 场景表示方面的有效性,并在具有挑战性的 ScanQA 和 SQA3D 基准上展示了最先进的性能。

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

回复“VQA”获取视觉问答顶会论文合集

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

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

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

相关文章

【线上问题】服务器关机导致docker启动的mysql数据库消失了

目录 一、问题描述二、解决方式 一、问题描述 1. 服务器迁移断电导致docker启动的mysql数据库没有了数据 2. data目录是空的 3. mysql重启数据库消失了 二、解决方式 1. sudo -i切换root账号 2. 查找mysql的容器卷 find /var/lib/docker/volumes/ -name mysql3. 进入各个_dat…

FTP、NFS以及SAMBA服务

一、FTP服务 1、Linux下ftp客户端管理工具 ftp、lftp都是Linux下ftp的客户端管理工具,但是需要独立安装 # yum install ftp lftp -y ☆ ftp工具 # ftp 10.1.1.10 Connected to 10.1.1.10 (10.1.1.10). 220 (vsFTPd 3.0.2) Name (10.1.1.10:root): 输入FTP的账号…

游戏公司数据分析师必备知识(持续补充中...)

1.如何撰写专题报告? ①原则 只有一个主题:即使不讲ppt,业务方也能看得懂行文通俗简单易懂:学习产品经理平常是如何写报告的明确的数据结论和落地项先行:跟业务方多沟通数据结论,让他们给出落地项 ②结构…

CSS特效第一弹:右上角tag标志纯代码前端实现(非图片)

😎效果: 🤷‍♂️思路: 分为2个部分: 1.文字方块右下角折角 文字方块用绝对定位z-index让文字方块悬浮在右上角的位置 2.右下角折角通过before伪元素border属性实现(三角形实现方法) 👍核心代…

基于springboot乐器视频学习网站设计与实现(源码齐全可用)

项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下,你想解决的问…

Redis(12)| 过期删除策略和内存淘汰策略

Redis 是可以对 key 设置过期时间的,因此需要有相应的机制将已过期的键值对删除,而做这个工作的就是过期键值删除策略。 如何设置过期时间 先说一下对 key 设置过期时间的命令。 设置 key 过期时间的命令一共有 4 个: expire key n&#x…

js 根据当前时间往前推15天或往后推15天等(例如当前时间往后15天后的日期。并实现今天、明天、后天、周)

本次分享,在项目中开发车票购买功能需要用到日期筛选 思路: 1、首先获取当前时间戳 2、根据当前时间戳拿到15天后的日期 3、根据天匹配星期几 4、将时间戳转换年、月、日并重组 实现代码 // 获取当前日期 const today new Date();// 往前推15天的…

畅通工程之局部最小花费问题 (C++)

目录 题目&#xff1a; 思路&#xff1a; 代码&#xff1a; 结果 题目&#xff1a; 思路&#xff1a; 详细思路都在代码注释里 。 代码&#xff1a; #include<iostream>//无向图邻接矩阵 #include<map> #include<algorithm> #define mvnum 1005 using …

“辛巴猫舍”内网渗透、提权、撞库学习笔记

前言&#xff1a; 在拿到靶机时&#xff0c;我们最先需要做的是信息收集&#xff0c;包括不限于&#xff1a;C段扫描&#xff0c;端口探测&#xff0c;指纹识别&#xff0c;版本探测等。其次就是 漏洞挖掘、漏洞利用、提权、维持权限、日志清理、留下后门。 以上就是渗透的基本…

时序预测 | MATLAB实现WOA-CNN-BiGRU-Attention时间序列预测(SE注意力机制)

时序预测 | MATLAB实现WOA-CNN-BiGRU-Attention时间序列预测&#xff08;SE注意力机制&#xff09; 目录 时序预测 | MATLAB实现WOA-CNN-BiGRU-Attention时间序列预测&#xff08;SE注意力机制&#xff09;预测效果基本描述模型描述程序设计参考资料 预测效果 基本描述 1.MATLA…

ElasticSearch知识点

什么是ElasticSearch ElasticSearch: 智能搜索&#xff0c;分布式的搜索引擎&#xff0c;是ELK的一个非常完善的产品&#xff0c;ELK代表的是: E就是ElasticSearch&#xff0c;L就是Logstach&#xff0c;K就是kibana Elasticsearch是一个建立在全文搜索引擎 Apache Lucene基础…

Docker配置Nginx反向代理

文章目录 1.部署微程序到docker中1.1 dockerfile文件1.2 依据自定义的dockerfile文件创建docker镜像1.3 创建容器1.4 测试 2.在docker中安装Nginx2.1 安装Nginx镜像2.2 获取Nginx配置文件并将其同步到宿主电脑指定位置中安装nginx容器删除nginx容器 2.3 安装Nginx容器并数据挂载…

【技术支持】DevTools中重写覆盖源js文件

sources面板下&#xff0c;左侧overrides标签下添加一个文件夹&#xff0c;并同意。 勾选Enable Local overrides 然后在page标签下&#xff0c;修改文件后ctrls保存 直接就保存在overrides的文件夹下了 或者文件上右键Override content

中低收入群体能在“双十一”购物狂欢吗?

今天这个“双十一”购物狂欢节&#xff0c;在各大网站的报道的确蜂拥而上&#xff0c;显得很有点儿“狂欢”的景象&#xff0c;可读罢内容却听到哀鸿遍野。 笔者仅只接力“腾迅新闻”和“今日头条”几小时前分别发表的《 双11十五年&#xff0c;价格战还能打多久&#xff1f;》…

面向萌新的技术博客入门指南

Python之禅 在Python的解释器中隐藏一个彩蛋&#xff0c;输入import this就会返回19条Python之禅&#xff0c;具体如下&#xff1a; import this The Zen of Python, by Tim Peters Python之禅 &#xff0c;by Tim Peters Beautiful is better than ugly. 优美好于丑陋&…

FTP、NFS、SAMBA系统服务一

一、rsync托管xinetd 1、为什么要进行服务托管 独立服务&#xff1a;独立启动脚本 ssh ftp nfs dns ... 依赖服务: 没有独立的启动脚本 rsync telnet 依赖xinetd服务&#xff08;独立服务&#xff09; 2、如何将rsync托管给xinetd服务去管理&#xff1f; 第一步&#xff1…

飞机社交软件开发:重新定义社交媒体的空中交互体验

【导语】 随着互联网技术的快速发展&#xff0c;社交媒体平台的界限也逐渐模糊。飞机社交软件应运而生&#xff0c;打破传统的地面社交模式&#xff0c;为空中旅行的旅客提供全新的交流平台。本文将从市场需求、技术实现、用户体验和未来发展等方面&#xff0c;深入探讨飞机社交…

推荐几个宝藏app

立冬后&#xff0c;真尼玛冷&#xff0c;哎&#xff01;记得多穿点衣服呀&#xff0c;老铁们&#xff01;&#xff01; GKD 去广告神器 下载网址&#xff1a;https://github.com/gkd-kit/gkd 特性&#xff1a; 它不仅支持跳过开屏广告&#xff0c;还支持跳过弹窗广告等&#xf…

【启扬方案】启扬安卓屏一体机在医疗自助服务终端上的应用解决方案

为了解决传统医疗模式下的“看病难、看病慢”等问题&#xff0c;提高医疗品质、效率与效益&#xff0c;自助服务业务的推广成为智慧医疗领域实现信息化建设、高效运作的重要环节。 医疗自助服务终端是智慧医疗应用场景中最常见的智能设备之一&#xff0c;它通过与医院信息化系统…

CentOS7安装Xrdp以便Windows远程桌面连接

Centos7已经安装了桌面环境&#xff0c;想要Windows系统远程连接到桌面。 1&#xff0c;which vncserver 如果返回no vncserver,则需要安装 2&#xff0c;yum -y install tigervnc* 3&#xff0c;安装Xrdp yum install epel* -y yum --enablerepoepel -y install xrdp 4…