【论文学习】ECAPA-TDNN: Emphasized Channel Attention, Propagation and Aggregation

news2024/9/22 13:25:22

ECAPA-TDNN: Emphasized Channel Attention, Propagation and Aggregation

目录

  • ECAPA-TDNN: Emphasized Channel Attention, Propagation and Aggregation
  • 摘要
  • 1 介绍
  • 2 DNN说话人识别系统
    • 2.1 Extended-TDNN x-vector
    • 2.2 基于ResNet的r-vector
  • 3 提出的ECAPA-TDNN架构
    • 3.1 依赖于通道和上下文的统计池
    • 3.2 1维Squeeze-Excitation Res2Blocks
    • 3.3 多层特征聚合与求和
  • 4 实验设置
    • 4.1 说话人嵌入提取器的训练
    • 4.2 说话人验证
    • 4.3 评估方案
  • 5 结果
  • 6 结论
  • 参考文献

摘要

目前的说话人验证技术依赖于神经网络来提取说话人的表征。成功的x-vector架构是一个时延神经网络(TDNN),它应用统计池化将变长语句投影到表征嵌入的定长说话人中。本文基于人脸验证和计算机视觉相关领域的最新趋势,对该架构提出了多种增强。首先,将初始帧层重构为具有有效跳跃连接的1维Res2Net模块;与SE-ResNet类似,在这些模块中引入了挤压和激发块,以显式地对通道相互依赖性进行建模。SE块根据记录的全局特性重新缩放通道,扩展帧层的时间上下文。其次,众所周知,神经网络可以学习分层特征,每一层的复杂度都不同。为了利用这些互补的信息,我们聚合和传播不同层次的特征。最后,我们利用信道相关的帧注意对统计池模块进行了改进。这使得网络在每个信道的统计估计期间专注于不同的帧子集。提出的ECAPA-TDNN架构在VoxCeleb测试集和2019年VoxCeleb说话人识别挑战赛上的表现明显优于最先进的基于TDNN的系统。

关键词

说话人识别,说话人验证,深度神经网络,x-vectors,通道注意力

1 介绍

近年来,x-vectors[1]及其后续改进[2,3,4]一直在说话人验证任务上提供了最先进的结果。对原始时滞神经网络(TDNN)架构的改进是一个活跃的研究领域。通常,神经网络是针对说话人识别任务进行训练的。收敛后,可以从输出层之前的瓶颈层提取低维说话人嵌入,以表征输入录音中的说话人。说话人验证可以通过比较与登记和测试录音相对应的两个嵌入来完成,以接受或拒绝两个录音包含相同说话人的假设。我们可以使用一个简单的余弦距离来进行比较。此外,还可以训练更复杂的评分后端,如概率线性判别分析(PLDA)[5]。

x-vector系统的日益流行导致了显著的架构改进和比原始方法更优化的训练过程[6]。系统的拓扑结构通过加入流行的ResNet[7]架构的元素而得到改进。在帧级层之间添加残差连接已被证明可以增强嵌入[3,4]。此外,残差连接使反向传播算法收敛更快,有助于避免梯度消失问题[7]。

x-vector系统中的统计池化层通过跨时间收集隐藏节点激活的简单统计信息,将变长输入投影到固定长度的表示中。[8,9]中的作者为这个池化层引入了一个时间自注意力系统,它允许网络只关注它认为重要的帧。它也可以解释为语音活动检测(VAD)的预处理步骤,以检测无关的非语音帧。

本文提出对TDNN架构和统计池化层的进一步架构增强。我们引入了额外的跳跃连接来在整个系统中传播和聚合通道。使用全局上下文的通道注意力被纳入帧层和统计池化层中,以进一步改善结果。

本文的结构如下:第2节将描述当前最先进的说话人识别系统,这些系统将被用作基线。第3节将解释并引出我们所提出的架构的新颖组件。第4节将解释我们的实验设置,以测试我们的架构中各个组件对流行的VoxCeleb数据集[10,11,12]的影响。我们将在第5节讨论这些实验的结果。此外,还将提供流行的最先进基线系统之间的比较。第6节将简要概述我们的发现。

2 DNN说话人识别系统

两种基于DNN的说话人识别架构将作为强有力的基准来衡量我们提出的架构的影响:x-vector和基于ResNet的系统,它们目前都在VoxSRC[12]等说话人验证任务上提供了最先进的性能。

2.1 Extended-TDNN x-vector

第一个基线系统是扩展的TDNN x-vector架构[2,3,4],它改进了[1]中引入的原始x-vector系统。初始帧层由一维扩张卷积层与密集层交织组成。每个滤波器都可以访问前一层或输入层的所有特征。扩张卷积层的任务是逐步建立时间上下文。在所有帧层中引入残差连接。帧层之后是一个带注意力的统计池化层,计算最终帧级特征的均值和标准偏差。注意力系统[8]允许模型选择它认为相关的帧。在统计池化后,引入2个全连接层,以第1层作为瓶颈层生成低维说话人特征嵌入。

2.2 基于ResNet的r-vector

第二个基线系统是[4]中提出的r-vector系统。它基于成功的ResNet架构[7]的ResNet18和ResNet34实现。该网络的卷积帧层在池化层收集均值和标准差统计之前,将特征处理为二维信号。有关拓扑的更多详细信息,请参见[4]。

3 提出的ECAPA-TDNN架构

在本节中,我们将研究x-vector架构的一些限制,并在我们的ECAPA-TDNN架构中纳入潜在的解决方案。下面的小节将重点介绍帧级和池级的增强。图2给出了完整架构的概述。BN表示批量归一化[13],除非另有说明,否则非线性为修正线性单元(ReLU)。

图2:ECAPA-TDNN的网络拓扑结构。

图2:ECAPA-TDNN的网络拓扑结构。我们用 k k k表示核大小, d d d表示Conv1D层或SE-Res2Blocks的膨胀间隔。 C C C T T T分别对应中间特征映射的通道维度和时间维度。 S S S是训练集说话人的数量。

3.1 依赖于通道和上下文的统计池

在最近的x-vector架构中,软自注意力被用于计算时间池化层[8]中的加权统计。多头注意力的成功应用表明,可以在不同的帧集上提取出说话人的某些特性[9]。鉴于这些结果,本文认为将这种时间注意力机制进一步扩展到通道维度可能是有益的。这使得网络能够更多地关注在相同或相似的时间实例上不会激活的说话人特征,例如元音的特定说话人属性和辅音的特定说话人属性。

我们实现了[8]中描述的注意机制,并将其调整为依赖于通道:

e t , c = v c T f ( W h t + b ) + k c , (1) e_{t,c}=v_c^T f(Wh_t+b)+k_c, \tag{1} et,c=vcTf(Wht+b)+kc,(1)

其中 h t h_t ht为时间步 t t t时最后一帧层的激活量。参数 W ∈ R R × C W \in \mathbb{R}^{R×C} WRR×C b ∈ R R × 1 b \in \mathbb{R}^{R×1} bRR×1将自注意力信息投影到更小的 R R R维表示中,该表示在所有 C C C通道中共享,以减少参数数量和过拟合风险。在非线性 f ( ⋅ ) f(\cdot) f()之后,该信息通过权重 v c ∈ R R × 1 v_c \in \mathbb{R}^{R×1} vcRR×1和偏置 k c k_c kc的线性层转换为依赖通道的自注意力分数。然后,通过跨时间在通道上应用softmax函数,对所有帧的标量分数 e t , c e_{t,c} et,c进行归一化:

α t , c = e x p ( e t , c ) ∑ τ T e x p ( e τ , c ) . (2) \alpha_{t,c}=\frac {exp(e_{t,c})} {\sum^T_\tau exp(e_{\tau,c})}. \tag{2} αt,c=τTexp(eτ,c)exp(et,c).(2)

自注意力分数 α t , c \alpha_{t,c} αt,c表示给定通道的每个帧的重要性,用于计算通道 c c c的加权统计。对于每句话,加权平均向量 μ ~ \tilde\mu μ~的通道分量 μ ~ c \tilde\mu_c μ~c的估计为:

μ ~ c = ∑ t T α t , c h t , c . (3) \tilde\mu_c = \sum_t^T \alpha_{t,c} h_{t,c}. \tag{3} μ~c=tTαt,cht,c.(3)

加权标准差向量 σ ~ \tilde\sigma σ~的通道分量 σ ~ c \tilde\sigma_c σ~c构造如下:

σ ~ c = ∑ t T α t , c h t , c 2 − μ ~ c 2 . (4) \tilde\sigma_c = \sqrt{\sum_t^T \alpha_{t,c} h^2_{t,c} - \tilde\mu_c^2}. \tag{4} σ~c=tTαt,cht,c2μ~c2 .(4)

池化层的最终输出通过连接加权均值 μ ~ \tilde\mu μ~和加权标准差 σ ~ \tilde\sigma σ~的向量来给出。

通过允许自注意力查看语音的全局属性,扩展了池化层的时间上下文。我们将公式(1)中的局部输入 h t h_t ht与整个时域的全局非加权平均值和标准偏差连接起来。这个上下文向量应该允许注意力机制自适应语音的全局属性,如噪声或录音条件。

3.2 1维Squeeze-Excitation Res2Blocks

在原始的x-vector系统中,帧层的时间上下文被限制为15帧。由于网络显然受益于更广泛的时间上下文[2,4,3],我们认为,鉴于录音的全局属性,与上述注意力模块中的全局上下文类似,重新缩放帧级特征可能是有益的。为此,本文引入了1维挤压激励(Squeeze-ExcitationSE)块,因为这种对全局通道相互依赖性进行建模的计算机视觉方法已被证明是成功的[14,15]。

SE块的第一个组件是挤压操作,它为每个通道生成描述符。挤压操作只是简单地计算跨时域帧级特征的平均向量 z z z

z = 1 T ∑ t T h t . (5) z=\frac {1} {T} \sum_t^T h_t. \tag{5} z=T1tTht.(5)

然后在激励操作中使用 z z z中的描述符来计算每个通道的权重。我们将后续的激励操作定义为:

s = σ ( W 2 f ( W 1 z + b 1 ) + b 2 ) (6) s = \sigma(W_2f(W_1z + b_1) + b_2) \tag{6} s=σ(W2f(W1z+b1)+b2)(6)

σ ( ⋅ ) \sigma(\cdot) σ()为sigmoid函数, f ( ⋅ ) f(\cdot) f()为非线性函数, W 1 ∈ R R × C W_1 \in \mathbb{R}^{R×C} W1RR×C和, W 2 ∈ R C × R W_2 \in \mathbb{R}^{C×R} W2RC×R。该操作充当瓶颈层, C C C R R R分别表示输入通道的数量和降维。结果向量 s s s包含0到1之间的权重 s c s_c sc,通过通道相乘应用于原始输入:

h ~ c = s c h c (7) \tilde{h}_c=s_ch_c \tag{7} h~c=schc(7)

一维SE块可以以各种方式集成到x-vector架构中,在每个扩张卷积之后使用它们是最直接的。然而,我们希望将它们与残差连接[7]的优点结合起来。同时,与基线系统相比,我们不希望增加太多的参数总量。图1所示的SE-Res2Block包含了上面提到的需求。我们在1帧的上下文中包含了前一层和后一层稠密层的扩张卷积。利用第一层稠密层可以降低特征维度,而第二层稠密层可以将特征数量恢复到原始维度。接下来是一个SE块来缩放每个通道。整个装置由一个跳跃连接覆盖。

这些传统ResBlocks的使用使得可以很容易地结合这种流行的计算机视觉架构的进展。例如,最近的Res2Net模块[16]增强了中心卷积层,使其可以通过在内部构建分层的类残差连接来处理多尺度特征。该模块的集成提高了性能,同时显著减少了模型参数的数量。
ECAPA-TDNN架构的SE-Res2Block

图1:ECAPA-TDNN架构的SE-Res2Block。标准Conv1D层的内核大小为1。尺度维为 s = 8 s=8 s=8的Res2Net [16] Conv1D通过核大小 k k k和膨胀间隔 d d d扩展时间上下文。

3.3 多层特征聚合与求和

原始的x-vector系统只使用最后一帧层的特征图来计算池化统计量。考虑到TDNN的层次性质,这些更深层次的特征是最复杂的特征,应该与说话人身份强相关。然而,由于[17,18]中的证据,我们认为更浅层的特征图也可以有助于更鲁棒的说话人嵌入。对于每一帧,所提出的系统连接所有SE-Res2Blocks块的输出特征图。在多层特征聚合(MFA)之后,一个稠密层对连接的信息进行处理,以生成用于注意力统计池化的特征。

另一种利用多层信息的互补方法是使用所有前面SE-Res2Blocks块和初始卷积层的输出作为每个帧层块的输入[17,19]。我们通过将每个SE-Res2Block中的残差连接定义为所有前一个block输出的总和来实现这一点。我们选择对特征映射求和,而不是拼接来限制模型参数数量。没有残差连接累加的最终架构如图2所示。

4 实验设置

4.1 说话人嵌入提取器的训练

我们应用固定条件VoxSRC 2019训练限制[12],仅使用具有5994个说话人的VoxCeleb2数据集[11]的开发部分作为训练数据。保留约2%的数据子集作为超参数优化的验证集。众所周知,神经网络受益于数据增强,它会生成额外的训练样本。我们为每个话语生成了总共6个额外的样本。第一组增强遵循Kaldi配方[2]与公开可用的MUSAN数据集(babble, noise)[20]和[21]中提供的RIR数据集(reverb)相结合。其余三种增强是使用开源的SoX (tempo up、tempo down)和FFmpeg(交替opus或aac压缩)库生成的。

输入特征是来自25 ms的80维mfcc,帧移10 ms。通过倒谱均值减法对MFCCs特征向量的二次随机裁剪进行归一化处理,不进行语音活体检测。作为最后一个增强步骤,我们对样本的log mel谱图应用SpecAugment[22]。该算法在时域随机掩码05帧,在频域随机掩码010通道。

所有模型都使用[23]中描述的triangular2策略以及Adam优化器[24],以1e-8和1e-3之间的周期性学习率进行训练。将一个循环的持续时间设置为130k次迭代。所有系统都使用AAM-softmax[6,25]进行训练,余量为0.2,softmax预标度为30,持续4个周期。为了防止过拟合,我们对2e-5模型中的所有权重应用权重衰减,除了使用2e-4的AAM-softmax权重。训练的小批量大小是128。

我们研究了在卷积帧层中具有512或1024通道的ECAPA-TDNN架构的两种设置。SE-Block和注意力模块中的瓶颈维度设置为128。Res2Block[16]中的scale dimension s s s设置为8。最终的完全连接层的节点数为192。该系统的性能将与第2节中描述的基线进行比较。

4.2 说话人验证

从所有系统的最终完全连接层中提取说话人嵌入。验证分数是使用嵌入之间的余弦距离产生的。随后,使用自适应s-norm对所有分数进行归一化[26,27]。冒名顶替者队列由所有训练语音的长度归一化的平均说话人嵌入组成。对于VoxCeleb测试集,将冒名顶替者队列的大小设置为1000,对于跨数据集VoxSRC 2019评估,将冒名顶替者队列的大小设置为50。

4.3 评估方案

该系统在流行的VoxCeleb1测试集[10]和VoxSRC 2019评测集[12]上进行了评估。性能将通过提供等错误率(EER)和最小归一化检测成本MinDCF ( P t a r g e t = 1 0 − 2 P_{target} = 10^{−2} Ptarget=102 C F A = C M i s s = 1 C_{FA} = C_{Miss} = 1 CFA=CMiss=1)来衡量。用一个简洁的消融研究来深入了解所提出的每个改进是如何影响性能的。

5 结果

表1给出了第2节中描述的基准系统和我们提出的ECAPA-TDNN系统的性能概述,以及嵌入提取器中的模型参数数量。我们实现了两种设置,卷积层中的滤波器数量 C C C设置为512或1024。所提出的架构显著优于所有基线,同时使用更少的模型参数。与每个测试集的最佳评分基线相比,ECAPA-TDNN系统在EER和MinDCF上的平均相对提升了18.7%和12.5%。我们注意到,在大多数情况下,基线的性能超过了[3,4]中报告的数字。我们继续对第3节中介绍的各个成分进行消融研究。表2概述了这些结果。

所有系统在标准VoxCeleb1和VoxSRC 2019测试集上的EER和MinDCF性能。
表1:所有系统在标准VoxCeleb1和VoxSRC 2019测试集上的EER和MinDCF性能。

ECAPA-TDNN架构的消融研究
表2:ECAPA-TDNN架构的消融研究。

为了衡量所提出的注意力模块的影响,运行了一个实验A.1,使用[8]的注意力模块。还进行了一个单独的实验A.2,该实验不为所提出的注意力提供上下文向量。通道和上下文相关的统计池化系统将EER和MinDCF指标分别提升了9.8%和3.2%。这证实了对每个通道应用不同的时间注意力的好处。上下文向量的加入使得系统的性能提升非常小,EER和MinDCF分别提高了1.9%和1.1%。尽管如此,这增强了我们的信念,即基于TDNN的架构应该尝试利用全局上下文信息。

实验B.1证实了这一观点,该实验清楚地表明了3.2节中描述的SE-blocks的重要性。在Res2Blocks中使用SE-modules可以使EER和MinDCF指标分别提高20.5%和11.9%。这表明,帧级特征有限的时间上下文是不够的,应该用基于语音的全局信息来补充。在实验B.2中,我们将Res2Blocks的多尺度特征替换为ResNet对应块的标准中心扩张1D卷积。除了模型参数相对减少30%之外,多尺度Res2Net方法还导致EER和MinDCF的相对提升分别为5.6%和3.2%。

在实验C.1中,我们只使用最终SE-Res2Block的输出,而不是聚合所有SE-Res2Block的信息。将输出结果聚合在一起,可以使EER和MinDCF值分别相对提高8.2%和2.8%。去除所有残差连接(实验C.2)显示出类似的退化率。用之前所有SE-Res2Blocks的输出之和替换SE-Res2Blocks中的标准ResNet跳跃连接,EER提高了6.5%,但实验C.3中的MinDCF分数略有下降。然而,在最近举行的2020短时间说话人验证(SdSV)挑战赛中,[28]说服我们将残差求和纳入最终的ECAPA-TDNN架构中。实验结果表明,该架构对[29]的其他领域具有良好的泛化性。

6 结论

本文提出了ECAPA-TDNN,一种新的基于TDNN的说话人嵌入提取器,用于说话人验证。我们进一步构建了原始的x-vector架构,并更加强调通道注意力、传播和聚合。在VoxCeleb和VoxSRC 2019评估集上,Squeeze-Excitation块、多尺度Res2Net特征、额外的跳跃连接和通道依赖的注意力统计池的纳入,使EER比强基线系统平均提高了19%。

参考文献

  1. D. Snyder, D. Garcia-Romero, G. Sell, D. Povey, and S. Khudanpur, “X-vectors: Robust DNN embeddings for speaker recognition,” in Proc. ICASSP, 2018, pp. 5329–5333.
  2. D. Snyder, D. Garcia-Romero, G. Sell, A. McCree, D. Povey, and S. Khudanpur, “Speaker recognition for multi-speaker conversations using x-vectors,” in Proc. ICASSP, 2019, pp. 5796–5800.
  3. D. Garcia-Romero, A. McCree, D. Snyder, and G. Sell, “JHUHLTCOE system for the VoxSRC speaker recognition challenge,” in Proc. ICASSP, 2020, pp. 7559–7563.
  4. H. Zeinali, S. Wang, A. Silnova, P. Matjka, and O. Plchot, “BUT system description to VoxCeleb speaker recognition challenge 2019,” 2019.
  5. S. Ioffe, “Probabilistic linear discriminant analysis,” in ECCV, 2006, pp. 531–542.
  6. J. Deng, J. Guo, N. Xue, and S. Zafeiriou, “ArcFace: Additive angular margin loss for deep face recognition,” in 2019 IEEE/CVF CVPR, 2019, pp. 4685–4694.
  7. K. He, X. Zhang, S. Ren, and J. Sun, “Deep residual learning for image recognition,” in IEEE/CVF CVPR, 2016, pp. 770–778.
  8. K. Okabe, T. Koshinaka, and K. Shinoda, “Attentive statistics pooling for deep speaker embedding,” in Proc. Interspeech, 2018, pp. 2252–2256.
  9. Y. Zhu, T. Ko, D. Snyder, B. K.-W. Mak, and D. Povey, “Selfattentive speaker embeddings for text-independent speaker verifi- cation,” in Proc. Interspeech, 2018, pp. 3573–3577.
  10. A. Nagrani, J. S. Chung, and A. Zisserman, “VoxCeleb: A largescale speaker identification dataset,” in Proc. Interspeech, 2017, pp. 2616–2620.
  11. J. S. Chung, A. Nagrani, and A. Zisserman, “VoxCeleb2: Deep speaker recognition,” in Proc. Interspeech, 2018, pp. 1086–1090.
  12. J. S. Chung, A. Nagrani, E. Coto, W. Xie, M. McLaren, D. A. Reynolds, and A. Zisserman, “VoxSRC 2019: The first VoxCeleb speaker recognition challenge,” 2019.
  13. S. Ioffe and C. Szegedy, “Batch normalization: Accelerating deep network training by reducing internal covariate shift,” in Proc. ICML, 2015, pp. 448–456.
  14. J. Hu, L. Shen, and G. Sun, “Squeeze-and-Excitation networks,” in Proc. IEEE/CVF CVPR, 2018, pp. 7132–7141.
  15. J. Zhou, T. Jiang, Z. Li, L. Li, and Q. Hong, “Deep speaker embedding extraction with channel-wise feature responses and additive supervision softmax loss function,” in Proc. Interspeech, 2019, pp. 2883–2887.
  16. S. Gao, M.-M. Cheng, K. Zhao, X. Zhang, M.-H. Yang, and P. H. S. Torr, “Res2Net: A new multi-scale backbone architecture,” IEEE TPAMI, 2019.
  17. J. Lee and J. Nam, “Multi-level and multi-scale feature aggregation using sample-level deep convolutional neural networks for music classification,” 2017.
  18. Z. Gao, Y. Song, I. McLoughlin, P. Li, Y. Jiang, and L.-R. Dai, “Improving Aggregation and Loss Function for Better Embedding Learning in End-to-End Speaker Verification System,” in Proc. Interspeech, 2019, pp. 361–365.
  19. D. Povey, G. Cheng, Y. Wang, K. Li, H. Xu, M. Yarmohammadi, and S. Khudanpur, “Semi-orthogonal low-rank matrix factorization for deep neural networks,” in Proc. Interspeech, 2018, pp. 3743–3747.
  20. D. Snyder, G. Chen, and D. Povey, “MUSAN: A music, speech, and noise corpus,” 2015.
  21. T. Ko, V. Peddinti, D. Povey, M. L. Seltzer, and S. Khudanpur, “A study on data augmentation of reverberant speech for robust speech recognition,” in Proc. ICASSP, 2017, pp. 5220–5224.
  22. D. S. Park, W. Chan, Y. Zhang, C.-C. Chiu, B. Zoph, E. D. Cubuk, and Q. V. Le, “SpecAugment: A simple data augmentation method for automatic speech recognition,” in Proc. Interspeech, 2019.
  23. L. N. Smith, “Cyclical learning rates for training neural networks,” in IEEE WACV, 2017, pp. 464–472.
  24. D. Kingma and J. Ba, “Adam: A method for stochastic optimization,” Proc. ICLR, 2014.
  25. X. Xiang, S. Wang, H. Huang, Y. Qian, and K. Yu, “Margin matters: Towards more discriminative deep neural network embeddings for speaker recognition,” 2019.
  26. Z. N. Karam, W. M. Campbell, and N. Dehak, “Towards reduced false-alarms using cohorts,” in 2011 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP), 2011, pp. 4512–4515.
  27. S. Cumani, P. Batzu, D. Colibro, C. Vair, P. Laface, and V. Vasilakakis, “Comparison of speaker recognition approaches for real applications,” in Proc. Interspeech, 2011, pp. 2365–2368.
  28. H. Zeinali, K. A. Lee, J. Alam, and L. Burget, “Short-duration speaker verification (SdSV) challenge 2020: the challenge evaluation plan,” 2019.
  29. J. Thienpondt, B. Desplanques, and K. Demuynck, “Cross-lingual speaker verification with domain-balanced hard prototype mining and language-dependent score normalization,” in Proc. Interspeech, 2020.

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Unity之c#专题篇】—核心章题单实践

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:uni…

电脑开关机-第14届蓝桥杯省赛Scratch初级组真题第1题

[导读]:超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第130讲。 电脑开关机,本题是2023年5月7日举行的第14届蓝桥杯省赛Scratch图形化编程初级组真题第1题&#…

flstudio21有什么新功能,主题随心换,苹果M2/1家族芯片原生支持

FL Studio 21推出 – 新功能和改进。如果您从事音乐制作,那么您不可能没有听说过 FL Studio,或者很可能已经使用过这个音乐程序。好了,新版本的 FL Studio 21 DAW已经准备好向公众发布了。Image-line 正在为 2023 年的大型揭幕准备最终细节。…

go 源码解读 - sync.WaitGroup

go version 1.19.7 在 Go 语言中,sync.WaitGroup 是一个并发编程的同步工具,用于等待一组 Goroutine 执行完毕。 当需要等待多个 Goroutine 完成任务后才能执行下一步操作时,我们可以使用 sync.WaitGroup 实现协程间的同步。它提供了 Add()…

测试:概念篇

目录 简单介绍测试 我们先简单的介绍一下测试工程师 简单来看看测试和开发的区别 测试的基本概念 什么是需求 BUG 的概念 测试用例 什么是测试用例? 为什么有测试用例 测试周期 开发模型 瀑布模型: 螺旋模型: 敏捷软件开发 V …

PostgreSQL 查找重复数据(二)

创建表和测试数据: -- DROP TABLE IF EXISTS people; CREATE TABLE people (id integer GENERATED ALWAYS AS IDENTITY PRIMARY KEY,name varchar(50) NOT NULL,email varchar(100) NOT NULL );INSERT INTO people(name, email) VALUES (张三, zhangsantest.com),(李…

操作系统考试复习-—第四章 分段式 段页式存储方式

分段从存储管理方式:一方面是通常的程序都可以分为若干段,另一方面是实现和满足信息共享,信息保护,动态链接以及信息的动态增长等需要。也都是以段为基本单位实现的。所以说,分段存储管理方式更符合用户和程序员多方面…

JWT认证

一、什么是JWT 官网地址: https://jwt.io/introduction/ jsonwebtoken(JWT)是一个开放标准(rfc7519),它定义了一种紧凑的、自包含的方式,用于在各方之间以JSON对象安全地传输信息。此信息可以验证和信任&…

华为nqa实验拓扑案例

bqa是一种实时的网络性能探测和统计技术,可以对响应时间、网络抖动、丢包率等网络信息进行统计。如图1所示,接口备份与NQA联动功能配置相对简单,只需在本端RouterA上配置NQA测试例,并在RouterA的备份接口上配置接口备份与NQA联动&…

自定义组件中如何注入Spring底层的组件

1.概述 自定义的组件要想使用Spring容器底层的一些组件,比如ApplicationContext(IOC容器)、底层的BeanFactory等等,那么只需要让自定义组件实现XxxAware接口即可。此时,Spring在创建对象的时候,会调用XxxA…

搞懂 API,API 常见技术使用场景分享

API(应用程序编程接口)是一种允许软件应用程序之间相互交互和通信的技术。以下是API常用的使用场景: 应用程序开发 API通常被用于网站或应用程序的开发中,以便在不同平台、语言及数据库之间获取数据或进行消息传递。例如&#xff…

探索数字化转型新道路!流辰信息微服务与您一起创未来!

科技在进步,社会在发展,办公自动化也在高速发展中。数字化转型是当下企业获得长久发展的趋势之一,在信息瞬间万变的社会中,谁掌握了核心技术,谁能与时代同步,谁就能开启新的康庄大道,谁就能在转…

VS2017配置Qt——超详细步骤教学(看完不会算你狠)

一、环境要求 visual studio 2017 vsaddin Qt14.1 mysql 注意mysql环境与msvc2017编译器环境保持一致。 mysql32位 配 msvc2017 32位 或 mysql64位 配 msvc2017 64位 注意:环境不一致会导致软件运行错误,为了避免这些错误,要将…

第1章计算机系统漫游之 “源代码的编译与执行” 及 “操作系统管理硬件”

文章目录 1、信息就是位上下文2、程序被其他程序翻译成不同的格式3、了解编译系统如何工作的益处4、处理器读并解释储存在存储器中的指令4.1 系统的硬件组成4.2 执行 hello 程序 5、高速缓存6、形成层次结构的存储设备7、操作系统管理硬件7.1 进程7.2 线程7.3 虚拟存储器7.4 文…

docker容器内使用cat命令修改文件

有时候docker容器内部没装vi 或vim命令,无法使用vi来修改文件 可以使用cat命令来查看文件 cat 主要功能一次显示整个文件:cat filename 从键盘创建一个文件:cat > filename 只能创建新文件,不能编辑已有文件 将几个文件合并为一个文件:cat file1 file2 > fi…

最新黄金市场价格分析之干掉调整浪

等待的过程无疑是最令人心烦的。各位朋友应该试过,等待自己的朋友、亲人,等等结果,等待成绩公布等等。但是等待是我们干任何事都必不可少的过程,是我们缓冲、蓄力的阶段。最新黄金市场价格分析中的等待,体现在调整浪的…

Python心经(3)

这一节总结点demo和常用知识点 目录 有关字符串格式化打印的 lambda匿名函数,,将匿名函数作为参数传入 文件读写 生成器 python的装饰器 简单的网站代码: 有关三元运算 推导式: 新浪面试题: 有关面向对象里…

SpringBoot项目中一些常用的,工具类

推荐多使用这个: Hutool参考文档Hutool,Java工具集https://hutool.cn/docs/#/core/%E9%9B%86%E5%90%88%E7%B1%BB/%E9%9B%86%E5%90%88%E5%B7%A5%E5%85%B7-CollUtil?id%e4%bb%8b%e7%bb%8d 1:断言 断言是一个逻辑判断,用于检查不应…

芯片封装技术(三)

Interposer 是一种用于连接芯片的中间层技术,它的基底通常是一块硅基底,而硅基底也是 Substrate 的一种。因此,Interposer 与 Substrate 有一定的关系。对于RDL Interposer来说,Si Interposer的信号布线密度进一步提高&#xff0c…

[Linux] Linux文件系统

🥁作者: 华丞臧. 📕​​​​专栏:【LINUX】 各位读者老爷如果觉得博主写的不错,请诸位多多支持(点赞收藏关注)。如果有错误的地方,欢迎在评论区指出。 文章目录 一、Linux文件系统1.1 磁盘1.2 inode1.3 软硬…