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没有明确考虑模态内部的交互作用。我们将在未来的工作中探索这一点。

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

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

相关文章

【vue2+antvx6】报错Cannot read properties of undefined (reading ‘toUpperCase‘)

我的代码是这样的 <el-collapseref"collapse"v-model"active"accordionclass"collapseStart"change"collapsechange"><el-collapse-item:name"String(index 1)"v-for"(i, index) in List":key"in…

【PduR路由】IPduM模块详细介绍

目录 1.IpduM功能简介 2.IpduM模块依赖的其他模块 2.1RTE (BSW Scheduler) 2.2PDU Router 2.3COM 3.IpduM功能详解 3.1 功能概述 3.2 I-PDU多路复用I-PDU Multiplexing 3.2.1 Definitions and Layout 3.2.2通用功能描述 General 3.2.3模块初始化 Initialization 3.…

【b站李炎恢】Vue.js Element UI 下 | 十天技能课堂 | 更新中... | 李炎恢

课程地址&#xff1a;【Vue.js Element UI | 十天技能课堂 | 更新中... | 李炎恢】 https://www.bilibili.com/video/BV1U54y127GB/?share_sourcecopy_web&vd_sourceb1cb921b73fe3808550eaf2224d1c155 备注&#xff1a;虽然标题声明还在更新中&#xff0c;但是看一些常用…

python统计分析——双样本均值比较

参考资料&#xff1a;python统计分析【托马斯】 1、配对样本t检验 在进行两组数据之间的比较时&#xff0c;有两种情况必须区分开。在第一种情况中&#xff0c;同一对象在不同时候的两个记录值进行相互比较。例如&#xff0c;用学生们进入初中时的身高和他们一年后的身高&…

Python - 深度学习系列31 - ollama的搭建与使用

说明 做这个的主要目的是为了搭建Langchain的本地环境&#xff0c;使用LangChain让LLM具备调用自定义函数的功能。 内容 1 安装server 以下将ollama的安装方式&#xff0c;以及使用做一个简单的说明(记录&#xff09;。之前对这个工具没有了解&#xff0c;只是从快速实践的…

LoRa物联网行业解决方案 1

1 行业应用 智慧停车 智能抄表 智慧牧场 智能生产 智能物流 智能健康 2 物联网智慧农场项目需求 3 为什么选lora&#xff1f; 4 设计 5 模块性能参数 sx1278 lora扩频无线模块 SEMTECH公司SX1278芯片 LoRa 扩频技术 通信距离10000米 SPI通信接口 mcu选型 硬件平台介绍 …

速通汇编(三)寄存器及汇编mul、div指令

一&#xff0c;寄存器及标志 AH&ALAX(accumulator)&#xff1a;累加寄存器BH&BLBX(base)&#xff1a;基址寄存器CH&CLCX(count)&#xff1a;计数寄存器DH&DLDX(data)&#xff1a;数据寄存器SP(Stack Pointer)&#xff1a;堆栈指针寄存器BP(Base Pointer)&#…

【IC前端虚拟项目】mvu顶层集成的原则与技巧

【IC前端虚拟项目】数据搬运指令处理模块前端实现虚拟项目说明-CSDN博客 截止目前,所有的子模块编码均宣告完成,接下来就是封装顶层的时刻了。我自己规划和集成顶层一般有一个习惯,就是在top层下面封装core层和其他模块,比如mvu的top层下例化了mvu_reg和mvu_core两个模块,…

​数据结构—栈操作经典案例

括号匹配&#xff1a; 这是我最开始写的&#xff0c;运行有问题 对于输入的括号序列&#xff0c;建议使用标准的 C 字符串而不是字符数组。 #include<iostream> using namespace std;typedef char SelemType; typedef int Status; #define OK 1 #define MAXSIZE 100 #…

八、组合数据类型(列表、元组、集合、字典)

序列&#xff1a;存储多个值的连续空间&#xff0c;每个值对应一个编号————索引 包括&#xff1a;列表、元组、集合和字典 相加操作 s1"桂林山水" s2山水甲天下 print(s1s2)#直接相加得到新的字符串 print(_____________________________) print((s1s2)*5,sep&…

Zeppelin安装

Zeppelin是一个基于Web的开源数据分析可视化工具&#xff0c;它提供了一个交互式的笔记本界面&#xff0c;用于在大数据环境中进行数据探索、数据分析、数据可视化和协作。Zeppelin的主要特点包括多语言支持、可视化功能、数据共享和协作&#xff0c;以及扩展性。它支持多种编程…

施耐德 Unity Pro PLC 编程软件介绍

Unity Pro 软件基本介绍 Unity Pro 是施耐德中大型 PLC 的编程软件&#xff08;<–> 对应西门子 Step7&#xff09; 支持的 PLC&#xff1a;施耐德中大型 PLC 中型 PLC&#xff1a;Premium、M340&#xff08;<–> 对应西门子 S7-300、S7-1200&#xff09;大型 PL…

Matlab中的脚本和函数

Matlab中的脚本和函数 文章目录 Matlab中的脚本和函数脚本创建脚本代码注释函数创建函数局部函数嵌套函数私有函数匿名函数补充知识函数句柄测试环境:Win11 + Matlab R2021a 脚本 ​ Matlab脚本是最简单的程序文件类型。它们可用于自动执行一系列 Matlab 命令,如命令行重复执…

机器人深度学习IMU和图像数据实现焊接精细操作

在双电极气体保护金属弧焊 &#xff08;DE-GMAW&#xff09; 中&#xff0c;对焊枪和旁路电极位置的精确控制是至关重要的。为了这一过程&#xff0c;科研团队提出了安装微型惯性测量单元&#xff08;IMU&#xff09;传感器和摄像头&#xff0c;来记录焊工控制焊枪的移动和微调…

数据挖掘|贝叶斯分类器及其Python实现

分类分析|贝叶斯分类器及其Python实现 0. 分类分析概述1. Logistics回归模型2. 贝叶斯分类器2.1 贝叶斯定理2.2 朴素贝叶斯分类器2.2.1 高斯朴素贝叶斯分类器2.2.2 多项式朴素贝叶斯分类器 2.3 朴素贝叶斯分类的主要优点2.4 朴素贝叶斯分类的主要缺点 3. 贝叶斯分类器在生产中的…

C语言——内存函数

前言&#xff1a; C语言中除了字符串函数和字符函数外&#xff0c;还有一些函数可以直接对内存进行操作&#xff0c;这些函数被称为内存函数&#xff0c;这些函数与字符串函数都属于<string.h>这个头文件中。 一.memcpy&#xff08;&#xff09;函数 memcpy是C语言中的…

JavaScript(三)---【this指针,函数定义、Call、Apply、函数绑定、闭包】

零.前言 JavaScript(一)---【js的两种导入方式、全局作用域、函数作用域、块作用域】-CSDN博客 JavaScript(二)---【js数组、js对象、this指针】-CSDN博客 0.1全局对象 在JS中有一个全局对象&#xff1a;“window object”&#xff0c;代指的是整个HTML。 一定要慎用全局对…

安卓玩机工具推荐----MTK芯片读写分区 备份分区 恢复分区 制作线刷包 从0开始 工具操作解析【三】

同类博文; 安卓玩机工具推荐----MTK芯片读写分区 备份分区 恢复分区 制作线刷包 工具操作解析 安卓玩机工具推荐----MTK芯片读写分区 备份分区 恢复分区 制作线刷包 工具操作解析【二】-CSDN博客 回顾以往 在以前的博文简单介绍了这款工具的rom制作全程。今天针对这款工具的…

ubuntu23.10配置RUST开发环境

系统版本: gcc版本 下载rustup安装脚本: curl --proto https --tlsv1.2 https://sh.rustup.rs -sSf | sh下载完成后会自动执行 选择默认安装选项 添加cargo安装目录到环境变量 vim ~/.bashrc 默认已添加 使用环境变量立即生效 source ~/.bashrc 执行rust开发环境,在终端输入…

1.java 安装

操作步骤 下载: https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html1 通过Xftp将下载下来的jdk上传到指定虚拟机上传到/usr目录下 2 通过Xshell连接到虚拟机&#xff0c;执行如下命令&#xff0c;解压文件&#xff1a; $ tar zxvf jdk-8u…