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

Towards a Rigorous Evaluation of Time-series Anomaly Detection(论文翻译)

1 Introduction

  随着工业4.0加速系统自动化,系统故障的后果可能会产生重大的社会影响(Baheti和Gill 2011; Lee 2008; Lee,Bagheri和Kao 2015)。为了防止这种故障,检测系统的异常状态比以往任何时候都更加重要,并且正在以异常检测(AD)的名义进行研究。与此同时,深度学习在对从大型系统的众多传感器和执行器收集的多变量时间序列数据进行建模方面表现出了有效性(Chalapathy and Chawla 2019)。因此,各种时间序列AD(TAD)方法已经广泛采用深度学习,并且它们中的每一种都通过报告比之前的方法更高的F1分数来证明其自身的优越性(Choi et al. 2021年)。对于一些数据集,报告的F1得分超过0.9,这给今天的TAD能力留下了令人鼓舞的印象。
  然而,大多数目前的TAD方法测量F1评分后,应用一个特殊的评价协议命名为点调整(PA),由Xu等人提出。(Audibert et al. 2020;沈,李,和郭2020; Su等人,2019)。PA的工作原理如下:如果连续异常段中的至少一个时刻被检测为异常,则认为整个段被正确地预测为异常。典型地,F1分数是用调整的预测(在下文中由F1PA表示)来计算的。如果在没有PA的情况下计算F1分数,则将其表示为F1。PA协议的提出是基于在异常期间内的单个警报足以采取系统恢复的措施。它已经成为TAD评估中的基本步骤,并且以下一些研究仅报道了F1PA而没有F1(Chen et al. 2021年)。较高的F1PA已指示较好的检测能力。
  然而,PA有一个高估模型性能的可能性很大。典型的TAD模型产生通知输入异常程度的异常分数,并且如果该分数高于阈值则预测异常。使用PA,来自随机生成的异常评分的预测和良好训练的模型的预测变得相同,如图1-(a)所示。
在这里插入图片描述

图1:(a)PA使不同的异常评分难以区分。黑线、灰色区域和虚线分别指示异常分数、GT异常段和TAD阈值。在应用PA之后,针对信息性和随机异常分数的预测退化为相同的调整后的预测(红色)。

  黑色实线表示两种不同的异常分数;上面的线示出了来自良好训练的模型的信息分数,而下面的线是随机生成的。阴影区域和虚线分别指示地面实况(GT)异常段和TAD阈值。信息分数(上图)是理想的,因为它们仅在GT段期间较高。相比之下,随机生成的异常评分(下图)在GT段内仅超过阈值一次。尽管存在差异,但PA之后的预测变得不可区分,如红线所示。如果随机异常分数可以产生与熟练检测模型一样高的F1PA,则难以得出具有较高F1PA的模型比其他模型表现更好的结论。我们在第5节中的实验结果表明,随机异常分数可以推翻大多数最先进的方法(图1-(B))。
在这里插入图片描述
图1:(b)现有的方法未能超过随机生成的异常分数的F1PA(左),并且即使当PA被禁止用于WADI数据集时,也没有显示出对新提出的基线(右)的改进。
  出现的另一个问题是PA是否是TAD方法评估中的唯一问题。到目前为止,只报道了绝对F1,没有试图建立基线和相对比较。如果二元分类器的准确率为50%,则尽管是明显较大的数字,但它与随机猜测没有太大区别。同样,应讨论TAD的适当基线,并应根据与基线相比的改进来评估未来的方法。根据我们的观察,现有的TAD方法似乎没有得到显着的改善,本文提出的基线。此外,一些方法未能超过它。我们对一个基准数据集的观察总结在图1-(b)的右侧。
  在本文中,我们提出了一个问题,是否目前的TAD方法,声称带来显着的改进进行了适当的评估,并提出了第一次严格的评估TAD的方向。我们的贡献总结如下:

  • 我们发现,PA,一个奇特的评估协议,大大高估了现有方法的检测性能。
  • 我们表明,在没有PA的情况下,现有方法在基线上没有(或大多数是微不足道的)改进。
  • 基于我们的发现,我们提出了一个新的基线和评估协议,用于严格评估TAD。

2 背景

2.1 Types of anomaly in time-series signals(时间序列信号中的异常类型)

  各种类型的异常存在于数据集中(Choi et al. 2021年)。上下文异常表示具有与正常信号不同形状的信号。集体异常指示在一段时间内累积的少量噪声。点异常指示由于信号值的快速增加或减少而与预期范围的暂时和显著偏差。点异常是目前TAD数据集中最主要的类型。

2.2 Unsupervised TAD(无监督的网络)

  典型的AD设置假定在训练时间期间仅可访问正常数据。因此,无监督方法是TAD最合适的方法之一,TAD训练模型以仅在正常信号中学习共享模式。最终目标是根据输入的异常程度将不同的异常分数分配给输入,即,分别用于正常和异常输入的低异常分数和高异常分数。基于重构的AD方法训练模型,以最小化正常输入与其重构之间的距离。在测试时间的异常输入导致大距离,因为它是难以重建的。距离或重建误差用作异常分数。基于预测的方法训练模型以预测将在正常输入之后到来的信号,并采取地面实况和预测信号之间的距离作为异常分数。每个类别的详细示例请参阅附录。

2.3 Assessment of TAD evaluation(评估可持续发展评价)

  已经有几种方法指出了当前TAD评估中的缺陷。(Wu和Keogh 2021)提出了基准TAD数据集的局限性,并表明简单的检测器,所谓的单线性,对于一些数据集是足够的。他们还提供了几个合成数据集。(Lai等人,2021)为异常类型(例如,点与模式),并引入了根据新标准合成的新数据集。相比之下,我们提出了TAD评估中的陷阱:PA高估的风险和基线的缺失以及解决方案。如果陷阱没有解决,它是不可能的,以评估是否改进的TAD方法是显着的,即使与上述论文提出的更好的数据集。

3 Pitfalls of the TAD evaluation(评估的陷阱)

3.1 Problem formulation(问题公式化)

  首先,我们将在时间T期间从N个传感器观察到的时间序列信号表示为X = {x1,…xT},xt ∈ RN。作为常规方法,其被归一化并分成一系列窗口W = {w1,…wT-τ+1},其中wt = {xt,…,xt+τ−1},τ是窗口大小。仅针对测试数据集给出地面真值二进制标签yt ∈ {0,1},指示信号是否为异常(1)或不是(0)。TAD的目标是预测测试数据集中所有窗口的异常标签。通过将异常分数A(wt)与如下给出的阈值δ进行比较来获得标签:
在这里插入图片描述
  A(wt)的示例是原始输入与其重构版本之间的均方误差(MSE),其定义如下:
在这里插入图片描述
  其中,w = fθ(wt)表示来自用θ参数化的重建模型fθ的输出。标记后,精确度(P)、召回率(R)和F1得分计算如下:
在这里插入图片描述  其中TP、FP和FN分别表示真阳性、假阳性和假阴性的数量。
  所述异常测试数据集可以包含持续几个时间步长的多个异常段。我们将S表示为M个异常段的集合;即,S = {S1,…,SM},其中Sm = {Sm,.,tm_s和tm_e分别表示Sm的开始和结束时间。如果Sm中至少有一次异常评分高于δ,则PA将所有t ∈ Sm的Δ yt调整为1。使用PA,Eq.1变更如下:
在这里插入图片描述
  F1PA表示使用调整后的标签计算的F1分数。

3.2 Random anomaly score with high F1PA(F1PA高的随机异常评分)

  在本节中,我们证明了PA协议高估了检测能力。我们从抽象分析的P和R的方程。3,并且我们在数学上表明,随机生成的A(wt)可以实现接近1的高F1PA值。根据等式3,因为F1评分是P和R的调和平均值,所以它还取决于TP、FN和FP。如等式1所示。4、PA增加TP,降低FN,而维持FP。因此,在PA之后,P、R以及因此F1分数只能增加。
  接下来,我们证明F1PA可以很容易地接近1。首先,R被重述为条件概率,如下所示:
在这里插入图片描述
  让我们假设A(wt)是从均匀分布U(0,1)中提取的。我们使用0 ≤ δ θ ≤ 1来表示该假设的一个阈值。如果只存在一个异常段,即,S = {{ts,…,te}},PA之后的R可以表示如下,参考Eq.4:
在这里插入图片描述
  其中,γ = Pr(t ∈ S)是测试数据集异常率,Pr(A(wt)< δ ε)= δ ε ε 0 1 = δ ε。
在这里插入图片描述
  关于更一般化的证明,请参阅附录。数据集的异常率γ通常在0到0.2之间; te-ts也由数据集决定,在基准数据集中通常在100到5,000之间。图2描绘了当γ固定为0.05时,在不同的te−ts下,F1 PA随δ ε的变化。如图所示,除了异常段长度较短的情况外,我们总是可以通过改变δ ε来获得接近1的F1 PA。
在这里插入图片描述
图2:均匀随机异常分数随不同te − ts的δ变化的情况下的F1PA。如果异常段相当长,也就是说,如果te −ts足够大,则随着δ的增加,F1PA接近1。

3.3 Untrained model with comparably high F1(具有较高F1的未训练模型)

  本节显示从未经训练的模型获得的异常分数在一定程度上是信息性的。深度神经网络通常用从高斯分布N 0,σ2中提取的随机权重初始化,其中σ是通常小于1。在没有训练的情况下,模型的输出接近于零,因为它们也遵循零均值高斯分布。基于重建或基于预测的方法的异常分数通常被定义为输入和输出之间的欧几里得距离,在上述情况下,该距离与输入窗口的值成比例:
在这里插入图片描述
  在点异常的情况下,特定传感器值突然增加。这导致比正常窗口更大的Δ Wt Δ 2的幅度,这直接与GT异常的高A(wt)相关。第5节中的实验结果表明,由Eq.8与目前的方法相当。它还表明,当窗口大小变得更长时,F1增加得更多。

4 Towards a rigorous evaluation of TAD(严格评估可持续发展)

4.1 New baseline for TAD(新的基线)

  对于分类任务,基线准确度通常被定义为随机猜测的准确度。可以说,只有当分类精度超过该基线时才有改善。类似地,TAD不仅需要与现有方法进行比较,还需要与基线检测性能进行比较。因此,基于第3.3节的发现,我们建议建立一个新的基线,其中F1是从具有简单架构的随机初始化重建模型的预测中测量的,例如包含单层LSTM的未经训练的自动编码器。可替代地,异常分数可以被定义为输入本身,这是等式1的极端情况。8,此时模型始终输出零,而不管输入。如果新TAD模型的性能未超过该基线,则应重新检查模型的有效性。

4.2 New evaluation protocol PA%K(新评估方案PA%K)

  在上一节中,我们证明了PA有很大的可能性高估检测性能。没有PA的F1可以立即解决高估。在这种情况下,建议按照第4.1节中的介绍设定基线。然而,根据测试数据分布,F1可能会意外地低估检测能力。事实上,由于不完全的测试集标记,一些标记为异常的信号与正常信号共享更多的统计信息。即使在一段时间内间歇地插入异常,对于该时段中的所有t,yt = 1。
  我们使用t分布随机邻居嵌入(t-SNE)(货车der Maaten和欣顿2008)进一步研究了这个问题,如图3所示。t-SNE由安全水处理(SWaT)的测试数据集生成(Goh等人,2016)。蓝色和橙子分别表示正常和异常样品。大多数异常形成了一个远离正态数据分布的独特的聚类。然而,一些异常窗口比异常更接近正常数据。对应于绿色和红色点的信号的可视化分别在(B)和(c)中描述。虽然两个样本都被注释为GT异常,但(b)与(a)的正常数据相比(c)共享更多模式。仅仅因为模型不能检测到诸如(b)的信号而得出模型性能有缺陷的结论可能会导致低估检测能力。

  因此,我们提出了一种替代的评估协议PA%K,它可以减轻F1PA的高估效果和低估F1的可能性。请注意,它不是建议取代现有的TAD指标,而是与它们沿着使用。PA%K的思想是仅当Sm中正确检测到的异常的数量与其长度的比率超过PA%K阈值K时才将PA应用于Sm。PA%K修改Eq.4如下:
在这里插入图片描述
  其中表示Sm的大小(即,tm-tm)和K可以基于现有的知识在0和100之间手动选择。例如,如果测试集标签是可靠的,则允许更大的K。如果用户想要去除对K的依赖性,建议测量通过将K从0增加到100获得的FlPA *k的曲线下面积。

5 Experimental results(实验结果)

5.1 Benchmark TAD datasets(基准测试数据集)

  在本节中,我们介绍了五个最广泛使用的水处理基准数据集的列表,如下所示:

安全水处理(SWaT)(Goh et al. 2016):

  SWaT数据集是在11天内从一个由51个传感器组成的缩小规模的水处理测试平台上收集的(Mathur和Tippenhauer 2016)。在过去的4天里,使用不同的攻击方法注入了41个异常,而在前7天只生成了正常数据。

配水试验台(WADI)(Ahmed,Palleti和Mathur 2017):

  WADI数据集是从一个简化的城市配水系统中获取的,该系统具有123个传感器和执行器,运行了16天。在前14天中只收集正常数据,其余两天包含异常数据。测试数据集共有15个异常段。

服务器机器数据集(SMD)(Su et al. 2019):

  SMD数据集是从28台服务器机器和38个传感器收集的,持续10天;前5天仅出现正常数据,最后5天间歇性注入异常。SMD数据集的结果是每台机器28个不同型号的平均值。

火星科学实验室(MSL)和土壤水分主动被动(SMAP)(Hundman et al. 2018):

  MSL和SMAP数据集是从NASA航天器收集的真实世界数据集。这些是来自航天器监测系统的意外异常(伊萨)报告的异常数据。与其他数据集不同,训练数据中包含未标记的异常,这使得训练变得困难。统计数据总结见表1
在这里插入图片描述

5.2 Evaluated methods(评价方法)

  下面,我们介绍了最近提出的7种代表性的方法和第3节中研究的3种情况。

USAD(Audibert et al. 2020)

  代表无监督异常检测,它在两个阶段的训练方案下训练两个自动编码器,包括一个共享编码器和两个单独的解码器:自动编码器训练阶段和对抗训练阶段。

DAGMM(Zong et al. 2018)

  代表深度自动编码高斯混合模型,该模型采用自动编码器来产生表示向量并将其馈送到高斯混合模型。它使用估计的样本能量作为重建误差;高能量表示高异常。

LSTM-VAE

  代表了一种基于LSTM的变分自动编码器,该编码器采用变分推理进行重构。

OmniAnomaly(Su et al. 2019)

  应用VAE将时间序列信号建模为随机表示,如果给定输入的重建可能性低于阈值,则会预测异常。它还定义了重建概率的个别功能的归因得分和量化的解释。

MSCRED(Zhang et al. 2019)

  代表了一种多尺度卷积递归编码器-解码器,包括卷积LSTM,用于重建表征多个系统级别的输入矩阵,而不是输入本身。THOC(Shen,Li,and Kwok 2020)表示一个时间层次单类网络,它是一个多层扩张递归神经网络和一个层次深度支持向量数据描述。

GDN(Deng and Hooi 2021)

  表示学习传感器关系图以检测异常与学习模式的偏差的图偏差网络。
  例一。随机异常评分对应于第3.2节中描述的情况。F1分数用从均匀分布U中抽取的随机生成的异常分数来测量,即,A(wt)= 0,1。
  案例2.作为异常分数的输入本身表示假设fθ(wt)= 0而不考虑wt的情况。这等于Eq.8.因此,A(wt)= 10wt 102。
  案例3.来自随机化模型的异常评分对应于等式其中η表示来自随机化模型的小输出。参数在从高斯分布N(0,0.02)初始化之后被固定。

5.3 Correlation between F1PA and F1(F1PA与F1的相关性)

  F1是检测性能的最保守指标。因此,如果F1PA可靠地表示检测能力,则它应该与F1至少具有一些相关性。图4绘制了SWaT和WADI的F1 PA和F1,如对USAD、DAGMM、LSTMVAE、OmniAnomaly和GDN的原始研究所报告的。该图还包括情况1-3的结果。值得注意的是,考虑到只有一部分数据集和方法一起报告了F1PA和F1,我们只绘制了它们。对于SWaT,Pearson相关系数(PCC)和Kendall秩相关系数(KRC)分别为-0.59和0.07。对于WADI,PCC和KRC分别为0.41和0.43。然而,这些数字不足以确保相关性的存在,并证实比较仅使用F1PA的方法的优效性可能存在检测性能评估不当的风险。
在这里插入图片描述
图4:SWaT和WADI数据集上现有方法的F1PA和F1之间的相关性。图中显示了肯德尔等级相关(KRC)和皮尔逊相关系数(PCC)

5.4 Comparison results(比较结果)

  在这里,我们将AD方法的结果与情况1-3进行比较。应当注意,对于情况1和2,异常分数是直接生成的,而不需要模型推断。对于案例3,我们采用了最简单的具有LSTM层的编码器-解码器架构。情况2和3的窗口大小τ被设置为120。对于包括随机性的实验,例如案例1和案例3,我们用五种不同的种子重复它们并报告平均值。对于现有的方法,我们使用原始论文中报告的最佳数字和官方复制的结果(Choi et al. 2021);如果没有可用的分数,我们参考官方提供的代码复制它们。请注意,我们没有应用任何预处理,例如早期时间步长删除或下采样。在以前的论文中没有提供MSL、SMAP和SMD的F1,因此它们都是复制的。值得注意的是,我们在论文中建议的范围内搜索最佳超参数,并且我们没有应用下采样。所有阈值均从产生最佳分数的阈值获得。有关实施的进一步详情载于附录。结果示于表2中。再现的结果标记为t。粗体和下划线数字分别表示最佳和次佳结果。向上箭头(↑)显示以下情况的结果:(1)F1 PA高于情况1,(2)F1高于情况2或3,以较大者为准。
在这里插入图片描述
表2:各种方法的F1评分。†表示再现结果。下面三行表示以下情况:情况1。随机异常评分,病例2。输入自身作为异常评分,案例3。来自随机化模型的异常评分。详细解释请参阅手稿。粗体和下划线的情况分别表示最佳和次佳。在下列情况下标记↑:(1)F1 PA高于情况1,(2)F1高于情况2或3。
  显然,随机生成的异常分数(情况1)不能检测异常,因为它不反映关于输入中的异常的任何内容。相应地,F1相当低,这清楚地表明检测能力不足。然而,当应用PA协议时,情况1似乎产生远远超出现有方法的最先进的F1 PA,除了SMD。如果结果仅被提供有PA,如在MSL、SMAP和SMD的情况下,则区分该方法是否成功地检测到异常或者其是否仅输出与输入无关的随机异常分数是不可能的。特别是,MSL和SMAP的F1非常低;这意味着很难对它们进行建模,因为它们都是真实世界的数据集,并且训练数据包含异常。然而,F1 PA似乎相当高,造成了一种错觉,即这些数据集的异常被很好地检测到。
  SMD的Case 1的F1值低于其他数据集,并且有以前的方法超过它,这可能是由于SMD测试数据集的组成。根据等式如图6和图7所示,F1 PA随三个参数而变化:测试数据集中的异常率(γ)、异常段的长度(te-ts)和阈值(δ)。与其他数据集不同,SMD的异常率非常低,如表1所示。此外,异常段的长度相对较短; 28台机器的平均长度为90,不像其他数据集从数百到数千不等。这类似于图2中的最低情况,图2示出了在这种情况下可实现的最大F1 PA仅约为0.8。因此,我们可以得出结论,PA的高估效果取决于测试数据集的分布,其效果变得不太明显,异常段越短。
  在所有数据集中,现有方法的F1大多低于案例2和案例3,这意味着目前提出的方法可能相对于基线取得了微小的进步,甚至没有进步。只有GDN始终超过所有数据集的基线。情况2和情况3的F1取决于输入窗口的长度。如果窗口较长,F1基线会变得更大。我们在案例2中使用从1到250的各种窗口长度进行了实验,并在图5中描绘了结果。对于SWaT、WADI和SMAP,随着τ的增加,F1在短暂下降后开始增加。出现这种增加是因为较长的窗口更可能包含更多的点异常,从而导致窗口的高异常分数。如果τ变得太大,F1饱和或退化,可能是因为过去只包含正常信号的窗口意外地包含异常信号。
在这里插入图片描述
图5:不同窗口大小(τ)的F1。随着τ的增加,F1在短暂下降后大部分增加。

5.5 Effect of PA%K protocol

  为了研究PA%K如何缓解PA的高估效应和F1的低估趋势,我们观察了F1PA%K随不同PA%K阈值K的变化。图6示出了当K从0到100以10的增量改变时,来自情况1的SWaT和完全训练的编码器-解码器的F1PA%K。K = 0和K = 100的F1PA%K值分别等于原始F1PA和F1。无论K的值如何,经过良好训练的模型的F1PA%K都将显示恒定的结果。相应地,经训练的编码器-解码器(橙子)的F1PA%K显示出一贯高的F1PA%K。相反,病例1(蓝色)的F1PA%K在K增加时迅速降低。我们还建议测量曲线下面积(AUC)以减少对K的依赖性。在这种情况下,对于训练的编码器-解码器和情况1,AUC分别为0.88和0.41;这表明PA%K清楚地将前者与后者区分开来,而不管K如何。
在这里插入图片描述
图6:具有PA%K和不同K的F1评分。如果K = 0,它等于F1PA,如果K = 100,它等于F1。

6 Discussion

  在本文中,我们已经证明,目前的评估有两个方面的陷阱:(1)由于PA高估了检测性能,我们不能确保具有较高的F1 PA的方法确实具有更好的检测能力;(2)结果只与现有的方法进行了比较,而不是对基线。在适当评估目前的成就时,可以开发出更好的异常检测器。在本节中,我们为未来的可持续发展评估提出了几个方向。
  PA的动机,即,第一个陷阱的来源,源于测试数据集标记过程的不完整性,如4.2节所述。一个彻底的解决方案是开发一个新的基准数据集,以更细粒度的方式进行注释,以便时间步长标签变得可靠。由于细粒度注释需要大量资源,因此通常不可行,F1PA%K可以是一个很好的替代方案,可以在不修改任何额外数据集的情况下减轻高估。请注意,PA%K是一种评估协议,可应用于F1分数以外的各种指标。对于第二个问题,重要的是设置一个基线作为案例2和案例3中未训练模型的性能,并测量相对于它的相对改进。窗口大小应该通过考虑其对基线的影响来仔细确定,如第5.4节所述。
  此外,在不访问测试数据集的情况下预定义阈值在真实的世界中通常是不切实际的。相应地,视野中的许多AD方法使用受试者工作特征(AUROC)曲线下面积进行自我评估(Yi和Yoon 2020)。相比之下,现有的F1方法在调查测试数据集之后设置阈值,或者简单地使用产生最佳F1的最佳阈值。因此,检测结果很大程度上取决于阈值的选择。具有降低依赖性的其他指标,如AUROC或精确召回率(AUPR)曲线下的面积将有助于严格的评估。即使在这种情况下,所提出的基线选择方法是有效的。由于PA%K是一个协议,它也可以用于上述指标。

7 Conclusion

  在本文中,我们首次表明,应用PA可以严重高估TAD模型的能力,这可能无法反映真实的建模性能。我们还提出了一个新的TAD基线,并表明只有少数方法在这方面取得了显着的进步。为了减轻高估的PA,我们提出了一个新的PA%K协议,可以应用于现有的指标。最后,我们提出了几个方向,严格评估TAD方法,包括基线选择。我们希望我们的研究有助于澄清目前的TAD方法的潜力,并导致TAD在未来的改进。

8 Acknowledgement

  这项工作得到了韩国政府(MSIT)资助的信息和通信技术规划与评估研究所(IITP)的资助[No.20210-02068,人工智能创新中心,No.20210-01343,人工智能研究生院计划(首尔国立大学)],韩国国家研究基金会(NRF)赠款,由韩国政府资助(科学和信息通信技术部)[2018 R1 A2 B3001628,2019 R1 G1 A1003253],2021年的Brain Korea 21 Plus项目,通过HMC-SNU AI联盟基金在现代汽车公司的AIR实验室(AI研究实验室),以及三星电子
  
  
  
  

相关文章:

Towards a Rigorous Evaluation of Time-series Anomaly Detection(论文翻译)

1 Introduction 随着工业4.0加速系统自动化&#xff0c;系统故障的后果可能会产生重大的社会影响&#xff08;Baheti和Gill 2011; Lee 2008; Lee&#xff0c;Bagheri和Kao 2015&#xff09;。为了防止这种故障&#xff0c;检测系统的异常状态比以往任何时候都更加重要&#xff…...

理解Python装饰器

本文将从多个方面对Python装饰器进行详细的阐述&#xff0c;并给出完整的代码示例。 一、装饰器的概念 装饰器是Python中非常重要的概念&#xff0c;它可以在不修改函数本身的情况下对函数的功能进行扩展或修改。装饰器本质上是一个函数&#xff0c;它接收一个函数作为参数&a…...

VR智慧景区,为游客开启智慧旅游新时代

近年来&#xff0c;文旅部加强了5G、VR虚拟技术等在文旅产业行业的运用&#xff0c;随着科技的不断发展&#xff0c;VR技术的运用越来越广泛&#xff0c;VR智慧景区作为一种全新的旅游方式&#xff0c;也渐渐的受到了人们广泛的关注&#xff0c;它可以让人们足不出户就欣赏到各…...

蓝桥杯 Java 青蛙过河

import java.util.Scanner; // 1:无需package // 2: 类名必须Main, 不可修改/**二分法从大&#xff08;n&#xff09;到小找足够小的步长前缀和记录每个位置的前面有的总石头数&#xff08;一个石头表示可以容纳一个青蛙&#xff0c;一位置有多少个石头hi就是多少&#xff09;&…...

雷达图应该如何去绘制?

雷达图&#xff08;又称为蜘蛛网图、星形图&#xff09;是一种用来显示多变量数据的图表&#xff0c;它可以直观地展示出数据在多个维度上的表现。雷达图中&#xff0c;每个轴代表一个维度&#xff0c;所有的轴都从中心点射出并均匀分布在圆周上&#xff0c;形成一个星形。每个…...

1024 蓝屏漏洞攻防战(第十九课)

1024 蓝屏漏洞攻防战(第十九课) 思维导图 一 永恒之蓝的介绍 漏洞为外界所知源于勒索病毒的爆发,该病毒利用NSA(美国国家安全局)泄露的网络攻击工具 永恒之蓝( EternalBlue )改造而成,漏洞通过TCP的445和139端口,利用SMB远程代码执行漏洞,攻击者可以在目标系统上执行…...

短视频矩阵系统软件源码

短视频矩阵系统软件源码 视频成为获得免费流量最便宜的渠道&#xff0c;平台给所有视频最基础的保底流量。如果按照一个视频最低500流量计算&#xff0c;5个账户就是2500的流量&#xff0c;200个视频就是50W流量&#xff0c;如果从其他渠道获得50W流量是个很困难的事情。短视频…...

内网穿透的应用-如何通过TortoiseSVN+内网穿透,实现公网提交文件到内网SVN服务器?

文章目录 前言1. TortoiseSVN 客户端下载安装2. 创建检出文件夹3. 创建与提交文件4. 公网访问测试 前言 TortoiseSVN是一个开源的版本控制系统&#xff0c;它与Apache Subversion&#xff08;SVN&#xff09;集成在一起&#xff0c;提供了一个用户友好的界面&#xff0c;方便用…...

有没有PC端的配音软件推荐?(免下载)

配音软件还是电脑上使用最方便&#xff0c;而且电脑上可以使用的配音软件也非常多。只是你平时使用的不多&#xff0c;所有想用的时候才会找不到&#xff0c;对于经常使用配音软件的人来说&#xff0c;那真的太多了。今天给大家推荐一个免下载的配音网站&#xff0c;微信扫码即…...

clickhouse

官方链接 <insert id"insertTable" parameterType"com.ioc.orm.ck.model.TableModel">insert into table_name<trim prefix"(" suffix")" suffixOverrides","><if test"ts ! null">ts,</if…...

linux下创建文件夹软链接

软链接&#xff1a; 软链接是Linux下常用的一种共享文件方式、目录的方式&#xff0c;这种方式类似于Windows下的快捷方式。一般一个文件或者目录在不同的路径都需要的时候&#xff0c;可以通过创建软链接的方式来共享&#xff0c;这样系统下面只有一份源文件、目录。另外&…...

常用的工具网站

1.免费的在线pdf解密网站&#xff1a;https://smallpdf.com/unlock-pdf 2.常用的梯子登录页面&#xff1a;https://3.akkcloud1.com/auth/login 3.chatgpt登录页面&#xff1a;https://chat.openai.com/auth/login 4.国外短信收发平台&#xff1a;https://sms-activate.org/cn/…...

号外!百度Comate代码助手全新上线SaaS服务 - 免费申请试用+深入教程解读!

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…...

AUTOSAR通信篇 - CAN网络通信(七:Nm)

文章目录 基础功能NM协调器功能NM协调器功能的适用性保持协调总线活动总线关闭的协调嵌套子总线的协调关闭定时器的计算同步用例1 – 同步指令同步用例2-同步启动同步用例3 -同步网络睡眠示例 唤醒和中止协调关闭外部的网络唤醒协调唤醒协调关闭的中止 部分网络功能PNC位向量过…...

CentOS 7 中安装Kafka

文章目录 安装JDK解压环境变量验证 安装ZooKeeper下载解压环境变量配置启动开放端口 安装Kafka下载解压配置启动 CentOS 7.6 JDK 1.8 ZooKeeper 3.5.7 Kafka 2.11-2.4.0 安装JDK 解压 # 解压 tar -xzvf jdk-8u181-linux-x64.tar.gz mv jdk1.8.0_181 /usr/local/jdk1.8环境变量…...

Centos 7 部署Docker CE和docker-compose教程

一、Docker CE 1、Docker CE 安装 ①、安装依赖包 yum install -y yum-utils device-mapper-persistent-data lvm2②、设置yum源 # 官方源&#xff08;二选一&#xff09; yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # 阿里源…...

【数据结构】模拟实现无头单向非循环链表

链表的概念 学过ArrayList后我们知道它的底层是用数组来存储元素的&#xff0c;是连续的存储空间&#xff0c;当我们要从ArrayList任意位置删除或插入元素时&#xff0c;我们要把后续整体向前或后移动&#xff0c;时间复杂度为O(n)&#xff0c;效率比较低&#xff0c;因此Arra…...

linux驱动开发学习001:概述

linux的内核源码编译后&#xff0c;会生成一个总的镜像。镜像加载到内存中运行他&#xff0c;就会启动内核。驱动属于内核代码的一部分&#xff0c;对驱动修改要重编整个内核&#xff0c;麻烦但驱动可以独立于内核镜像外&#xff0c;并能动态加载和卸载字符设备驱动&#xff0c…...

安全响应中心 — 垃圾邮件事件报告(10.13)

2023年10月 第二周 一. 样本概况 ✅ 案例1&#xff1a;DocuSign钓鱼 本周收到一封看似来自 DocuSign&#xff08;DocuSign 是一种在企业环境中广泛使用的电子协议管理平台&#xff09;的网络钓鱼电子邮件反馈。 如下图所示&#xff1a; 以上样本内容大体是说XX发送了一份文…...

扩散模型Diffusers Pipeline API使用介绍

1 关于Diffusers Pipeline 1.1 简介 大部分扩散模型包含多个独立训练的子模型和组件模块组合而成&#xff0c;例如StableDiffusion 有&#xff1a; 3个独立训练的子模型&#xff1a;Autoencoder、 Conditional Unet、CLIP text encoder调度器组件scheduler,CLIPImageProcesso…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode&#xff1a; 2.利用 authorizationCode 获取 accessToken&#xff1a;文档中心 3.获取手机&#xff1a;文档中心 4.获取昵称头像&#xff1a;文档中心 首先创建 request 若要获取手机号&#xff0c;scope必填 phone&#xff0c;permissions 必填 …...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录&#xff0c;不允许匿名访问&#xff0c;kefu只能访问/data/kefu目录&#xff0c;不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...

【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)

前言&#xff1a; 双亲委派机制对于面试这块来说非常重要&#xff0c;在实际开发中也是经常遇见需要打破双亲委派的需求&#xff0c;今天我们一起来探索一下什么是双亲委派机制&#xff0c;在此之前我们先介绍一下类的加载器。 目录 ​编辑 前言&#xff1a; 类加载器 1. …...