论文阅读:GLOBAL PROTOTYPE ENCODING FOR INCREMENTALVIDEO HIGHLIGHTS DETECTION

摘要:

视频亮点检测 (VHD) 是计算机视觉中的一个活跃研究领域,旨在在给定原始视频输入的情况下定位最吸引用户的片段。然而,大多数 VHD 方法都是基于封闭世界假设,即预先定义固定数量的高亮类别,并且所有训练数据都是预先可用的。因此,现有方法在增加高亮域和训练数据方面的可扩展性较差。为了解决上述问题,我们提出了一种名为全局原型编码 (GPE) 的新型视频亮点检测方法,通过参数化原型逐步学习以适应新领域。为了促进这一新的研究方向,我们收集了一个名为 LiveFood 的精细注释数据集,包括超过 5,100 个现场美食视频,由四个领域组成:烹饪、饮食、配料和展示。据我们所知,这是第一个在增量学习环境中探索视频亮点检测的工作,开辟了将 VHD 应用于实际场景的新领域,其中相关的亮点领域和训练数据都随着时间的推移而增加。我们通过广泛的实验证明了 GPE 的有效性。值得注意的是,GPE 在 LiveFood 上超越了流行的领域增量学习方法,在所有领域都实现了显着的 mAP 改进。代码和数据集将公开提供。

引言:

带有摄像头的便携式设备的普及极大地促进了在线视频的创作和传播。这些足够的视频数据作为相关研究的必要前提,例如。视频摘要 ,视频亮点检测 (VHD) 和视频时刻定位。目前,大多数VHD方法都是在封闭世界假设下开发的,这需要预先确定有多少种类型的视频高光种类,确定训练数据集的大小。然而,正如 Rebuffi 等人 (2017) 所述,自然视觉系统通过持续接收来自不同领域或类别的新数据在本质上是增量的。以美食视频为例,一开始可能会被吃东西的片段所吸引,但之后可能会对烹饪产生新的兴趣,想在同一视频中查看详细的烹饪步骤。这表明模型需要处理的目标集在开放世界中是灵活的。在这种实际设置下,所有现有的 VHD 方法都存在可扩展性问题:它们无法预测旧领域和添加新的领域,除非它们在完整数据集上重新训练模型。由于视频的训练成本过高,因此必须开发新的方法来处理上述增量学习问题。

从广义上讲,有两个主要障碍阻碍了增量 VHD 的发展:具有域注释的高质量 VHD 数据集和为此任务量身定制的强大模型。回想一下在 VHD 研究中广泛使用的现有数据集,包括 SumMe(Gygli 等人,2014),TVSum(Song 等人,2015 年)、Video2GIF(Gygli 等人,2016 年)、PHD(Garcia del Molino 和 Gygli,2018 年)和 QVHighlights(Lei 等人,2021 年),它们都有三个缺点:(1)只能访问视频帧的特征表示而不是原始视频,从而限制了更强大的端到端模型的应用; (2) 大多数数据集只有有限数量的短时长和粗糙注释的视频,不足以训练深度模型; (3) 它们都没有视频亮点域或类别标签,因此不能直接用于增量学习。为了弥合 VHD 和增量学习之间的差距,我们首先从直播视频中收集了一个高质量的美食数据集,即 LiveFood。它包含 5,100 多个精心挑选的视频,总时长 197 小时。四个领域都有很好的注释,即烹饪、饮食、配料和展示。这些相关但不同的域为增量 VHD 任务提供了一个新的测试平台。

图一
LiveFood 数据集。从上到下的行分别说明了原版剪辑、成分和演示的示例。

 为了解决这个新任务,我们提出了一个竞争模型:全局原型编码 (GPE),以逐步学习新的亮点概念,同时仍然保留在以前的视频域/数据中学到的知识。具体来说,GPE 首先使用 CNN 提取逐帧特征,然后使用变换器编码器将时间上下文聚合到每个帧特征,从而获得时间感知表示。此外,每一帧都按两组可学习原型分类:高亮原型和普通原型。通过这些原型,GPE 优化了 L2 度量下基于距离的分类损失,并通过将学习到的原型限制在新域中以接近先前观察到的原型来鼓励增量学习。我们系统地将 GPE 与 LiveFood 上的不同增量学习方法进行了比较。实验结果表明,GPE 在高亮检测精度 (mAP) 方面优于其他方法,训练效率更高,没有使用复杂的样本选择或复杂的重放方案,有力地证明了 GPE 的有效性。

本文的主要贡献总结如下:

(1)我们引入了一个名为增量视频亮点检测的新任务,它在实际场景中具有重要应用。收集了高质量的 LiveFood 数据集以促进这方面的研究。 LiveFood 包含超过 5,100 个精心挑选的高分辨率美食视频,为视频亮点检测和领域增量学习任务提供了一个新的测试平台。

(2)我们提出了一种用于解决增量 VHD 的新型端到端模型,即全局原型编码 (GPE)。 GPE 可以通过学习可扩展和参数化的高亮/普通原型,逐步识别新高亮域中的高亮和普通帧。与其他增量学习方法相比,GPE 实现了优越的性能,检测性能 (mAP) 平均提高了 1.57%。上述结果表明 GPE 可以作为未来研究的有力基线。

(3)我们提供了对 LiveFood 的全面分析以及拟议的 GPE 模型,以加深对两者的理解,并为未来的发展提供有益的见解。我们希望我们的工作能够激励更多的研究人员从事增量式 VHD 的工作,最终推动 VHD 在实际场景中的应用。

相关工作

视频亮点检测 (VHD) 是视频相关问题中的一项重要任务。这方面的研究大致可以分为两组,即基于排名的方法和基于回归的方法。 Yao et al (2016) 使用排序模型来学习亮点和非亮点之间的关系,为正片段分配更高的分数。 Saquil 等人 (2021) 利用多个成对排序器来捕获本地和全局信息。 Badamdorj 等人 (2021) 根据双模态(即视觉和音频流)为带注释的剪辑分配更高的分数。基于排名方法,许多工作旨在使用无监督技术或先验来减轻人工注释的昂贵成本,例如 (Xiong et al, 2019; Badamdorj et al, 2022)。与上述方法不同,基于回归的方法直接预测高光的位置。朱等(2021) 提出了基于锚点和无锚点的方法来预测开始和结束时间戳,以及亮点的置信度分数,从而避免了费力的手动设计后处理。 Moment-DETR (Lei et al, 2021) 使用转换器解码器根据不同的查询获取特定剪辑的时间戳。尽管上述现有方法提高了 VHD 任务的性能,但它们基本上忽略了 VHD 中增量学习的要求,这对于 VHD 的实际应用至关重要。现实中,大量的视频和新的兴趣正在迅速产生,因此要求 VHD 模型能够有效地处理不断增加的亮点域和数据。

增量学习 (IL) 备受关注,因为自然视觉系统本质上是增量的。增量学习要解决的主要问题是灾难性遗忘,表现为在学习新概念时遗忘旧的类或域。正如 Lange 等人 (2022) 所调查的那样,主要的努力在三个方面解决了这个问题:使用内存缓冲区来存储代表性数据(Rebuffi 等人,2017 年;Isele 和 Cosgun,2018 年;Rolnick 等人,2019 年;Yan et al, 2021; Lange & Tuytelaars, 2021),采用正则化项来约束模型权重或输出 logits 的变化(Kirkpatrick 等人,2016 年;Zenke 等人,2017 年;Schwarz 等人,2018 年)并执行参数隔离以专门用于每个任务的不同模型参数(Fernando 等人,2017 年;Mallya 和 Lazebnik,2018 年;Rosenfeld 和 Tsotsos,2020 年)。内存缓冲区在学习新概念以消除遗忘的同时重播以前的样本,但是,它可能导致存储的子集过度拟合并产生沉重的内存成本。如果某些特征在下一个训练阶段发生变化,则基于正则化的方法会对模型进行惩罚,从而导致所谓的基本特征占主导地位。参数隔离为新任务增加了新分支,引发了令人望而却步的庞大架构。为了减轻现有方法的负面影响,GPE 采用原型学习结合距离测量来执行二进制分类(突出显示与vanilla帧)。原型本质上是在整个训练数据中学习到的最具代表性的特征,既避免了子集上的过度拟合问题,也避免了存储原始数据的难以承受的成本。此外,我们限制了原型在阶段之间的变化,这是一种整体的改进,而不是少数人的统治。在当前域的训练过程中继承前一阶段的原型,以保持全局一致性,同时留有调整和改进的空间。

问题陈述

在增量 VHD 中,训练过程由几个后续任务组成,这些任务建立在具有分布变化的不相交数据集上。假设我们总共有 T 个任务,这会产生一个训练数据流 {T1, T2, ..., TT } 其中如果i不等于j,Ti ∩ Tj = ∅ 。每个训练任务 Tt 表示为 \left \{ \left ( x_{i}^{t} ,y_{i}^{t}\right ) \right \}_{i}^{n_{t}}=1其中x_{i}^{t}\epsilon \chi 表示阶段 t 中第 i 个训练视频的整个帧集,y_{i}^{t}是其对应的逐帧标签(即二元向量表示高亮/原始帧),nt 表示可访问的训练数据对的数量。此外,我们使用 {D1, D2, ..., DT } 来描述训练任务中包含的相应域 {T1, T2, ..., TT }。如果 i\neq j,请注意 D_{i}\not\neq D_{j}。具体来说,在我们提出的 LiveFood 中,我们将训练视频分成四个不相交的子集 {T1, T2, T3, T4},相应的域表示为 {D1, D2, D3, D4}。考虑到一个视频可能包含多个域,我们进一步限制出现在 Dt-1 中的域是 Dt 中域的子集合。形式上,令 St 表示 Dt 中出现的域的所有可能组合,Ct 是 Tt 视频中出现的域组合,我们有 C1 = S1 和 C_{t}=S_{t}/\bigcup_{i=1}^{t-1}S_{i}。更具体地说,让 di 表示一个特定的域标签,那么如果 D1 = {d1},D2 = {d1,d2},并且 D3 = {d1,d2,d3},我们有 C1 = {d1},C2 = {d2 , (d1, d2)} 和 C3 = {d3, (d1, d3), (d2, d3), (d1, d2, d3)}。在上面的示例中,C2 = {d2, (d1, d2)} 表示 T2 中的视频可以包含 d2 的域或 d1 和 d2 的混合。仅包含 d1 域的视频被排除在 T2 之外,因为增量 VHD 的目的是有效地学习新概念,同时记住过去数据中已经学过的内容。测试集包含包含所有域的混合视频,并且在任务 Tt 期间,在评估性能时,只有出现在 Dt 中的域被视为积极的。

图二
在 LiveFood 上执行增量 VHD 的图示

 

LIVEFOOD数据集

视频选择。我们收集高分辨率的在线美食视频。正如 Xiong 等人 (2019) 所介绍的,较短的视频更有可能包含吸引人的片段,因此点击率更高,而较长的视频通常很无聊。考虑到这一点,我们过滤掉了极短(小于 30 秒)的视频(可能包含不足以学习的美食内容)和长(超过 15 分钟)的用户通常不太关注的视频。之后,所有保留的原始视频都由合格的工作人员查看,以检查视频内容是否与美食相关,从而消除错误类别注释的影响。只有通过上述检查的视频才会被选择用于后续的注释任务,以保证 LiveFood 的质量。图 3 (a) 显示了所有域中视频的时长分布。

图三
​​​​​拟议的 LiveFood 的统计结果。 (a) 显示了视频持续时间的分布。
(b) 说明了高亮持续时间的分布。大多数精彩片段都短于 15 秒。
(c) 显示每个有吸引力的剪辑 的相对位置。对应的视频。亮点在整个视频中均匀分布,证明了 LiveFood 的良好多样性。

 亮点注释。我们定义了四个通常在收集的视频中呈现的亮点领域,即烹饪、饮食、配料和展示。对于每个域,如果视频剪辑满足表 1 中的以下标准,则该视频剪辑被接受为令人满意的亮点。

 注释者需要首先浏览整个视频以定位有吸引力的剪辑的粗略位置。之后,从候选位置开始在帧级别对视频进行注释,以验证亮点的确切开始和结束时间戳。同时,我们引入了严格的双重检查机制(参见附录A.3)以进一步保证注释的质量。由于选择亮点的时间戳部分是主观的,因此在质量控制中需要客观和主观的验证。为了视频的连贯性视觉感受,我们限制精彩片段在三秒以上,两分钟以内,以免显得乏味。

数据统计。图 3 描绘了我们提出的 LiveFood 的统计结果,包括视频时长的分布、精彩片段时长的分布以及中心时间戳相对于每个视频的相对位置等。此外,在表 2 中,我们还比较了建议使用现有 VHD 数据集进行 LiveFood,例如 SumMe(Gygli 等人,2014 年)、YouTubeHighlights(Sun 等人,2014 年)、Video2GIF(Gygli 等人,2016 年)、PHD(Garcia del Molino 和 Gygli,2018 年)和 QVHighlights( Lei et al, 2021) 以更好地说明它们之间的差异。

如表 2 所示,SumMe 和 YouTubeHighlights 仅包含少量视频和注释,这使得它们不足以训练深度模型。 Video2GIF 和 PHD 由在线用户编辑,缺乏严格的质量控制机制。因此,数据集的可靠性可能会受到破坏。新发布的 QVHighlights 不能用于增量学习,因为它没有域注释。此外,QVHighlights 中剪辑的平均长度相当长:每个视频中近五分之一被标注为有吸引力的剪辑,因此与普通剪辑相比,所选剪辑的辨别力较差。与上述数据集不同,LiveFood 提供的美食视频带有精细标注的域标签,使其适用于域增量 VHD 任务。

研究方法

GPE 旨在解决遗忘问题,同时通过学习新概念不断改进。正如在第 2 节中分析的那样,传统的增量学习方法存在缺点,例如对重放数据的过度拟合、有限的灵活性以及难以忍受的增长架构。与它们不同的是,GPE 使用原型和距离测量来解决分类问题。原型是在训练数据上学习到的紧凑且集中的特征,可减轻过度拟合对存储子集的影响。此外,通过使用全局和动态原型,我们赋予模型在输入新数据(图 4 中的 Mf)或适应新领域概念(图 4 中的 Md)时进一步完善的吸引人的能力。

结构。受 Carion 等人 (2020) 的启发,GPE 采用基于卷积和基于注意力的模型的组合来提取特征。具体而言,使用在 ImageNet(Russakovsky 等人,2015 年)上预训练的 ConvNeXt(Liu 等人,2022 年)来提取输入视频帧的空间特征。之后,使用具有多头的变换器编码器执行时间融合,基于整个视频帧生成全局表示。通过由全连接层组成的前馈网络 (FFN) 的转换,每个帧都根据与可学习原型的距离进行分类。我们的目标是学习两组具有相同形状的可训练原型,即高亮(正)和vanilla(负)原型。通过将 transformer 的输出特征的维数表示为 m 并将每组中的原型数量表示为 k,高亮和普通原型都可以表示为形状为 k × m 的矩阵。通过使用 L2 距离作为每个特征与原型之间的距离度量,我们获得了特征与每组原型之间的成对距离。形式上,我们使用 h、H 和 V 来表示变换器特征、高亮原型和普通原型。 gφ(·)表示FFN模块。 d(·) 是特征-原型对之间的 L2 距离。从特征 h 到 H 和 V 的距离公式为:

图四
GPE网络结构

\left \{ T_{i}^{} \right \}_{i=1}^{T} 表示有 T 个任务的训练流。在最右边的部分,Mf 和 Md 代表 GPE 的固定模式和动态模式。 Mf 预先定义原型的数量,并在不同阶段对其进行细化。在学习期间对变化幅度的大小施加限制(参见等式 5)。 Md 在处理新领域时动态地将新原型添加到学习过程中。更改限制仅适用于继承的原型。这种模式更适合在大量域上学习。上图中的每个原型相当于一行 V 或 H(参见等式 1)。

 其中下标 i 代表第 i 个原型。使用softmax函数将距离映射到概率p_{h},可以理解为将特征h分配给高光的置信度。

 然后,我们使用交叉熵损失通过梯度反向传播来优化模型:

 其中 N 表示训练帧的大小,如果第 i 帧被注释为高光,则 yi 等于 1,否则为 0。

学习增量领域。本节我们详细介绍了Mf(图4)的学习,动态模式Md可以很容易的导出,只需要限制继承原型的变化,自由训练新加入的原型。我们使用由 θ 参数化的 hθ(·) 来表示由 ConvNeXt 和 transformer 编码器联合构建的特征提取器。 FFN gφ(·) 由 φ 参数化。回想一下输出的特征是 h。为简单起见,vanilla 和 highlight 原型都用 π 表示。在这些符号的帮助下,公式3中建立的分类损失简写为 Lcls(θ, φ, π)。我们扩展了距离测量的定义,用于评估给定两个原型之间的距离。对于两组学习原型 π(t) 和 π(t+1),它们之间的距离计算如下:

 

在训练阶段 T 中,模型继承了前一阶段的训练原型 \pi ^{T-1}。对于增量需求,我们通过限制原型的更改来解决灾难性遗忘问题,保证模型已经了解观察域的意识。通过上述公式,我们考虑以下约束非线性优化问题:

其中 γ 是引入观察原型的可容忍变化。满足上述限制的最优结果为(θ(T ), φ(T ), π(T ))。我们没有解决复杂的非线性问题,而是求助于其相应的经验对偶公式。使用辅助正拉格朗日乘数 λ,方程式中的优化目标。公式5转化为如下形式: 

 

 其中 S^{(T)}表示训练阶段 T 中的最优解。我们交替迭代地更新可训练参数(即 θ、φ 和 π)和经验拉格朗日变量 λ:

 其中 η 是可训练参数的学习率,λ 是对偶步骤中的乘数。通过以上分析,算法 1 总结了增量训练和推理管道。

 

 6. 实验

6.1 实验建立

数据和评估协议。 LiveFood 包含 4928 个训练视频和 261 个测试视频。我们随机拆分 4928 个视频中的 15% 进行验证。 T1、T2、T3 和 T4 分别包含 3380、854、393 和 113 个视频。 D1、D2、D3 和 D4 是{presentation}、{presentation, eating}、{presentation, eating, ingredients} 和{presentation, eating, ingredients, cooking}。我们根据之前的工作报告测试集上的 mAP(Yao 等人,2016 年;Xiong 等人,2019 年)。

GPE。 GPE 仅在训练期间微调 ConvNeXt 的最后一层。变压器编码器有8个头和3层。前馈模块 gφ(·) 是由 ReLU 激活的具有 3 个线性层的多层感知。 vanilla 和 highlight 原型都被表述为 40 个向量,维度为 128。在每个阶段,模型训练 300 个 epoch,学习率从 1e-3 开始每 70 个 epoch 减半。 GPE 在第一阶段随机初始化。在后期阶段,它从前一阶段学习的权重开始,在 Mf 中训练原型。在Md中,所有在前几个阶段学习到的原型都像在Md中一样被继承和训练。除了这些继承的原型之外,在每个阶段,新的原型被随机初始化并添加到Md中,以加强对新概念的学习。

基于正则化的方法。 SI (Zenke et al, 2017) 和 oEWC (Schwarz et al, 2018) 是代表。这些方案使用折衷的损失函数更新模型,同时利用先前阶段的整体重要性和当前任务来消除遗忘。

重放方法。 ER (Rolnick et al, 2019) 和 DER (Buzzega et al, 2020) 使用内存缓冲区来存储来自先前任务的代表性数据,以防止遗忘。如果未指定,缓冲区大小设置为 200。

图5
在不同训练阶段观察到的亮点

下限 (Lb)。在每个阶段,GPE 都在不受约束的情况下进行训练(参见等式 5),遭受严重的灾难性遗忘并且渲染性能随着任务的增加而下降。

上限 (Ub)。在每个阶段,GPE 都使用来自所有阶段的数据进行训练。因此它没有遗忘问题,并为所有增量学习方法提供了上限性能。

6.2 主要结果

与现有 IL 方法的比较。实验结果如表 3 所示。我们用灰色背景突出显示上限结果。从表 3 中可以看出,香草 GPE (Mf) 超过了下限,提高了 2.91% mAP。与经典的 IL 方法 SI 和 oEWC 相比,GPE 的性能明显优于它们,在 mAP 上产生至少 1.57% 的性能增益。此外,当配备与 Yan 等人 (2021) 相同的重放方案时,GPE 与 DER 和 ER 相比分别获得了 1.06% 和 2.71% 的 mAP 增益。上述结果清楚地证明了 GPE 在处理增量 VHD 任务方面的有效性。

表3
GPE 与现有增量学习方法在 LiveFood 上的比较。我们评估了它们的逐帧 mAP 性能。

 

跨训练阶段的高亮分数可视化。我们调查了观察到的原型在不同训练阶段的影响。在图 5 中,我们展示了 GPE 在第一个和最后一个训练阶段的高亮检测结果。为了比较,我们还提供了 DER 的预测。在图 5 所示的曲线中,蓝色和橙色点表示在第一个任务 T1 和最终任务 T4 期间由 GPE(即等式 2 中的 PH)预测的每个帧的高亮分数。绿点代表 DER 在 T4 中的预测分数。很明显,GPE 可以学习新概念,例如烹饪,同时保留在第一阶段学习的演示记忆。这个结果符合我们的动机,即强大的增量 VHD 模型应该能够涵盖过去和新的概念。相比之下,DER由于使用存储的数据来加强记忆,它仍然存在由于缓冲区大小有限而容易遗忘的缺点。这可以通过在学习烹饪时为旧的表示域分配低得多的分数来证明。

GPE 的动态扩展性。我们研究了动态 GPE (Md) 在模型需要处理大量域的情况下的泛化能力。我们考虑 R-MNIST 数据集,其中包含一系列在 [0, π) 之间具有不同度数的旋转数字,其中每个度数代表一个域。为了公平比较,我们使用与 Buzzega 等人 (2020) 相同的设置,生成一个包含 20 个后续任务的流。请注意,没有使用增强技术。在这个实验中,GPE 被简化为一个带有 2 个全连接层和 ReLU 的小型网络。原型的数量设置为每类 5 个。因此,每个任务 Tt 通过继承前一阶段并为每个类生成 5 个新原型,每个类有 5t 个原型。旧原型禁止改动太多。 λ 和 γ 分别为 10 和 1e-2。所有其他实验设置均遵循 Buzzega 等人 (2020)。

 

表4
R-MNIST 的平均分类精度。

 

 表 4 中描述的结果表明动态 GPE 优于大多数传统方法,包括基于正则化和重放的方法。值得注意的是,动态 GPE 在 20 个任务中实现了 85.42% 的平均准确率,与 ER(Rolnick 等人,2019 年)和 FDR(Benjamin 等人,2019 年)相当,同时以相当大的优势优于其他方法。我们进一步采用与 DER (Yan et al, 2021) 相同的回放方案,这有助于动态 GPE 达到 90.17% 的 top-1 准确率,这是一种新的可比的最先进的方法。

6.3 消融研究

对初始原型数 k 的消融。原型的数量反映了模型的容量。太多的原型会增加训练成本,而太少会导致欠拟合。表 5 中显示的结果比较了 LiveFood 上 GPE (Mf) 固定模式下的训练成本和性能。据观察,随着原型 k 初始数量的增加,所有任务的平均 mAP 持续增加。然而,通过比较表 5 中的最后两行,我们注意到尽管引入了更多参数,但 k = 40 和 k = 50 之间的性能增益很小。因此,我们在整个实验中将 k 设置为 40,以在准确性和效率之间取得良好的平衡。

表5
对初始原型数 k 的消融
表6
对距离 γ 变化约束的消融。

 

 距离约束 γ 的消融。极小的 γ 会阻碍模型学习新概念,因为原型几乎没有变化。相反,太大的 γ 可能导致灾难性的遗忘,因为模型可能严重过度拟合新观察到的数据。如表 6 所示,我们默认将 k 设置为 40,并研究不同值的 γ 的影响。在我们的实验中,我们发现 T1 之后原版原型和高亮原型之间的距离小于 15,因此将其设置为 γ 的上限。从表 6 中我们可以看出,当 γ 较小时,例如 1e-3,GPE 几乎无法学习新内容,与表 3 中所示的下限方法相比,只能实现相似的 mAP。通过扩大 γ,平均 mAP 增加始终从 31.75 到 33.43。当 γ 为 15 时,模型会出现如前所述的遗忘问题,导致性能下降近 1.0%。因此,我们默认将 k 和 γ 设置为 40 和 5。

7 结论

在本文中,我们引入了一项新任务:增量视频高亮检测,旨在在高亮域和数据都随时间增加的实际场景中执行 VHD。为了朝这个新方向铺平道路,我们收集了一个包含四个精细注释域的高质量视频美食数据集 LiveFood。然后我们提出了一个名为全局原型编码(GPE)的新端到端模型来逐步学习以适应新的亮点领域。广泛的实验结果清楚地证明了我们方法的有效性。我们希望这项工作能够激励其他研究人员从事这项新的关键任务。

 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

4.Ansible Inventory介绍及实战 - A list or group of lists nodes

什么是inventory? 官方解释:Ansible automates tasks on managed nodes or “hosts” in your infrastructure, using a list or group of lists known as inventory. Ansible可以同时与您基础设施中的一个或多个系统协同工作。为了与多台服务…

RPC核心原理(整体架构/调用过程)

Server: Provider ,暴露服务,服务提供方 Client: Consumer ,服务消费,调用远程服务 Registry:服务注册与发现 RPC的调用过程如下: 第一步:server会将他需要暴露的服务以及他的地址信息注册到Registry这一注册中心。 第二步:client通过注册…

【分布鲁棒和多目标非负矩阵分解】基于DR-NMF的对NMF问题噪声模型的识别鲁棒性研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

Doris的一些进阶用法

6.doris进阶 6.1修改表 6.1.1修改表名 示例: 将名为 table1 的表修改为 table2 SQLALTER TABLE table1 RENAME table2; -- 示例 ALTER TABLE aggregate_test RENAME aggregate_test1; 将表 example_table 中名为 rollup1 的 rollup index 修改为 rollup2 SQLA…

Ex-ChatGPT本地部署+Azure OpenAI接口配置+docker部署服务

Ex-ChatGPT项目分为 Ex-ChatGPT 和 WebChatGPTEnhance 两部分,Ex-ChatGPT启动后是个web服务,通过访问ip端口体验; WebChatGPTEnhance可编译生成一个浏览器插件,Chrome或者Microsoft edge浏览器可以安装该插件,点击该插…

【MySQL】如何实现单表查询?

在我们对数据进行操作时,查询无疑是至关重要的,查询操作灵活多变,我们可以根据开发的需求,设计高效的查询操作,把数据库中存储的数据展示给用户。 文章目录 前言1. 基础查询1.1 基础查询语法1.2 基础查询练习 2. 条件查…

数据库基础——5.运算符

这篇文章我们来讲一下SQL语句中的运算符操作。 说点题外话:SQL本质上也是一种计算机语言,和C,java一样的,只不过SQL是用来操作数据库的。在C,java中也有运算符,这两种语言中的运算符和数学中的运算符差距不…

crontab定时任务介绍

1 crontab概述 crontab是linux操作系统上用来设置定时任务的基础命令,是基于crond服务实现任务调度执行。 当安装完成操作系统后,默认会安装crond服务及其附属命令,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执…

还在用 JS 做节流吗?CSS 也可以防止按钮重复点击

目录 一、CSS 实现思路分析 二、CSS 动画的精准控制 三、CSS 实现的其他思路 四、总结一下 众所周知,函数节流(throttle)是 JS 中一个非常常见的优化手段,可以有效的避免函数过于频繁的执行。 举个例子:一个保存按…

11.PasswordEncoder详解与实战

security/day07 这节课我们开始讲PasswordEncoder,如果大家还有印象的话,我们前面有提到过PasswordEncoder: 为什么密码使用{noop}开头呢?我们也做出了相应的解释,这节课开始带大家真正的了解PasswordEncoder, PassworderEncoder…

哈夫曼树(Huffman)【数据结构】

目录 ​编辑 一、基本概念 二、哈夫曼树的构造算法 三、哈夫曼编码 假如<60分的同学占5%&#xff0c;60到70分的占15%…… 这里的百分数就是权。 此时&#xff0c;效率最高&#xff08;判断次数最少&#xff09;的树就是哈夫曼树。 一、基本概念 权&#xff08;we…

关于宝塔部署jar包和war包

文章目录 前言一、jar包部署二、war包部署1.maven如果打包不了使用命令打包2.安装Tomcat进行访问是否成功2.进入Tomcat目录进行配置war包 一、项目访问方法 前言 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、jar包部署 1.其实jar包没什么讲的&…

使用nvm管理node多版本(安装、卸载nvm,配置环境变量,更换npm淘宝镜像)

目录 前言一、卸载node二、nvm是什么&#xff1f;三、nvm安装1. 官网下载 nvm 包2. 安装 nvm-setup.exe小tips 3. 配置路径和下载镜像4. 检查nvm是否安装完成 四、使用nvm安装node版本五、修改npm默认镜像源为淘宝镜像六、 环境变量配置1. 设置系统变量和用户变量的作用是什么呢…

【从零到Offer】- HashMap与HashSet

​ HashMap与HashSet是我们日常最常使用的两个集合类。在实现上&#xff0c;两者也有很大的相似性。HashSet基本就是对HashMap的一个简单包装。 ​ 为了更好的理解Hash结构的实现原理&#xff0c;从而更好的指导我们的代码使用&#xff0c;本文就主要对HashMap的实现及设计做分…

10 款最常用的Sketch在线插件!

Sketch 是一款高效、小巧的界面设计工具&#xff0c;在设计领域广受设计团队喜爱&#xff0c;帮助设计师创造了许多令人惊叹的作品。在使用 Sketch 时&#xff0c;辅助使用一些插件可以更高效地完成设计任务。Windows 也能用的「协作版 Sketch」即时设计&#xff0c;可作为网页…

《数据库应用系统实践》------ 校友会信息系统

系列文章 《数据库应用系统实践》------ 校友会信息系统 文章目录 系列文章一、需求分析1、系统背景2、 系统功能结构&#xff08;需包含功能结构框图和模块说明&#xff09;3&#xff0e;系统功能简介 二、概念模型设计1&#xff0e;基本要素&#xff08;符号介绍说明&#x…

Linux Kernel RTC驱动使用hwclock调试

hwclock hwclock的源码路径&#xff1a;sys-utils/hwclock.c 源码&#xff1a; if (opt & HWCLOCK_OPT_HCTOSYS)to_sys_clock(&rtcname, utc);else if (opt & HWCLOCK_OPT_SYSTOHC)from_sys_clock(&rtcname, utc);else if (opt & HWCLOCK_OPT_SYSTZ)set_…

Redis 的数据类型和命令帮助

文章结构 Redis 数据类型1. Redis全局命令&#xff08;跟key有关系&#xff0c;而跟value无关&#xff09;2. StringsGetting and setting StringsManaging counters 3. Lists(L)Basic commandsBlocking commands 4. Sets(S)Basic commands 5. Hashes(H)Basic commands 6. Sort…

软考A计划-试题模拟含答案解析-卷九

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&am…

【WPF】数据绑定,资源字典

数据绑定 将数据与视图分开,创建MainViewModel .cs 作为数据源的处理 MainViewModel using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Runtime.CompilerServices; using System.Text; using System.Threading…