当前位置: 首页 > news >正文

Decoupled Multimodal Distilling for Emotion Recognition 论文阅读

Decoupled Multimodal Distilling for Emotion Recognition 论文阅读

  • Abstract
  • 1. Introduction
  • 2. Related Works
    • 2.1. Multimodal emotion recognition
    • 2.2. Knowledge distillation
    • 3. The Proposed Method
    • 3.1. Multimodal feature decoupling
    • 3.2. GD with Decoupled Multimodal Features
    • 3.3. Objective optimization
  • 4. Experiments
  • 5. Conclusion and discussion

文章信息:
在这里插入图片描述

原文链接:https://arxiv.org/abs/2303.13802
源码:https://github.com/mdswyz/DMD
发表于:CVPR 2023

Abstract

这项工作旨在通过语言、视觉和声音等多种形式感知人类情感,即人类多模态情感识别(MER)。尽管先前的MER方法表现出色,但固有的多模态异质性仍然存在,不同模态的贡献差异显著。为了解决这个问题,我们提出了一种分离式多模态蒸馏(DMD)方法,通过促进灵活和自适应的跨模态知识蒸馏,旨在增强每种模态的区分特征。特别地,每种模态的表示被分解为两部分,即与模态无关/独占的空间,以自回归方式进行。DMD利用图蒸馏单元(GD-Unit)对每个分离的部分进行处理,以便每个GD可以以更专业和有效的方式执行。GD-Unit由一个动态图组成,其中每个顶点代表一个模态,每条边表示动态知识蒸馏。这种GD范式提供了一种灵活的知识传递方式,其中蒸馏权重可以自动学习,从而实现多样化的跨模态知识传递模式。实验结果表明,DMD始终比最先进的MER方法具有更好的性能。可视化结果显示,DMD中的图边展示了与模态无关/独占特征空间相关的有意义的分布模式。代码已在https://github.com/mdswyz/DMD上发布。

1. Introduction

人类多模态情感识别(MER)旨在从视频剪辑中感知人类的情感态度。视频流涉及来自各种模态的时间序列数据,例如语言、声音和视觉。这种丰富的多模态性有助于我们从协同的角度理解人类行为和意图。最近,MER已成为情感计算中最活跃的研究课题之一,具有丰富的吸引力应用,例如智能辅导系统、产品反馈估计和机器人技术。

对于MER来说,同一视频片段中的不同模态通常是相辅相成的,为语义和情感消歧提供额外线索。MER的核心部分是多模态表示学习和融合,其中模型旨在编码和整合来自多个模态的表示,以理解原始数据背后的情感。尽管主流MER方法取得了一定成就,但不同模态之间的内在异质性仍然困扰着我们,增加了健壮的多模态表示学习的难度。不同的模态,例如图像、语言和声音,包含传达语义信息的不同方式。通常,语言模态由有限的转录文本组成,其语义比非语言行为更为抽象。如图1(a)所示,语言在MER中起着最重要的作用,而内在的异质性导致不同模态之间的性能差异显著。

在这里插入图片描述

图1. (a) 描述了使用单模态的情感识别存在显著差异,改编自Mult [28]。 (b) 展示了传统的跨模态蒸馏方法。 ( c) 展示了我们提出的分离式多模态蒸馏(DMD)方法。DMD包括两个图蒸馏(GD)单元:同质GD和异质GD。分离式GD范式减少了吸收异质数据知识的负担,并允许每个GD以更专业和有效的方式执行。

缓解显著的模态异质性的一种方法是从强模态向弱模态提炼可靠和可泛化的知识[6],如图1(b)所示。然而,对于蒸馏方向或权重的手动分配应该是繁琐的,因为存在各种潜在的组合。相反,模型应该学会根据不同的示例自动调整蒸馏,例如,许多情感通过语言更容易识别,而一些情感通过视觉更容易识别。此外,跨模态之间显著的特征分布不匹配使得直接的跨模态蒸馏效果不佳[21, 37]。

为此,我们提出了一种分离式多模态蒸馏(DMD)方法,以学习跨模态的动态蒸馏,如图1(c)所示。通常,每种模态的特征通过共享编码器和私有编码器分解为模态无关/独占空间。为了实现特征分解,我们设计了一种自回归机制,预测分解后的模态特征,然后自监督地回归它们。为了加强特征分解,我们加入了一个边缘损失,规范了跨模态和情感表示之间的关系近似性。因此,分离式GD范式将减少从异质数据中吸收知识的负担,并允许每个GD以更专业和有效的方式执行。

基于分离的多模态特征空间,DMD利用每个空间中的图蒸馏单元(GD-Unit),以便以更专业和有效的方式执行跨模态知识蒸馏。一个GD-Unit由一个图组成,其中(1)顶点代表来自模态的表示或逻辑,(2)边表示知识蒸馏的方向和权重。当模态无关(同质)特征之间的分布差距足够减小时,GD可以直接应用于捕获跨模态的语义相关性。对于模态独占(异质)特征,我们利用多模态转换器[28]来建立语义对齐并弥合分布差距。多模态转换器中的跨模态注意机制强化了多模态表示,并减少了存在于不同模态中的高级语义概念之间的差异。为了简化,我们分别将在分离的多模态特征上的蒸馏称为同质图知识蒸馏(HomoGD)和异质图知识蒸馏(HeteroGD)。这种重新表述使我们能够明确探索每个分离空间中不同模态之间的交互作用。

这项工作的贡献可以概括为:

  • 我们提出了一种分离式多模态蒸馏框架,称为Decoupled Multimodal Distillation(DMD),用于学习跨模态的动态蒸馏,以实现强大的MER。在DMD中,我们明确地将多模态表示分解为模态无关/-独占空间,以便在两个分离空间上进行知识蒸馏。DMD提供了一种灵活的知识传递方式,其中蒸馏方向和权重可以自动学习,从而实现灵活的知识传递模式。
  • 我们在公开的MER数据集上进行了全面的实验,并获得了优越或可比较的结果,超过了当前技术水平。可视化结果验证了DMD的可行性,图边展示了与HomoGD和HeteroGD相关的有意义的分布模式。

2. Related Works

2.1. Multimodal emotion recognition

多模态情感识别(MER)旨在从视频剪辑中嵌入的语言、视觉和声音信息中推断出人类情感。不同模态之间的异质性可以为MER提供不同层次的信息。主流的MER方法可以分为两类:基于融合策略的[14, 33, 34]和基于跨模态注意力的[13, 17, 28]。

前者旨在设计复杂的多模态融合策略,以生成具有区分性的多模态表示,例如,Zadeh等人[33]设计了一种张量融合网络(TFN),可以逐步融合多模态信息。然而,不同模态之间的固有异质性和内在的信息冗余阻碍了多模态特征之间的融合。因此,一些工作旨在通过特征分解探索多模态表示的特征和共性,以促进更有效的多模态表示融合[7, 29, 32]。Hazarika等人[7]将多模态特征分解为模态不变/特定组件,以学习精细化的多模态表示。分离的多模态表示减少了信息冗余,并提供了多模态数据的整体视图。最近,基于跨模态注意力的方法推动了MER的发展,因为它们学习跨模态相关性,以获得增强的模态表示。代表性工作是MulT [28]。该工作提出了一个多模态转换器,由跨模态注意力机制组成,用于学习从一种模态到另一种模态的潜在适应性和相关性,从而实现模态之间的语义对齐。Lv等人[17]基于[28]设计了一种基于渐进模态增强的方法,旨在学习从多模态表示到单模态表示的潜在适应性和相关性。我们提出的DMD与之前的特征分解方法[7, 29, 32]有着本质上的不同,因为DMD能够在分离的特征空间中提炼跨模态知识。

2.2. Knowledge distillation

知识蒸馏(KD)的概念最早在[9]中提出,通过最小化教师和学生的预测逻辑之间的KL散度来传递知识。随后,基于[9]提出了各种KD方法[4, 5, 20, 39],并进一步扩展到中间特征之间的蒸馏[1, 8, 22, 27]。

大多数知识蒸馏(KD)方法侧重于将知识从教师传递给学生,而一些最近的研究则利用图结构探索了多个教师和学生之间有效的消息传递机制,以及多个实例的知识[16, 19, 38]。张等人[38]提出了一种用于视频分类的图蒸馏(GD)方法,其中每个顶点代表一个自监督教师,边表示从多个自监督教师到学生的蒸馏方向。罗等人[16]考虑了模态差异,以将源域的特权信息纳入,并建模了一个有向图来探索不同模态之间的关系。每个顶点代表一个模态,边表示一个模态与另一个模态之间的连接强度(即蒸馏强度)。与它们不同的是,我们旨在在分离的特征空间中使用独占的GD单元,以促进有效的跨模态蒸馏。

3. The Proposed Method

我们的DMD框架如图2所示。主要包括三个部分:多模态特征分离同质图蒸馏(HomoGD)异质图蒸馏(HeteroGD)。考虑到模态之间的显著分布不匹配,我们通过学习共享和独占的多模态编码器,将多模态表示分解为同质和异质多模态特征。分离的详细过程在第3.1节中介绍。为了促进灵活的知识传递,接下来我们从同质/异质特征中提取知识,这些特征被设计成两个图蒸馏单元(GD-Unit),即同质图蒸馏和异质图蒸馏。在同质图蒸馏中,同质多模态特征相互蒸馏,以补偿彼此的表征能力。在异质图蒸馏中,引入了多模态transform来明确建立模态间的相关性和语义对齐,以进一步提取特征。蒸馏的详细过程在第3.2节中介绍。最后,通过蒸馏得到的精炼的多模态特征被自适应地融合,用于强大的MER。接下来,我们将介绍DMD的三个部分的细节。

3.1. Multimodal feature decoupling

我们考虑三种模态,即语言( L \mathcal{L} L)、视觉( V V V)和声音( A A A)。首先,我们利用三个单独的一维时间卷积层来聚合时间信息,并获得低层次的多模态特征: X ~ m ∈ R T m × d m \tilde{\mathbf{X}}_m\in \mathbb{R} ^{T_m\times d_m} X~mRTm×dm,其中 m ∈ { L , V , A } m\in \{ \mathcal{L}, V, A\} m{L,V,A} 表示一个模态。在这种浅层编码之后,每个模态都保留了输入的时间维度,以便同时处理不对齐和对齐的情况。此外,为了方便后续的特征分离,所有模态都被缩放到相同的特征维度,即 d L = d V = d A = d d_\mathcal{L}=d_V=d_A=d dL=dV=dA=d

为了将多模态特征分解为同质(与模态无关)部分 X m c o m \mathbf{X}_m^\mathrm{com} Xmcom和异质(模态独占)部分 X m p r t \mathbf{X}_m^\mathrm{prt} Xmprt,我们利用一个共享的多模态编码器 ε c o m \varepsilon^\mathrm{com} εcom和三个私有编码器 ε m p r t \varepsilon_m^\mathrm{prt} εmprt来明确预测分解后的特征。形式上,
在这里插入图片描述
为了区分 X m c o m \mathbf{X}_m^\mathrm{com} Xmcom X m p r t \mathbf{X}_m^\mathrm{prt} Xmprt之间的差异并减少特征的歧义性,我们以自回归的方式合成了原始的耦合特征 X m \mathbf{X}_m Xm。从数学上讲,我们对每个模态的 X m c o m \mathbf{X}_m^\mathrm{com} Xmcom X m p r t \mathbf{X}_m^\mathrm{prt} Xmprt进行连接,并利用一个私有解码器 D m \mathcal{D}_m Dm来生成耦合特征,即 D m ( [ X m c o m , X m p r t ] ) \mathcal{D}_m([\mathbf{X}_m^\mathrm{com},\mathbf{X}_m^\mathrm{prt}]) Dm([Xmcom,Xmprt])。随后,耦合特征将通过私有编码器 E m p r t \mathcal{E}_m^\mathrm{prt} Emprt重新编码,以回归异质特征。符号 [ . ] [.] [.]表示特征的连接。形式上,原始/合成的耦合多模态特征之间的差异可以被表示为:
在这里插入图片描述
此外,原始/合成的异质特征之间的差异可以表示为:
在这里插入图片描述
对于上述的重构损失,仍然不能保证完全的特征分离。事实上,信息可以在表示之间自由泄漏,例如,所有的模态信息可能仅仅被编码在 X m p r t \mathbf{X}_m^\mathrm{prt} Xmprt中,以便解码器可以轻松地合成输入,从而使得同质多模态特征变得无意义。为了巩固特征的分离,我们认为来自相同情感但不同模态的同质表示应该比来自相同模态但不同情感的表示更相似。为此,我们定义了一个边缘损失:

在这里插入图片描述

在这里插入图片描述

图2. DMD的框架。给定输入的多模态数据,DMD对它们分别进行编码,得到浅层特征 X ~ m \tilde{\mathbf{X}}_m X~m,其中 m ∈ { L , V , A } m\in\{\mathcal{L},V,A\} m{L,V,A}。在特征分离阶段,DMD利用共享和独占编码器分别提取分离的同质/异质多模态特征 X m c o m / X m p r t \mathbf{X}_m^\mathrm{com}/\mathbf{X}_m^\mathrm{prt} Xmcom/Xmprt X m p r t \mathbf{X}_m^\mathrm{prt} Xmprt将以自回归的方式进行重构(第3.1节)。随后, X m c o m \mathcal{X}_m^\mathrm{com} Xmcom将被输入到一个GD单元中,进行自适应的知识蒸馏,即 H o m o G D HomoGD HomoGD。在 H e t e r o G D HeteroGD HeteroGD中,通过多模态转换器将 X m p r t \mathbf{X}_m^\mathrm{prt} Xmprt增强到 Z → m p r t \mathbb{Z}_{\to m}^\mathrm{prt} Zmprt,以弥合分布差距。 H e t e r o G D HeteroGD HeteroGD中的GD单元以 Z → m p r t \mathbf{Z}_{\to m}^\mathrm{prt} Zmprt作为输入进行蒸馏(第3.2节)。最后, X m c o m \mathbf{X}_m^\mathrm{com} Xmcom Z → m p r t \mathbb{Z}_{\to m}^\mathrm{prt} Zmprt将被自适应地融合用于MER。

我们收集了一个三元组集合 S = { ( i , j , k ) ∣ m [ i ] ≠ m [ j ] , m [ i ] = m [ k ] , c [ i ] = c [ j ] , c [ i ] ≠ c [ k ] } S = \{(i, j, k) | m[i] \neq m[j], m[i] = m[k], c[i] = c[j], c[i] \neq c[k]\} S={(i,j,k)m[i]=m[j],m[i]=m[k],c[i]=c[j],c[i]=c[k]}。这里, m [ i ] m[i] m[i]表示样本 i i i的模态, c [ i ] c[i] c[i]表示样本 i i i的类标签, c o s ( ⋅ , ⋅ ) cos(·, ·) cos(⋅,⋅)表示两个特征向量之间的余弦相似性。方程4中的损失限制了属于相同情绪但不同模态,或反之亦然的同质特征之间的差异,从而避免了得到琐碎的同质特征。α是一个距离裕度,用于确保正样本(相同情绪;不同模态)的距离小于负样本(相同模态;不同情绪)的距离,其差距为α。考虑到解耦的特征分别捕获模态无关/排他性特征,我们进一步制定了软正交性,以减少同质和异质多模态特征之间的信息冗余:
在这里插入图片描述
最后,我们将这些约束结合起来形成解耦损耗,
在这里插入图片描述
其中γ是平衡因子。

3.2. GD with Decoupled Multimodal Features

针对解耦的同质和异质多模态特征,我们设计了一个图蒸馏单元(GDUnit)来进行自适应的知识蒸馏。通常,一个GDUnit包括一个有向图 G \mathcal{G} G。设 v i v_i vi表示一个与某个模态相关的节点, w i → j w_{i\to j} wij表示从模态 v i v_i vi v j v_j vj的蒸馏强度。从 v i v_i vi v j v_j vj的蒸馏被定义为它们对应logits之间的差异,用 ϵ i → j \epsilon_{i\to j} ϵij表示。设 E E E表示具有 E i j = ϵ i → j E_{ij}=\epsilon_{i\to j} Eij=ϵij的蒸馏矩阵。对于目标模态 j j j,加权蒸馏损失可以通过考虑注入边来制定,
在这里插入图片描述
其中 N ( v j ) \mathcal{N}(v_j) Nvj表示注入到 v j v_j vj的顶点的集合。

为了学习与蒸馏强度 w w w对应的动态自适应权重,我们提出将模态logits和表示编码到图的边上。形式上,
在这里插入图片描述
其中, [ ⋅ , ⋅ ] [\cdot,\cdot] [,]表示特征连接, g g g是一个具有可学习参数 θ 2 \theta_2 θ2的全连接(FC)层, f f f是一个用于回归logits的具有参数 θ 1 \theta_1 θ1的FC层。图的边权重 W W W,其中 W i j = w i → j W_{ij}=w_{i\to j} Wij=wij,可以通过重复应用方程8来构建和学习所有模态对之间的边。为了减少尺度效应,我们通过softmax操作对 W W W进行归一化。因此,对所有模态的图蒸馏损失可以写成:
在这里插入图片描述
其中, ⊙ \odot 表示逐元素乘积。显然,GD单元中的蒸馏图为学习动态的跨模态交互提供了基础。同时,它还促进了一种灵活的知识传递方式,其中蒸馏强度可以自动学习,从而实现多样化的知识传递模式。接下来,我们详细说明HomoGD和HeteroGD的细节。

HomoGD。如图2所示,对于解耦的同质特征 X m c o m \mathbf{X}_m^\mathrm{com} Xmcom,由于模态之间的分布差距已经足够减少,我们将特征 X m c o m \mathbf{X}_m^\mathrm{com} Xmcom及其对应的logits f ( X m c o m ) f(\mathbf{X}_m^\mathrm{com}) f(Xmcom) 输入到一个GDUnit中,并根据方程8计算图边权重矩阵 W W W和蒸馏损失矩阵 E E E。然后,通过方程 9. \color{red}{9.} 9.,可以自然地得到总的蒸馏损失 L d t l h o m o \mathcal{L}_\mathrm{dtl}^\mathrm{homo} Ldtlhomo

HeteroGD。解耦的异质特征 X m p r t \mathbf{X}_m^\mathrm{prt} Xmprt聚焦于每个模态的多样性和独特特征,因此展现出显著的分布差距。为了缓解这个问题,我们利用多模态transform[28]来弥合特征分布差距并建立模态适应性。多模态transform的核心是跨模态注意力单元(CA),它接收来自一对模态的特征并融合跨模态信息。以语言模态 X L p r t \mathbf{X}_L^\mathrm{prt} XLprt为源和视觉模态 X V p r t \mathbf{X}_V^\mathrm{prt} XVprt为目标,跨模态注意力可以定义为: Q V = X V p r t P q \mathbf{Q}_V=\mathbf{X}_V^\mathrm{prt}\mathbf{P}_q QV=XVprtPq, K L = X L p r t P k \mathbf{K}_L= \mathbf{X}_L^\mathrm{prt}\mathbf{P}_k KL=XLprtPk, 和 V L = X L p r t P v \mathbf{V}_L= \mathbf{X}_L^\mathrm{prt}\mathbf{P}_v VL=XLprtPv,其中 P q , P k , P v \mathbf{P}_q, \mathbf{P}_k, \mathbf{P}_v Pq,Pk,Pv是可学习参数。每个头的表达式为:
在这里插入图片描述
其中, Z L → V p r t \mathbf{Z}_{L\to V}^\mathrm{prt} ZLVprt是从语言到视觉的增强特征, d d d表示 Q V \mathbf{Q}_V QV K L \mathbf{K}_L KL的维度。对于MER中的三种模态,每种模态都会被另外两种模态增强,得到的特征将被连接起来。

对于每个目标模态,我们将来自其他模态的所有增强特征连接到目标模态上,作为被增强的特征,用 Z → m p r t \mathbf{Z}_{\to m}^\mathrm{prt} Zmprt表示,这些特征在蒸馏损失函数 L d t l h e t e r o \mathcal{L}_\mathrm{dtl}^\mathrm{hetero} Ldtlhetero中使用,并且可以通过方程9自然地获得。

我们使用特征融合。我们使用增强的异质特征 Z → m p r t \mathbf{Z}_{\to m}^\mathrm{prt} Zmprt和原始的解耦同质特征 X m c o m \mathbf{X}_m^\mathrm{com} Xmcom进行自适应特征融合,得到用于多模态情感识别的自适应融合特征。

3.3. Objective optimization

我们将上述损失综合起来,以达到全部目标:
在这里插入图片描述

其中, L t a s k \mathcal{L}_\mathrm{task} Ltask是情感任务相关的损失(这里是均方误差), L d t l = L d t l h o m o + L d t l h e t e r o \mathcal{L}_\mathrm{dtl}=\mathcal{L}_\mathrm{dtl}^\mathrm{homo}+\mathcal{L}_\mathrm{dtl}^\mathrm{hetero} Ldtl=Ldtlhomo+Ldtlhetero表示由HomoGD和HeteroGD生成的蒸馏损失, λ 1 \lambda_1 λ1 λ 2 \lambda_2 λ2控制不同约束的重要性。

4. Experiments

在这里插入图片描述

在这里插入图片描述

5. Conclusion and discussion

在本文中,我们提出了一种用于MER的解耦多模态蒸馏方法(DMD)。我们的方法受到了不同模态贡献显著差异的观察的启发。因此,通过在模态之间蒸馏可靠且具有一般性的知识,可以实现稳健的MER。为了减轻模态异质性,DMD以自回归方式将模态特征解耦为模态无关/专属空间。每个解耦特征都包含两个GD单元,以促进自适应的跨模态蒸馏。定量和定性实验一致表明了DMD的有效性。一个限制是DMD没有明确考虑模态内部的交互作用。我们将在未来的工作中探索这一点。

相关文章:

Decoupled Multimodal Distilling for Emotion Recognition 论文阅读

Decoupled Multimodal Distilling for Emotion Recognition 论文阅读 Abstract1. Introduction2. Related Works2.1. Multimodal emotion recognition2.2. Knowledge distillation3. The Proposed Method3.1. Multimodal feature decoupling3.2. GD with Decoupled Multimodal …...

【css】使用display:inline-block后,元素间存在4px的间隔

问题:在本地项目中使用【display: inline-block】,元素间存在4px间隔。打包后发布到外网又不存在这个问题了。 归根结底这是一个西文排版的问题,英文有空格作为词分界,而中文则没有。 此时的元素具有文本属性,只要标签…...

代码执行漏洞

原理:没有对接口输入的内容进行严格的判断 造成攻击者精心构造的代码非法执行 当应用在调用一些能将字符转化为代码的函数(如PHP中的eval)时,没有考虑用户是否能控 制这个字符串,这就会造成代码执行漏洞。 相 关 函 数 : PHP&…...

SQLServer2022安装

首先从官网上下载2022版本SQL Server 下载 | Microsoft 选择此把呢不能运行,适合我们在学习阶段使用。 同时网页往下滑动,下载SSMS 下载后的文件 注意:在运行时最好获取管理员权限运行,第一次在安装时未获取管理员权限最终…...

vue2 配置@指向src

使用的是vue cli创建的项目。 1.安装 path 如果在 Node.js 环境中运行代码,path 模块默认是可用的,则不需要单独安装,否则输入下面命令安装path npm i path -S 2.找到vue.config.js文件: const { defineConfig } require(vue/…...

用友U9 存在PatchFile.asmx接口任意文件上传漏洞

声明: 本文仅用于技术交流,请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。 简介 用友U9是由中国用友软件股份有限公司开发的一款企业…...

如何卸载干净 IDEA(图文讲解)

更新时间 2022-12-20 11:一则或许对你有用的小广告 星球 内第一个项目:全栈前后端分离博客项目,演示地址:Weblog 前后端分离博客, 1.0 版本已经更新完毕,正在更新 2.0 版本。采用技术栈 Spring Boot Mybatis Plus Vue 3.x Vit…...

自动化运维(十)Ansible 之进程管理模块

Ansible的进程管理模块提供了一种强大而灵活的方式来管理和操作各种进程管理器和服务。无论你使用的是Supervisor、Systemd、传统的init脚本还是Runit,这些模块都可以帮助你轻松地管理服务的生命周期。通过合理地使用这些模块,你可以实现服务的自动化管理,提高系统的可靠性和稳…...

【leetcode279】完全平方数,动态规划解法

原问题:给定一个非负整数n,如果把它视作一些完全平方数的和,那么最少需要多少个完全平方数? 这次学习到一个热心网友的解法:把问题转化兑换零钱问题,然后使用动态规划求解。 比如,给定 n12, 那…...

Java 元素排序(数组、List 集合)

数组元素排序 升序 int[] array {3, 1, 4, 5}; Arrays.sort(array);// 升序排序 System.out.println(Arrays.toString(array)); //输出:[1, 3, 4, 5]降序 可以先将数组元素存入 List 集合,然后集合元素逆序,最后将集合元素写回原数组。&a…...

使用vite创建一个react18项目

一、vite是什么? vite 是一种新型前端构建工具,能够显著提升前端开发体验。它主要由两部分组成: 一个开发服务器,它基于原生 ES 模块提供了丰富的内建功能,如速度快到惊人的模块热更新(HMR)。 …...

子集(迭代)(leetcode 78)

核心逻辑&#xff1a; 根据子数组包含的元素个数迭代&#xff1a; 现有子集的基础上通过添加这个新元素来翻倍子集的数量 f(n)2f(n−1) vector<vector<int>> subsets(vector<int>& nums) {vector<vector<int>> ans;int i,j,k;ans.p…...

汽车疲劳测试试验平台技术要求(北重厂家)

汽车疲劳测试试验平台技术要求通常包括以下几个方面&#xff1a; 车辆加载能力&#xff1a;测试平台需要具备足够的承载能力&#xff0c;能够同时测试多种车型和不同重量的车辆。 动力系统&#xff1a;测试平台需要具备稳定可靠的动力系统&#xff0c;能够提供足够的力和速度来…...

Redis -- 缓存雪崩问题

缓存雪崩是指在同一时段大量的缓存key同时失效或者Redis服务宕机&#xff0c;导致大量请求到达数据库&#xff0c;带来巨大压力。 可能原因 : 同一时间大量的key到期 ; 解决方案&#xff1a; 给不同的Key的TTL添加随机值 利用Redis集群提高服务的可用性 给缓存业务添加降…...

【ARM 嵌入式 C 文件操作系列 20 -- 文件删除函数 remove 详细介绍】

请阅读【嵌入式开发学习必备专栏 】 文章目录 文件删除函数 remove 文件删除函数 remove 在 C 语言中&#xff0c; 可以使用 remove 函数来删除一个文件&#xff0c;但在删除之前 可能想确认该文件是否存在。 可以使用 stat 函数来检查文件是否存在。 以下是如何实现这个功能…...

LeetCode刷题之31.下一个排列

文章目录 1. 题目2.分析3.解答3.1 先排序&#xff0c;后交换3.2 先交换&#xff0c;后排序 1. 题目 整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。 例如&#xff0c;arr [1,2,3] &#xff0c;以下这些都可以视作 arr 的排列&#xff1a;[1,2,3]、[1,3,2]、[3…...

【RISC-V 指令集】RISC-V 向量V扩展指令集介绍(九)- 向量定点算术指令

1. 引言 以下是《riscv-v-spec-1.0.pdf》文档的关键内容&#xff1a; 这是一份关于向量扩展的详细技术文档&#xff0c;内容覆盖了向量指令集的多个关键方面&#xff0c;如向量寄存器状态映射、向量指令格式、向量加载和存储操作、向量内存对齐约束、向量内存一致性模型、向量…...

【Java网络编程】IP网络协议与TCP、UDP网络传输层协议

1.1、IP协议 当应用层的数据被封装后&#xff0c;想要将数据在网络上传输&#xff0c;数据究竟要被发往何处&#xff0c;又该如何精准的在网络上定位目标机器&#xff0c;此时起到关键作用的就是“IP协议”。IP协议的作用在于把各种数据包准确无误的传递给目标方&#xff0c;其…...

C# 分布式自增ID算法snowflake(雪花算法)

文章目录 1. 概述2. 结构3. 代码3.1 IdWorker.cs3.2 IdWorkerTest.cs (测试) 1. 概述 分布式系统中&#xff0c;有一些需要使用全局唯一ID的场景&#xff0c;这种时候为了防止ID冲突可以使用36位的UUID&#xff0c;但是UUID有一些缺点&#xff0c;首先他相对比较长&#xff0c…...

commonJS和esModule的应用

commonJS commonJS规范的核心变量是&#xff1a;exports&#xff0c;module.exports&#xff0c;require exports 和 module.exports可以负责模块的导出require 负责模块的导入 module.exports 导出方案&#xff1a; const name yx const age 18// 1 导出方案 module.exp…...

(十一)RabbitMQ及SpringAMQP

1.初识MQ 1.1.同步和异步通讯 微服务间通讯有同步和异步两种方式&#xff1a; 同步通讯&#xff1a;就像打电话&#xff0c;需要实时响应。 异步通讯&#xff1a;就像发邮件&#xff0c;不需要马上回复。 两种方式各有优劣&#xff0c;打电话可以立即得到响应&#xff0c;…...

STM32 M3内核寄存器概念

内容主要来自<<M3内核权威指南>> 汇编程序中的最低有效位&#xff08;Least Significant Bit&#xff09;。LSB是二进制数中最右边的位&#xff0c;它代表了数值中的最小单位。在汇编程序中&#xff0c;LSB通常用于表示数据的最小精度或者作为标志位。 ---------…...

SQL语句的编写

##创建用户-建表建库 #创建一个用户名为 feng&#xff0c;允许从任何主机 % 连接&#xff0c;并使用密码 sc123456 进行身份验证的用户。 rootTENNIS 16:33 scmysql>create user feng% identified by sc123456; Query OK, 0 rows affected (0.04 sec) #创建一个名为fen…...

Lecture 1~3 About Filter

文章目录 空间域上的滤波器- 线性滤波器盒状滤波器Box Filter锐化Sharpening相关运算 vs. 卷积运算 Correlation vs. Convolution - 非线性滤波器高斯滤波器Gaussian filter - 实际问题- 纹理texture 频域上的滤波器 滤波的应用- 模板匹配- 图像金字塔 空间域上的滤波器 图像…...

配置vscode链接linux

1.安装 remote SSH 2.按F1 ssh ljh服务器公网ip 3. 选择保存远端host到本地 某位置 等待片刻后 4. 切换到远程资源管理器中 应该可以看到一台电脑&#xff0c;右键在当前窗口链接&#xff0c;输入你的服务器用户密码后电脑变绿说明远程连接成功 5.一定要登陆上云服务器后再…...

论文阅读——MVDiffusion

MVDiffusion: Enabling Holistic Multi-view Image Generation with Correspondence-Aware Diffusion 文生图模型 用于根据给定像素到像素对应关系的文本提示生成一致的多视图图像。 MVDiffusion 会在给定任意每个视图文本的情况下合成高分辨率真实感全景图像&#xff0c;或将…...

Linux中的网络命令深度解析与CentOS实践

Linux中的网络命令深度解析与CentOS实践 在Linux系统中,网络命令是管理和诊断网络问题的关键工具。无论是网络管理员还是系统开发者,熟练掌握这些命令都是必不可少的。本文将深入探讨Linux中常用的网络命令,并以CentOS为例,展示这些命令的具体应用。 一、ping命令 ping命…...

nginx配置实例(反向代理)

目录 一、目标-反向代理实现效果 二、安装tomcat 三、配置nginx服务 四、配置反向代理 一、目标-反向代理实现效果 访问过程分析&#xff1a; 二、安装tomcat 1、安装jdk环境 新建/export/server目录 解压jdk 查看是否解压成功 配置jdk软连接 进入jdk的bin目录中&#x…...

Flutter 解决NestedScrollView与TabBar双列表滚动位置同步问题

文章目录 前言一、需要实现的效果如下二、flutter实现代码如下&#xff1a;总结 前言 最近写flutter项目&#xff0c;遇到NestedScrollView与TabBar双列表滚动位置同步问题&#xff0c;下面是解决方案&#xff0c;希望帮助到大家。 一、需要实现的效果如下 1、UI图&#xff1…...

云计算存在的安全隐患

目录 一、概述 二、ENISA云安全漏洞分析 三、云计算相关系统漏洞 3.1 概述 3.2 漏洞分析 3.2.1 Hypervisor漏洞 3.2.1.1 CVE-2018-16882 3.2.1.2 CVE-2017-17563 3.2.1.3 CVE-2010-1225 3.2.2 虚拟机漏洞 3.2.2.1 CVE-2019-14835 3.2.2.2 CVE-2019-5514 3.2.2.3 CV…...

电商网站怎么推广/深圳网站建设 手机网站建设

网络应用体系结构 客户机/服务器结构&#xff08;Client-Server,C/S&#xff09;点对点结构(peer-to-peer&#xff0c;P2P)混合结构&#xff08;Hybrid&#xff09; 1.客户机/服务器结构 服务器 7*24小时提供服务永久性访问地址/域名利用大量服务器实现可拓展性 客户机 与服…...

医药公司网站模板/企业官网建站

参考链接 https://www.bilibili.com/video/BV1et411b73Z?p264 演讲比赛流程管理系统 演讲比赛程序需求 比赛规则 学校举行一场演讲比赛&#xff0c;共有12个人参加。比赛共两轮&#xff0c;第一轮为淘汰赛&#xff0c;第二轮为决赛每名选手都有对应的编号&#xff0c;如1…...

免费网站模板带后台/上海外包seo

There are various ways to add or append an item to an array. We will make use of push, unshift, splice, concat, spread and index to add items to array. Lets discuss all the 6 different methods one by one in brief.有多种将项目添加或追加到数组的方法。 我们将…...

WordPress多站点恢复/百度广告推广电话

DAY 03循环结构&#xff1a;代表语句&#xff1a;while、do while、forwhile格式&#xff1a;初始化表达式&#xff1b;while (条件表达式)&#xff5b;循环体&#xff08;执行语句&#xff09;&#xff1b;&#xff5d;1、while格式&#xff1a;while格式&#xff1a;初始化表…...

企业如何在自己的网站上做宣传/天津谷歌优化

我们在使用MySQL的时候&#xff0c;有时候会忘记用户的密码 尤其是root用户的密码&#xff0c;这时候就需要走一下后门改一下密码了&#xff0c;思路和linux改root用户密码差不多 都是先绕过权限认证阶段 然后用一条update user 命令更新密码&#xff0c;如果要恢复误删除的roo…...

360建站工具/优化网站排名费用

上周末&#xff0c;道琼斯公司(Dow Jones)CEO承认了公司数据泄露事件&#xff0c;有3500位用户的数据(支付卡信息、通讯信息等)被黑客未授权访问&#xff0c;并已向受影响的用户发去了通知邮件。 百科&#xff1a;道琼斯(Dow Jones) 道琼斯(Dow Jones)是Rupert Murdoch的 News …...