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

【论文精读】 | 基于图表示的视频抑郁症识别的两阶段时间建模框架

文章目录

    • 0、Description
    • 1、Introduction
    • 2、Related work
      • 2.1 Relationship between depression and facial behaviours
      • 2.2 Video-based automatic depression analysis
      • 2.3 Facial graph representation
    • 3、The proposed two-stage approach
      • 3.1 Short-term depressive behaviour modelling
      • 3.2 Video-level depressive behaviour modelling
      • 3.3 Depression recognition
    • 4、 Experiments
      • 4.1 Datasets
      • 4.2 Implementation details
      • 4.3 Comparison to existing approaches
      • 4.4 Ablation studies
      • 4.5 Cross-dataset evaluation
      • 4.6 Conclusions and discussion

0、Description

本文并非逐句翻译,添加个人理解与疑惑,如有需要,请自行阅读原文

在这里插入图片描述

Two-stage Temporal Modelling Framework for Video-based Depression Recognition using Graph Representation

标题:基于图表示的视频抑郁症识别的两阶段时间建模框架
期刊:发表于IEEE TRANSACTIONS ON AFFECTIVE COMPUTING
数据集:AVEC2013/14/19
实验环境:NVIDIA GeForce RTX 4090 D
代码地址:https://github.com/jiaqi-pro/Depression-detection-Graph

  • 基于视频的自动抑郁分析提出了一个两阶段的框架,从多尺度短期和视频水平的面部行为来模拟抑郁症的严重程度。短期抑郁行为建模阶段首先从多个短时间尺度上深度学习抑郁相关的面部行为特征,其中提出了抑郁特征增强(DFE)模块,以增强所有时间尺度上的抑郁相关线索,并去除非抑郁相关的噪声。
  • 在视频级抑郁行为建模阶段,提出了顺序图表示(SEG)和谱图表示(SPG)两种新的图编码策略,将目标视频的所有短期特征重新编码为视频级图表示,总结出与抑郁相关的多尺度视频级时间信息。因此,生成的图表示可以同时使用短期和长期面部行为模式来预测抑郁症的严重程度。

痛点:目前市面上方法大多数要么忽略了时间信息,要么只考虑在预定义的时间窗口内显示的单尺度短期面部动态。由于面部动态是面部行为的关键组成部分,并且考虑到抑郁相关的线索可能在不同的时间尺度上被面部行为编码,因此这些方法将在特征提取阶段错过关键信息

1、Introduction

总结:多尺度面部行为的重要性,抑郁特征增强(DFE)模块,以及两种图编码策略:顺序图表示(SEG)和谱图表示(SPG)

  • 两阶段框架:第一阶段关注短期抑郁行为建模,第二阶段关注视频级抑郁行为建模。
  • 抑郁特征增强(DFE)模块:在短期行为建模阶段,使用DFE模块来增强与抑郁相关的面部行为特征,并去除不相关噪声。
  • 图表示法:在视频级行为建模阶段,使用两种新的图编码策略——序列图表示(SEG)和谱图表示(SPG)——来重新编码所有短期特征为视频级图表示

在这里插入图片描述
从目标视频的每个薄片中提取特征,并通过DFE模块进行处理,最终生成视频级图表示供GNNs处理

  • 深度学习应用于视频级抑郁相关描述符的标准方法是从每个视频中选择固定数量的关键帧,然后将其提供给3D cnn以学习视频级抑郁描述符。然而,这些深度学习方法通常会丢弃大量帧,忽略了可能包含抑郁症分析关键信息的局部短期面部动态。

  • 在论文中提出了一个具体的、两阶段的框架,用于基于视频的自动抑郁分析。

  • 第一个短期抑郁行为建模阶段扩展了时间金字塔网络(TPN),从目标视频的每个薄片中学习多尺度短期面部行为特征,然后提出了抑郁特征增强DFE模块,该模块由相互时间注意MTA)模块和噪声分离(NS)模块组成,以进一步增强提取的抑郁相关线索,同时在不同的时间尺度上抑制非抑郁相关的噪声。

时间金字塔网络:核心思想在于通过构建多层次的特征金字塔,来捕获视频数据中不同时间尺度的行为特征。这些特征金字塔在时间上具有不同的接收域,能够捕捉到从短程到远程的多种行为模式。

图像金字塔是一种通过梯次向下采样获得的图像分辨率集合,其中每一层图像都是对前一层图像分辨率的降低。层级越高,图像越小,分辨率越低。

  • 在第二个视频级抑郁行为建模阶段,建议使用图表示来表示整个视频编码的抑郁相关特征,从而将目标视频的所有薄片级特征总结为统一的描述函数。

  • 多尺度时间行为特征提取(MTB模块):从视频中提取不同时间尺度的短期行为特征。
  • 相互时间注意(MTA)模块:作为DFE的一部分,用于增强不同时间尺度上学习到的特征中的抑郁相关线索
  • 噪声分离(NS)模块:同样作为DFE的一部分,用于分离和去除非抑郁相关的噪声。
  • 图神经网络(GNNs):用于处理视频级图表示,以估计抑郁严重程度。

2、Related work

2.1 Relationship between depression and facial behaviours

相关工作:抑郁症与面部行为之间存在关联,例如抑郁症患者通常表现出积极情绪的面部表达减少。早期方法使用传统机器学习模型和手工提取的特征,如局部二值模式(LBP)和边缘方向直方图(EOH)。深度学习方法通常采用单阶段框架,从单帧或整个视频中提取特征,但可能忽略长期面部行为动态。

之前的研究表明,抑郁症与人类的面部行为有很好的关联。一个关键的发现是,抑郁症通常伴随着积极悄绪的面部表现减少,这在各种研究中得到了频繁的验证。

  • 结果表明,抑郁严重程度高的个体表现出较少的亲和性面部表情(AU12和AU15),但更多的非亲和性面部表情(AU14)和头部运动减少。Scherer等人研究了基于FACS的视觉特征,发现抑郁症可以通过更向下的凝视、更低的微笑强度、更短的平均微笑持续时间、更少的嘴部运动和更多的皱眉来预测。

2.2 Video-based automatic depression analysis

图神经网络(GNNs)被用于处理视频级抑郁行为建模阶段得到的视频级图表示。GNNs 特别适合处理图结构数据,能够捕捉节点之间的复杂关系,这在面部行为特征的分析中尤为重要。

序列图表示(SEG):将视频中的每一帧或薄片作为一个节点,根据时间顺序和预定义的时间尺度连接节点,形成序列图。
谱图表示(SPG):将每个面部行为特征的维度视为一个节点,使用离散傅立叶变换(DFT)将时间序列数据转换为频谱数据,然后选择低频成分作为节点特征,构建谱图。

  • 尽管基于深度学习的方法能够捕获视频级别的视听描述符,但它们是单阶段方法,在具体学习短期行为动力学中与抑郁相关的线索方面存在不足。虽然其中一些方法使用rmn/lstm来模拟视频帧级预测之间的长期时间依赖性,但在模型训练期间,它们仍然需要将每个帧/薄片与视频级标签配对,从而导致学习的模型存在问题。
  • 这是因为不同抑郁状态(不同视频级别抑郁标签)的受试者可能具有非常相似的帧级或短期行为(模型的相似输入),例如微笑或神经面部表情。然而,将相似的输入模式与不同的标签配对会导致不适定的机器学习问题,使得学习一个好的假设几乎是不可能的。此外,上述方法都没有研究过将视频级别的面部行为表示为图形的想法。在本文中,提出了一种两阶段的方法来模拟短期和视频级别的抑郁,其中视频级别的面部行为被编码成图形表示。

2.3 Facial graph representation

  • 很少有方法使用图表示来学习时空面部行为。特别是,一些方法将面部地标作为顶点,通过为每一帧构建一个空间图,然后将它们连接为一个时空图,将空间面部图扩展到时空域,其中帧间边缘连接连续帧之间的相同节点。另一种方法为每个面部序列构建一个面部序列图,其中将每一帧视为一个顶点,并将一对帧之间的关系定义为相应的边缘特征。
  • 然而,上述方法都不适合为包含人脸区域的长时间视频构建图表示,因为时空图和序列图中的顶点和边的数量会随着帧数的增加而增加,使得它们难以训练。受此启发,在本文中,提出了第一个工作,即从长视频中构建用于自动抑郁分析的面部行为图表示。

3、The proposed two-stage approach

在本节中,提出了两阶段框架,即短期抑郁行为建模阶段和视频级抑郁行为建模阶段。框架旨在使用目标视频的所有可用帧,学习用于抑郁严重程度估计的多尺度短期和长期面部行为特征。该方法的第一阶段 由两个模块组成,多尺度时间行为特征提取模块MTB),用于学习不同时空尺度的短期行为特征抑郁特征增强模块(DFE),用于增强与抑郁相关的线索,并从提取的行为特征中抑制非抑郁噪声。

  • 随后,对于视频级行为建模阶段,提出了两种新的图表示,每种图表示都将提取的整个视频的多尺度短期描述符总结为视频级图表示,该图表示编码多尺度抑郁相关线索。最后,将结果图表示提供给gnn,以提供视频级别的抑郁预测。

两阶段框架
第一阶段:短期抑郁行为建模,关注多尺度短期面部行为特征。
第二阶段:视频级抑郁行为建模,构建视频级图表示,总结短期特征

3.1 Short-term depressive behaviour modelling

基于时间金字塔网络构建了MTB模块 。如图下所示,MTB由多个分支组成,可以从图像序列中学习多尺度时空特征。每个分支包含多个3D resnet,这些resnet在特定空间尺度上从相同的输入面部图像序列生成特征图。不同分支输出的特征图(通道号、高度、宽度)的大小是不同的,这是由它们独立设计的结构造成的,包括空间和时间卷积操作的跨步和核大小设置。这使得来自不同分支的表示输出具有不同的时空尺度。特别是,每个分支首先在一个独特的空间尺度上重新调整输入序列的大小,因此可以学习多个空间层次的特征序列。然后,附加一个空间编码模块来对齐生成。

在这里插入图片描述

  • 相互时间注意MTA模块:该模块的主要目的是增强分别从每个时间尺度学习到的特征编码的抑郁相关线索。假设在不同的时间尺度上学习到的抑郁相关线索是高度相关的,因为所有的特征都是为了预测目标个体的抑郁严重程度而学习的,即预测相同的分数。由于注意操作可以明确地定位和突出表示之间的相似语义,MTA模块旨在识别和增强从MTB中学习到的所有潜在特征的显著区域(高度相关息)。
'''放入tpn提取特征
'''
tpn = TPN_attention( in_channels=cfg.necks.in_channels,out_channels=1024,spatial_modulation_config=cfg.necks.spatial_modulation_config,temporal_modulation_config=cfg.necks.temporal_modulation_config,upsampling_config=cfg.necks.upsampling_config,downsampling_config=cfg.necks.downsampling_config,level_fusion_config=cfg.necks.level_fusion_config,aux_head_config=cfg.necks.aux_head_config,)
class MTA(nn.Module):def __init__(self):super(MTA, self).__init__()self.tpn_resnet_slow = resnet_slowfastself.tpn = tpnself.fc1 = nn.Linear(100352,2048)self.dropout = nn.Dropout(p=0.1)self.relu1 = nn.ReLU()self.fc2 = nn.Linear(2048,1)def forward(self,data,label):data_1  = data.permute(0,2,1,3,4)backbone = self.tpn_resnet_slow(data_1)out, loss_aux = self.tpn(backbone, target= label)tpn_feature = out.reshape(out.shape[0],-1)tpn_result_0 = self.fc1(tpn_feature)tpn_result_0 = self.dropout(tpn_result_0)tpn_result_0 = self.relu1(tpn_result_0)tpn_result = self.fc2(tpn_result_0)return tpn_result,loss_aux,tpn_result_0

特征增强与初步预测

  • MTB的输出特征被输入到MTA: 通过相互时间注意力(MTA)模块,增强与抑郁状态高度相关的特征,得到加权特征向量 f M T A f^{MTA} fMTA ,并使用 f M T A f^{MTA} fMTA 去进行预测,得到MTA预测结果 D M T A D^{MTA} DMTA .

  • 计算MTA的损失函数 L M T A L_{MTA} LMTA

L MTA = 1 N ∑ n = 1 N ( D n MTA − D n ) 2 L_{\text{MTA}} = \frac{1}{N} \sum_{n=1}^{N} \left(D_n^{\text{MTA}}-D_n\right)^{2} LMTA=N1n=1N(DnMTADn)2

其中, D n D_n Dn 表示对应的抑郁等级,用于训练和评估模型的准确性。

深入特征分离与损失计算

  • MTA的输出特征向量接着传入 Noise Separation (NS) 组件。该组件分离出与抑郁症相关的特征 F n Dep F_{n}^\text{Dep} FnDep 和与抑郁无关的噪声 F n Non F_{n}^{\text{Non}} FnNon,并重构特征 R f e a t _ i R_{feat\_i} Rfeat_i , 以及预测抑郁等级 D N S D_{NS} DNS

计算NS相关损失:

  • 计算NS的预测损失函数 L N S L_{NS} LNS

L NS = 1 N ∑ n = 1 N ( D n NS − D n ) 2 L_{\text{NS}} = \frac{1}{N} \sum_{n=1}^{N} \left(D_n^{\text{NS}}-D_n\right)^{2} LNS=N1n=1N(DnNSDn)2

其中,

D n NS D_n^{\text{NS}} DnNS表示第 n n n 个样本经过NS 预测的抑郁等级。

D n D_n Dn 表示第 n n n 个样本真实的抑郁等级

  • 计算相似度函数 L s i m L_{sim} Lsim

L sim = 1 N 2 ∑ n = 1 N − 1 ∑ i = n + 1 n ( F n Dep − F i Dep ) 2 L_{\text{sim}} = \frac{1}{N^2}\sum_{n=1}^{N-1} \sum_{i=n+1}^n (F_{n}^\text{Dep}-F_{i}^\text{Dep})^2 Lsim=N21n=1N1i=n+1n(FnDepFiDep)2

其中,

F n Dep F_{n}^\text{Dep} FnDep F i Dep F_{i}^\text{Dep} FiDep 是从共享抑郁编码器中提取的抑郁相关特征。

索引 n n n i i i 为相同类别但是不同个体的输入特征索引。

在这里插入图片描述

  • 计算非相似度函数 L D − s i m L_{D-sim} LDsim

L D-sim = 1 N 2 ∑ n = 1 N ∥ ( F n Dep ) ⊤ F n Non ∥ Frob 2 L_{\text{D-sim}} = \frac{1}{N^2} \sum_{n=1}^{N} \left\|(F_{n}^{\text{Dep}})^{\top} F_{n}^{\text{Non}} \right\|_{\text{Frob}}^{2} LD-sim=N21n=1N (FnDep)FnNon Frob2

其中,

F n Dep F_{n}^{\text{Dep}} FnDep 为第 n n n 个输入特征的抑郁相关特征

F n Non F_{n}^{\text{Non}} FnNon 为第 n n n 个输入特征的与抑郁无关特征

∥ ⋅ ∥ F 2 \left\| \cdot \right \| ^{2}_{F} F2 表示平方Frobenius范数,通常用于计算矩阵的元素平方和。

  • 计算重构函数 L R e c L_{Rec} LRec

L Rec = 1 N × J ∑ n = 1 N ∑ j = 1 J ( F n Dec ( j ) − F n ( j ) ) 2 L_{\text{Rec}} = \frac{1}{N \times J} \sum_{n=1}^{N} \sum_{j=1}^{J} \left(F_n^{\text{Dec}}(j) - F_n(j)\right)^{2} LRec=N×J1n=1Nj=1J(FnDec(j)Fn(j))2

3.2 Video-level depressive behaviour modelling

  • 与抑郁相关的短期面部行为线索外,长期行为通常是估计抑郁严重程度的更可靠来源。为此,首先回顾了为基于视频的自动抑郁分析构建视频级(长期表示所遇到的主要问题)标准ML/CNN模型要求输入视频确认为固定大小,而从不同受试者收集的人脸视频通常具有可变长度,原始视频通常包含大量帧,无法直接提供给ML/CNN模型。简单地计算所有细视频切片的预测特征的统计数据,放弃了关键的面部动态,而将变长视频降采样到相同长度[则丢弃了大量携带重要信息的帧。

为了缓解这些问题,提出了两种视频级面部行为图表示编码策路:序列图表示(SEG)和频谱图表示(SPG),它们不仅编码多尺度短期和长期面部动态,而且保留目标视频中所有可用帧的信息,而不管其长度如何。

在这里插入图片描述
在这里插入图片描述
首先,我们提出将可变长度的人脸视频直接表示为具有可变顶点和边缘数量的序列图表示(SEG),以表示目标被试在视频水平上与抑郁相关的面部行为。每个顺序图表示(SEG)的拓扑结构取决于其相应视频的长度(即荐切片的数量)。

  • 对于SEG,视频中的每个薄切片级抑椰相关特征都被表示为一个顶点,该顶点基于两个标准与其他顶点连接,即它们在视频中的时间邻接性和预定义的时间尺度。
    具体来说,给定我们的MTB-DFE提取的视频级面部行为表示(对应于视频,我们将其大小定义为[Kn,J],其中K表示视频的片段数,J表示每个片段级凹陷特征的维度。
  • 然后,我们用K节点构建其SEG,每个节点特征具有J个属性。对于表示给定nth视频的i片段的每个节点vin,有三种类型的有向边将其与其他节点连接起来。

①第一组有向边从vin开始到m个连续节点vi+1n,vi+2n,…,vi+mn,总结短期面部动态上图中用黄色ar行表示)。

②第二种类型的有向边缘从vin开始,到对应于给定视频的(i+p)th段的节点v”,旨在模拟长期面部时间演化上图中用黑色箭头表示)。参数m和p的烧蚀分析在补充材料中提供。

③第三组有向边从前面的节点连接到v(上图4(b)中用蓝色箭头表示)

为了处理产生的具有不同类型的sg,我们使用图注意网络(GAT)从这些seg中进行抑郁预测。这有利于直接处理与可变长度视频相对应的图(包含不同数量的节点),从而允许使用所有可用帧在视频级别预测抑郁。不同m和p值的分析在补充材料中提供。

  • 简而言之,假设MTB-DFE从每个薄切片中提取J个深度学习的面部属性J-D短期特征,对于具有任意帧数的视频,为每个视频构建具有J个顶点的SPG,其中每个顶点描述一个面部属性并具有K个维度。
  • 为每个视频构建一个具有J个顶点的SPG,其中每个顶点描述一个面部属性并具有K维。具体来说,顶点特征中的每个维度对应于一个唯一的视频级频率,表示整个视频中对应的面部属性的唯一时间模式(即对应的面部属性在视频中以一定速度变化的频率)。
  • 因此,顶点特征的所有维度决定了相应视频级面部属性时间序列的最终形状,这进一步反映了该面部属性在视频中激活的强度、持续时间和频率。
  • SPG中的每个顶点特征包含J个抑郁相关面部属性的多尺度(K个时间尺度)视频级面部时间榄式。在本文中,定义了SPG中的所有顶点都是完全连接的,这使得所有深度学习的面部属性都可以直接连接,并被GNN预测器用于抑郁症识别。

在这里插入图片描述

3.3 Depression recognition

一且获得视频级别的图形表示,我们采用最先进的GAT来预测抑郁症的严重程度。GAT使用遮罩自注意层为不同的顶点分配不同的权重。

  • 重要的是,它可以同时处理不同类型的图。在本文中,GAT模型由几个GAT层(层数在补充材料中提供)和全连接(FC层组成,以便从每个输入图表示中输出单个抑郁严重程度评分。
GAT: Graph Attention Network
Graph Attention Networks (Veličković et al., ICLR 2018)
https://arxiv.org/abs/1710.10903
class GATNet(nn.Module):def __init__(self, net_params):super().__init__()num_atom_type = net_params['num_atom_type']hidden_dim = net_params['hidden_dim']num_heads = net_params['n_heads']out_dim = net_params['out_dim']in_feat_dropout = net_params['in_feat_dropout']dropout = net_params['dropout']n_layers = net_params['L']self.readout = net_params['readout']self.batch_norm = net_params['batch_norm']self.residual = net_params['residual']self.dropout = dropoutself.in_feat_dropout = nn.Dropout(in_feat_dropout)self.embedding_h = nn.Linear(num_atom_type, hidden_dim * num_heads)self.layers = nn.ModuleList([GATLayer(hidden_dim * num_heads, hidden_dim, num_heads,dropout, self.batch_norm, self.residual) for _ in range(n_layers-1)])self.layers.append(GATLayer(hidden_dim * num_heads, out_dim, 1,dropout, self.batch_norm, self.residual))self.MLP_layer = MLPReadout(out_dim, 1)   # 1 out dim since regression problemdef forward(self, g, h, e):h = self.embedding_h(h)h = self.in_feat_dropout(h)for conv in self.layers:h = conv(g, h)g.ndata['h'] = hif self.readout == "sum":hg = dgl.sum_nodes(g, 'h')elif self.readout == "max":hg = dgl.max_nodes(g, 'h')elif self.readout == "mean":hg = dgl.mean_nodes(g, 'h')else:hg = dgl.mean_nodes(g, 'h')  # default readout is mean nodesreturn self.MLP_layer(hg)def loss(self, scores, targets):loss = nn.MSELoss()(scores,targets)# loss = nn.L1Loss()(scores, targets)return loss

4、 Experiments

4.1 Datasets

实验是在AVEC2013和AVEC2014挑战对应的视听减压语料库上进行的。

  • AVEC2013挑战使用的语料库包含150个视听片段,其中每个片段记录了受试者参与一系列预先定义的任务,例如在解决任务时大声说话,持续元音发音,持续大声元音发音,从1数到10,以及持续微笑元音发音。
  • AVEC2013视频时长从20分钟到50分钟不等,平均25分钟。AVEC2014挑战赛使用的语料库还包含150个视听片段,其中每个片段包含两个子片段,分别记录两个任务:Northwind和Freeform
  • 与AVEC2013语料库相比,AVEC2014语料库的子片段长度要短得多(从6秒到4分8秒不等)。对于这两个数据集,每个片段都标有贝克抑郁量表(BDID评分,表示抑郁严重程度,范围从最小0到最大63.
  • 在AVEC2019抑郁数据集上评估了我们的方法,该数据集被称为扩展痛苦分析访谈语料库。它是woz-aic数据集的扩展版本。该数据集记录了动画虚拟计算机代理采访人的场景下的音频和视频剪辑。该数据集包含163个用于训练的受试者,56个用于验证的受试者和56个用于测试的受试者的片段,其中8项患者健康问卷(PHQ-8)分数被用作抑郁症严重程度标签。

与AVEC2013/2014数据集不同,该数据集只提供了几个馍级面部描述符作为视觉模态,而不是原始视频。

  • 在的实验中,使用基于CE-CLM地标检测器的OpenFace2.0对每帧的人脸区域进行裁剪和对齐,其中获得的人脸图像分辨率为112×112。对于人脸检测失败的每一帧,我们将其替换为榄型训练前视频中最近一帧提取的人脸图像。

4.2 Implementation details

MTB模块设置

  • AVEC2013和AVEC2014数据集:使用由三个预训练在VGGFace2上的ResNet-50网络组成的MTB模块。
  • 空间尺度:考虑三个空间尺度,通过三个分支处理输入序列(30帧,每帧尺寸为3×112×112),生成不同空间尺度的特征图序列。
  • 输出尺寸:生成的特征图集具有不同尺寸,分别为256×28×28、512×14×14和2048×4×4。
  • 最终输出:三个时序特征图集,每个集包含1024个1×4×4大小的特征图,转换为2048维的一维潜在特征向量。

DFE模块设置

  • MTA模块:包含三个非局部模块和三个相互关注模块,用于增强不同时间尺度上的特征表示。
  • NS模块:一个标准编码器,包含四个1D卷积层(内核数分别为1024、512、128和32),用于分离抑郁相关和非抑郁特征。

抑郁症识别模型(GAT)

  • GAT层:模型包含一个GAT层,用于处理图结构数据。
  • 读出层:使用“均值”运算来聚合读出层中节点的特征。
  • FC层:包含三个全连接层,带有ReLU激活函数。

训练细节

  • 优化器:使用Adam优化器进行训练。
  • 损失函数:使用最小均方误差(MSE)作为损失函数。

超参数

  • AVEC2013和AVEC2014数据集:MTB的批大小、学习率和β2分别设置为5、1e-5和0.999。
  • AVEC2019数据集:所有实验设置为24、1e-5和0.999。

RMSE = 1 n ∑ i = 1 n ( y i − y ^ i ) 2 \sqrt{\frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2} n1i=1n(yiy^i)2

MAE = 1 n ∑ i = 1 n ∣ y i − y ^ i ∣ \frac{1}{n} \sum_{i=1}^{n} |y_i - \hat{y}_i| n1i=1nyiy^i

4.3 Comparison to existing approaches

  • 在本节中,将提出的方法与现有的最先进的基于视觉的方法进行比较,这些方法已经在AVEC2013/2014年的洼地数据集中报告了他们的结果。从表1和表2可以看出,本文提出的短期建模模块(MTB-DFE模型在所有列出的基于薄片的抑郁症识别方法中已经达到了第二好的性能,可以与最先进的方法相媲美

在这里插入图片描述


4.4 Ablation studies

下图首先将提出的MTB模块与标准帧级模型(ResNet-50)和单尺度短期时间模型进行了比较,用于基于面部行为的短期抑郁症识别。在预处理设置相同的情况下,这三种方法唯一的区别是提取的特征的时间尺度不同,ResNet-50(静态特征)、C3D(单尺度动态特征)和MTB(多尺度动态特征)。结果表明,MTB模型比单尺度时间模型和框架水平模型的RMSE分别提高17.9%和20.2%,CCC分别提高303.7%和52.6%,表明抑郁相关线索嵌入在多个时间尺度的面部行为中,即多尺度时间模型对基于人脸的抑郁症识别至关重要。
在这里插入图片描述

此外,我们通过梯度加权类激活映射(GRAD-CAM)可视化了下图中使用DFE模块的影响,以识别与抑郁状态相关的面部区域。对于所有原始模型,热图都是基于它们最后一个池化层输出的特征图一致地生成的。
在这里插入图片描述

同时,对于所有基于DFE的模型,热图都是基于其DFE模块的最后一个最大池化层输出的特征图生成的。与原始模型相比,添加DFE模块可以帮助他们提取抑郁线索从面部区域而不是背景中提取C3D来自更重要的面部区域,包括嘴、鼻子和左脸颇,这与之前的研究结论一致,即高抑郁水平的受试者在AU12、AU15(与嘴有关)、AU9(与鼻子有关)和AU36(与嘴有关)和左脸颊的激活较少。

  • 可见,左验颊始终如一地为抑郁分析提供了更多线索。我们假设这是因为控制身体左侧(例如左脸颊)的右半球在管理人类梢铭状态方面起着关键作用,因此在推断抑郁状态方面更有信息:或DMTB:通过关注更具区别性的面部区域(却眉毛和眉毛之间的区域,这与抑郁受试者通常在这些区域的肌肉相对过度活动的结论相对应
  • 最后,比较了C3D和MTB-DFE在使用它们进行短期建模、视频级建模和两阶段建模时的结果。两阶段系统(将C3D/MTB-DFE)作为短期模型,然后使用SPG进行视频级建模的结果)在两种网络的所有三种设置中都取得了最好的结果,显示了所提出的两阶段框架的明显优势。这些结果可以用以下事实来解释:基于C3D/mtb-dfe的视须级建模在降采样过程中丢弃了短期面部行为细节,这些细节可能包含识别抑郁症的关键线索。

ATP:我们将所有薄片级预测平均为视频级预测
STA:我们使用引入的12个统计量来表示每个特征维度的视频级信息,然后将所有特征维度的统计量连接起来作为视频级表示。然后将生成的视频级别表示馈送到MLP以生成视频级别预测。
SPV:我们采用介绍的频谱编码算法,将所有薄片级特征总结为视频级频谱向量,然后将其馈给MLP以生成视频级预测。
SPH:我们采用频谱编码算法,将所有薄片级特征总结为视频级光谱热图,然后将其馈送到1D-CNN以生成视频级预测。
SEG:我们使用提出的顺序图表示将所有薄片级特征总结为视频级表示,然后将其馈送到1DCNN以生成视频级预测。
SPG:我们使用提出的谱图表示将所有薄片级特征总结为视频级表示,然后将其馈送到GatedGCN以生成视频级预测。

在这里插入图片描述

4.5 Cross-dataset evaluation

为了进一步评估提出的方法的泛化能力,我们还报告了下表中的跨数据集评估结果。

在这里插入图片描述

我们观察到,在AVEC2013数据集上训练的模型在两个AVEC2014任务上表现良好,特别是预训练的MTB-DFE模型的PCC和RMSE分别达到了0.732和8.04。相比之下,在AVEC2014的短视频上训练的MTB-DF模型的鲁棒性较差。特别是,在自由形式视频上训练的模型比在北风视频上训练的模型产生了更好的结果。由于AVEC2013任务和自由形式任务是无媒介和复杂的,而北风视频是在严格控制的条件下录制的(即只要求参与者阅读预先定义的德语段落),AVEC2013视频和自由形式视频(特别是AVEC2013视频)包含比北风视频更丰富的面部行为。因此,我们假设这些模型可以从AVEC2013视频和自由形式视频中提取更多与抑郁相关的线索。

  • 换句话说,它表明,在引发更多自然行为和反应的任务上训练的模型提供了更好的泛化能力。
  • 还可以观察到,在AVEC2013和自由形式任务上训练的大多数MTB-DFE模型优于相应的MTB-DFE+SPG模型。这可以解释为MTB-DFE只关注于从短期面部行为预测抑郁,不同的任务仍然可能触发一些类似的短期面部行为。然而,SPG模型试图学习视频级别的面部行为,这意味着它们在很大程度上取决于任务的全局上下文。因此,MTB-DFE+SPG模型在跨数据集评估中的泛化能力较差。

4.6 Conclusions and discussion

根据AVEC2013、AVEC2014和AVEC2019的实验结果,我们得出结论:两阶段方法优于大多数现有方法,具有边际优势:MTB-DFE模型也比所有现有的短期抑郁建模方法产生更好的性能,其中DFE模块大大提高了性能,显示出其增强抑郁相关线索和去除非抑郁噪声的能力(两种视频级别的图形表示都可以进一步提高抑郁症识别性能,其中spg比seg和其他基线产生更好的预测,这表明它可能是总结视频任意数量的薄片级别特征的优越策略)

提出的两阶段框架可以很容易地使用各种短期和长期建模方法进行扩展。
特别是,在相同的设置下,两阶段建模总是比相应的一阶段方法提供更好的预测。

  • 虽然提出的两阶段框架在抑郁症识别方面取得了最好和最稳健的性能,但一个主要的限制是这两个阶段是单独实现的,这意味着深度学习的短期抑郁症特征可能仍然不是最优的。如果短期抑郁建模和视频级抑郁编码可以集成到一个端到端框架中,那么短期和视频级抑郁表示都可能得到潜在的改进,并产生更好的预测。
  • 此外,现有的视听AVEC数据集仅包含150个片段,并且这些数据集是在受控的实验室环境中收集的。因此,这些实验并不能完全验证所提出的方法在现实世界应用中的实用性。因此,该领域未来的一项重要工作是收集更大的现实世界视听数据集,并将其提供给社区的公共研究使用。最后,由于DFE模块和SPG在抑郁分析方面取得了显著的成果,将它们扩展到类似的视频级/剪辑级识别任务中。

在这里插入图片描述

相关文章:

【论文精读】 | 基于图表示的视频抑郁症识别的两阶段时间建模框架

文章目录 0、Description1、Introduction2、Related work2.1 Relationship between depression and facial behaviours2.2 Video-based automatic depression analysis2.3 Facial graph representation 3、The proposed two-stage approach3.1 Short-term depressive behaviour…...

采集PCM,将base64片段转换为wav音频文件

需求 开始录音——监听录音数据——结束录音 在监听录音数据过程中:客户端每100ms给前端传输一次数据(pcm数据转成base64),前端需要将base64片段解码、合并、添加WAV头、转成File、上传到 OSS之后将 url 给到服务端处理。 {num…...

eclipse ui bug

eclipse ui bug界面缺陷,可能项目过多,特别maven项目过多,下载,自动编译,加载更新界面异常 所有窗口死活Restore不回去了 1)尝试创建项目,还原界面,失败 2)关闭所有窗口&…...

前端获取blob文件格式的两种格式

第一种,后台传递给前台是base64格式的JSON数据 这时候前台拿到base64格式的数据可以通过内置的atob解码方法结合new Uint8Array和new Blob方法转换成blob类型的数据格式,然后可以使用blob数据格式进行操作,虽然base64转换成blob要经过很多步骤,但幸运的是这些步骤都是固定的,因…...

向日葵RCE复现(CNVD-2022-10270/CNVD-2022-03672)

一、环境 1.1 网上下载低版本的向日葵<2022 二、开始复现 2.1 在目标主机上打开旧版向日葵 2.2 首先打开nmap扫描向日葵主机端口 2.3 在浏览器中访问ip端口号cgi-bin/rpc?actionverify-haras &#xff08;端口号&#xff1a;每一个都尝试&#xff0c;直到获取到session值…...

Postman中的负载均衡测试:确保API的高可用性

Postman中的负载均衡测试&#xff1a;确保API的高可用性 在微服务架构和分布式系统中&#xff0c;API的负载均衡是确保系统高可用性和可扩展性的关键技术之一。Postman作为一个多功能的API开发和测试平台&#xff0c;提供了多种工具来帮助测试人员模拟高负载情况下的API表现。…...

anaconda+tensorflow+keras+jupyter notebook搭建过程(CPU版)

AnacondaTensorFlowKeras 环境搭建教程...

LitCTF2024赛后web复现

复现要求&#xff1a;看wp做一遍&#xff0c;自己做一遍&#xff0c;第二天再做一遍。&#xff08;一眼看出来就跳过&#xff09; 目录 [LitCTF 2024]浏览器也能套娃&#xff1f; [LitCTF 2024]一个....池子&#xff1f; [LitCTF 2024]高亮主题(划掉)背景查看器 [LitCTF 2…...

Elasticsearch:跨集群使用 ES|QL

警告&#xff1a;ES|QL 的跨集群搜索目前处于技术预览阶段&#xff0c;可能会在未来版本中更改或删除。Elastic 将努力解决任何问题&#xff0c;但技术预览中的功能不受官方 GA 功能的支持 SLA 约束。 使用 ES|QL&#xff0c;你可以跨多个集群执行单个查询。 前提&#xff1a; …...

学习笔记4:docker和k8s选择简述

docker和 k8s 占用资源 使用客户体量Docker 和 Kubernetes&#xff08;K8s&#xff09;都是流行的容器化技术&#xff0c;但它们在资源管理和使用上有一些不同。以下是关于两者资源占用和使用客户体量的详细比较&#xff0c;基于具体数据和信息&#xff1a; Docker 资源占用…...

关于锁策略

在Java中对于多线程来说&#xff0c;锁是一种重要且必不可少的东西&#xff0c;那么我们将如何使用以及在什么时候使用什么样的锁呢&#xff1f;请各位往下看 悲观锁VS乐观锁 悲观锁&#xff1a; 在多线程环境中&#xff0c;冲突是非常常见的&#xff0c;所以在执行操作之前…...

昇思25天学习打卡营第3天|基础知识-数据集Dataset

目录 环境 环境 导包 数据集加载 数据集迭代 数据集常用操作 shuffle map batch 自定义数据集 可随机访问数据集 可迭代数据集 生成器 MindSpore提供基于Pipeline的数据引擎&#xff0c;通过数据集&#xff08;Dataset&#xff09;和数据变换&#xff08;Transfor…...

C++11新特性——智能指针——参考bibi《 原子之音》的视频以及ChatGpt

智能指针 一、内存泄露1.1 内存泄露常见原因1.2 如何避免内存泄露 二、实例Demo2.1 文件结构2.2 Dog.h2.3 Dog.cpp2.3 mian.cpp 三、独占式智能指针:unique _ptr3.1 创建方式3.1.1 ⭐从原始(裸)指针转换&#xff1a;3.1.2 ⭐⭐使用 new 关键字直接创建&#xff1a;3.1.3 ⭐⭐⭐…...

“微软蓝屏”全球宕机,敲响基础软件自主可控警钟

上周五&#xff0c;“微软蓝屏”“感谢微软 喜提假期”等词条冲上热搜&#xff0c;全球百万打工人受此影响&#xff0c;共同见证这一历史性事件。据微软方面发布消息称&#xff0c;旗下Microsoft 365系列服务出现访问中断。随后在全球范围内&#xff0c;包括企业、政府、个人在…...

【Linux C | 网络编程】进程间传递文件描述符socketpair、sendmsg、recvmsg详解

我们的目的是&#xff0c;实现进程间传递文件描述符&#xff0c;是指 A进程打开文件fileA,获得文件描述符为fdA&#xff0c;现在 A进程要通过某种方法&#xff0c;传递fdA&#xff0c;使得另一个进程B&#xff0c;获得一个新的文件描述符fdB&#xff0c;这个fdB在进程B中的作用…...

高并发内存池(六)Page Cache回收功能的实现

当Page Cache接收了一个来自Central Cache的Span&#xff0c;根据Span的起始页的_pageId来对前一页所对应的Span进行查找&#xff0c;并判断该Span&#xff0c;是否处于使用状态&#xff0c;从而看是否可以合并&#xff0c;如果可以合并继续向前寻找。 当该Span前的空闲Span查…...

浅析JWT原理及牛客出现过的相关面试题

原文链接&#xff1a;https://kixuan.github.io/posts/f568/ 对jwt总是一知半解&#xff0c;而且项目打算写个关于JWT登录的点&#xff0c;所以总结关于JWT的知识及网上面试考察过的点 参考资料&#xff1a; Cookie、Session、Token、JWT_通俗地讲就是验证当前用户的身份,证明-…...

Spring AI (五) Message 消息

5.Message 消息 在Spring AI提供的接口中&#xff0c;每条信息的角色总共分为三类&#xff1a; SystemMessage&#xff1a;系统限制信息&#xff0c;这种信息在对话中的权重很大&#xff0c;AI会优先依据SystemMessage里的内容进行回复&#xff1b; UserMessage&#xff1a;用…...

【windows Docker desktop】在git bash中报错 docker: command not found 解决办法

【windows Docker desktop】在git bash中报错 docker: command not found 解决办法 1. 首先检查在windows中环境变量是否设置成功2. 检查docker在git bash中环境变量是否配置3. 重新加载终端配置4. 最后在校验一下是否配置成功 1. 首先检查在windows中环境变量是否设置成功 启…...

02.FreeRTOS的移植

文章目录 FreeRTOS移植到STM32F103ZET6上的详细步骤1. 移植前的准备工作2. 添加FreeRTOS文件3. 修改SYSTEM文件4. 修改中断相关文件5. 修改FreeRTOSConfig.h文件6. 可选步骤 FreeRTOS移植到STM32F103ZET6上的详细步骤 1. 移植前的准备工作 **基础工程&#xff1a;**内存管理部…...

【个人笔记】一个例子理解工厂模式

工厂模式优点&#xff1a;创建时类名过长或者参数过多或者创建很麻烦等情况时用&#xff0c;可以减少重复代码&#xff0c;简化对象的创建过程&#xff0c;避免暴露创建逻辑&#xff0c;也适用于需要统一管理所有创建对象的情况&#xff0c;比如线程池的工厂类Executors 简单工…...

【C语言】数组栈的实现

栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端 称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出LIFO&#xff08;Last In First Out&#xff09;的原则。 压栈&#…...

kafka 各种选举过程

一、kafka 消费者组协调器 如何选举 Kafka 中的消费者组协调器&#xff08;Group Coordinator&#xff09;是通过以下步骤选举的&#xff1a; 分区映射&#xff1a; Kafka 使用一个特殊的内部主题 __consumer_offsets 来存储消费者组的元数据。该主题有多个分区&#xff0c;每…...

树与二叉树【数据结构】

前言 之前我们已经学习过了各种线性的数据结构&#xff0c;顺序表、链表、栈、队列&#xff0c;现在我们一起来了解一下一种非线性的结构----树 1.树的结构和概念 1.1树的概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一…...

简单几步,把浏览器书签转换成导航网页

废话不多说直奔主题上干货 Step 1 下载浏览器书签 1&#xff0c;电脑浏览器点击下载Pintree Pintree 是一个开源项目&#xff0c;旨在将浏览器书签导出成导航网站。通过简单的几步操作&#xff0c;就可以将你的书签转换成一个美观且易用的导航页面。 2. 安装 Pintree B…...

Mac安装Hoomebrew与升级Python版本

参考 mac 安装HomeBrew(100%成功)_mac安装homebrew-CSDN博客 /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 安装了Python 3.x版本&#xff0c;你可以使用以下命令来设置默认的Python版本&#xff1a; # 首先找到新安…...

代码审计:Bluecms v1.6

代码审计&#xff1a;Bluecms v1.6 漏洞列表如下(附Exp)&#xff1a; 未完待续… 1、include/common.fun.php->getip()存在ip伪造漏洞 2、ad_js.php sql注入漏洞 Exp:view-source:http://127.0.0.3/bluecms/ad_js.php?ad_id12%20UNION%20SELECT1,2,3,4,5,6,database() 3、…...

谷粒商城实战笔记-59-商品服务-API-品牌管理-使用逆向工程的前后端代码

文章目录 一&#xff0c; 使用逆向工程生成的代码二&#xff0c;生成品牌管理菜单三&#xff0c;几个小问题 在本次的技术实践中&#xff0c;我们利用逆向工程的方法成功地为后台管理系统增加了品牌管理功能。这种开发方式不仅能快速地构建起功能模块&#xff0c;还能在一定程度…...

如何利用Jenkins自动化管理、部署数百个应用

目录 1. Jenkins 安装与部署步骤 1.1 系统要求 1.2 安装步骤 1.2.1 Windows 系统 1.2.2 CentOS 系统 1.3 初次配置 2. Gradle 详细配置方式 2.1 安装 Gradle 2.1.1 Windows 系统 2.1.2 CentOS 系统 2.2 配置 Jenkins 中的 Gradle 3. JDK 详细配置方式 3.1 安装 JD…...

Java之归并排序

归并排序 归并排序(Merge Sort)算法&#xff0c;使用的是分治思想。分治&#xff0c;顾名思义&#xff0c;就是分而治之&#xff0c;将一个大问题分解成小的子问题来解决。小的子问题解决了&#xff0c;大问题也就解决了。 核心源码: mergeSort(m->n) merge(mergeSort(m-&g…...

了解ChatGPT API

要了解如何使用 ChatGPT API&#xff0c;可以参考几个有用的资源和教程&#xff0c;这些资源能帮助你快速开始使用 API 进行项目开发。下面是一些推荐的资源&#xff1a; OpenAI 官方文档&#xff1a; 访问 OpenAI 的官方网站可以找到 ChatGPT API 的详细文档。这里包括了 API …...

EasyAnimate - 阿里开源视频生成项目,国产版Sora,高质量长视频生成 本地一键整合包下载

EasyAnimate是阿里云人工智能平台PAI自主研发的DiT-based视频生成框架&#xff0c;它提供了完整的高清长视频生成解决方案&#xff0c;包括视频数据预处理、VAE训练、DiT训练、模型推理和模型评测等。在预训练模型的基础上&#xff0c;EasyAnimate可通过少量图片的LoRA微调来改…...

7月23日JavaSE学习笔记

异常&#xff1a; 程序中一些程序处理不了的特殊情况 异常类 Exception 继承自 Throwable 类&#xff08;可抛出的&#xff09; Throwable继承树 Error&#xff1a;错误/事故&#xff0c;Java程序无法处理&#xff0c;如 OOM内存溢出错误、内存泄漏...会导出程序崩溃 常见的…...

Linux——DNS服务搭建

&#xff08;一&#xff09;搭建nginx 1.首先布置基本环境 要求能够ping通外网&#xff0c;有yum源 2.安装nginx yum -y install nginx 然后查看验证 3.修改网页配置文件 修改文件&#xff0c;任意编写内容&#xff0c;然后去物理机测试 &#xff08;二&#xff09;创建一…...

C#中的wpf基础

在WPF中&#xff0c;Grid 是一种非常强大的布局控件&#xff0c;用于创建网格布局。它允许你将界面划分为行和列&#xff0c;并将控件放置在这些行和列中。 以下是一些关键点和示例&#xff0c;帮助你理解 WPF 中的 Grid&#xff1a; 基本属性 RowDefinitions&#xff1a;定义…...

基于微信小程序+SpringBoot+Vue的刷题系统(带1w+文档)

基于微信小程序SpringBootVue的刷题系统(带1w文档) 基于微信小程序SpringBootVue的刷题系统(带1w文档) 本系统是将网络技术和现代的管理理念相结合&#xff0c;根据试题信息的特点进行重新分配、整合形成动态的、分类明确的信息资源&#xff0c;实现了刷题的自动化&#xff0c;…...

SSH -i的用法

缘起 今天使用ssh -i指定私钥时遇到以下错误&#xff1a; WARNING: UNPROTECTED PRIVATE KEY FILE! Permissions 0644 for /home/ken/.ssh/my.pem are too open. It is required that your private key files are NOT accessible by others. This private key will b…...

小白学习webgis的详细路线

推荐打开boss直聘搜索相关岗位&#xff0c;查看岗位要求&#xff0c;对症下药是最快的。 第一阶段&#xff1a;基础知识准备 计算机基础 操作系统&#xff1a;理解Windows、Linux或macOS等操作系统的基本操作&#xff0c;学会使用命令行界面。网络基础&#xff1a;掌握TCP/I…...

使用ChatGPT来撰写和润色学术论文的教程(含最新升级开通ChatGpt4教程)​​

现在有了ChatGPT4o更加方便了, 但次数太少了 想要增加次数可以考虑升级开桶ChatGpt4​​ &#xff08; OPENAI4 可以减2刀&#xff09; 一、引言 在学术研究中&#xff0c;撰写高质量的论文是一项重要的技能。本教程将介绍如何利用ChatGPT来辅助完成从论文构思到润色的全过程…...

常见的 HTTP 状态码分类及说明

HTTP 响应状态码&#xff08;HTTP status code&#xff09;&#xff0c;表示服务器对请求的处理结果。常见的 HTTP 状态码有以下几类&#xff1a; 1xx: 信息响应 (Informational Responses) 100 Continue: 请求已收到&#xff0c;客户端应继续发送请求的其余部分。101 Switch…...

Leetcode700.二叉搜索树中搜索具体值

二叉搜索树的定义&#xff1a; 一颗空树或者具有以下性质的二叉树&#xff1a; 若任意节点的左子树不空&#xff0c;则左子树上所有节点的值均小于它的根节点的值&#xff1b;若任意节点的右子树不空&#xff0c;则右子树上所有节点的值均大于它的根节点的值&#xff1b;任意节…...

自动导入unplugin-auto-import+unplugin-vue-components

文章介绍 接下来将会以Vite Vue3 TS的项目来举例实现 在我们进行项目开发时&#xff0c;无论是声明响应式数据使用的ref、reactive&#xff0c;或是各种生命周期&#xff0c;又或是computed、watch、watchEffect、provide-inject。这些都需要前置引入才能使用&#xff1a; …...

Conda修改包/虚拟环境储存目录

Conda修改包/虚拟环境储存目录 关键字样例 关键字 通过conda config --show [key]可以查看某个配置的值&#xff0c;[key]留空可以查看所有配置 其中&#xff1a; envs-dirs 存放虚拟环境的储存目录pkgs_dirs 包的目录 通过conda config --add [key] [value]可以为配置添加值…...

Live555源码阅读笔记:哈希表的实现(C++)

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…...

警务平台app

智慧公安以大数据、云计算、人工智能、物联网和移动互联网技术为支撑&#xff0c;以“打、防、管、控”为目的&#xff0c;综合研判为核心&#xff0c;共享信息数据资源&#xff0c;融合业务功能&#xff0c;构建公安智慧大数据平台&#xff0c;实现公安信息数字化、网络化和智…...

Java代理模式详解

Java代理模式详解 概念 代理模式是一种设计模式&#xff0c;为其他对象提供一种代理以控制对这个对象的访问。在某些情况下&#xff0c;一个对象不适合或者不能直接引用另一个对象&#xff0c;而代理对象可以在客户端和目标对象之间起到中介的作用。在Java中&#xff0c;代理…...

docker centos镜像 npm安装包时报错“npm ERR! code ECONNRESET”

1.采用新的镜像地址 npm config set registry https://registry.npmmirror.com2.清理缓存 npm cache clean --force3.安装yarn npm install -g yarn4. 安装模块 在node_modules 同级目录执行下面命令&#xff1a; yarn add napi-build-utils env-paths express ejs cors …...

Angular中component和directive的区别?

在Angular中&#xff0c;Component和Directive都是重要的构建块&#xff0c;用于构建和组织应用程序的UI。然而&#xff0c;它们有不同的用途和特点。以下是Component和Directive的主要区别&#xff1a; Component&#xff08;组件&#xff09; 1、定义&#xff1a;Component…...

Unity 资源 之 Pop It 3D 解压玩具与双人AI游戏 Unity 资源包分享

精彩呈现&#xff1a;Pop It 3D 解压玩具与双人AI游戏 Unity 资源包分享 一、Pop It 3D 解压玩具的魅力二、双人游戏的互动乐趣三、Unity 游戏资源包的优势四、如何获取资源包 亲爱的游戏爱好者们&#xff0c;今天为大家带来一款令人兴奋的游戏资源——Pop It 3D 解压玩具双人带…...

linux离线安装mysql8(单机版)

文章目录 一、检查服务器是否有残留mysql资源&#xff0c;有的话就全删除1.1、查询mysql已安装的相关依赖&#xff1a;1.2、查找含有MySQL的目录 二、安装2.1、上传mysql安装包到文件夹下并解压2.2、移动及重命名2.3、mysql用户2.4、配置mysql所需的my.cnf文件2.5、给my.cnf配置…...