TIM: A Time Interval Machine for Audio-Visual Action Recognition

news2024/11/22 16:08:42

标题:TIM:一种用于视听动作识别的时间间隔机器

源文链接:openaccess.thecvf.com/content/CVPR2024/papers/Chalk_TIM_A_Time_Interval_Machine_for_Audio-Visual_Action_Recognition_CVPR_2024_paper.pdficon-default.png?t=N7T8https://openaccess.thecvf.com/content/CVPR2024/papers/Chalk_TIM_A_Time_Interval_Machine_for_Audio-Visual_Action_Recognition_CVPR_2024_paper.pdf

源码链接:https://github.com/JacobChalk/TIMicon-default.png?t=N7T8https://github.com/JacobChalk/TIM

发表:CVPR-2024

摘要 

长时间的视频中,各种动作会产生丰富的视听信号。最近的研究表明,音频和视频这两种模态的事件时间长度和标签各不相同。我们通过明确建模音频和视觉事件的时间长度来解决长时间视频中两种模态之间的相互作用。我们提出了时间间隔机器(TIM),其中特定模态的时间间隔被用作查询,输入到一个处理长视频输入的转换器编码器。然后,编码器关注于指定的时间间隔,以及两种模态中的周围上下文,以识别正在进行的动作。

我们在三个长视听视频数据集上测试了TIM:EPIC-KITCHENS、Perception Test和AVE,报告了识别方面的最新技术(SOTA)。在EPIC-KITCHENS上,我们击败了之前利用大型语言模型(LLMs)和显著更大预训练量的SOTA,将顶级动作识别准确率提高了2.9%。此外,我们还展示了TIM可以通过使用密集多尺度间隔查询来适应动作检测,在EPIC-KITCHENS-100上大多数指标都超过了SOTA,并在Perception Test上表现出强大的性能。我们的消融实验表明,整合两种模态并建模它们的时间间隔在实现这种性能中起着关键作用。代码和模型可在以下网址获取:https://github.com/JacobChalk/TIM。

1. 简介

长视频展现出了一系列快速连续的听觉和视觉事件。最新的尝试分别在这些模态中标注事件[15, 30],展示了两种模态之间的时间长度和类标签都有所不同。然而,这些事件仍然保持相关——识别两种模态中时间上接近的事件可以改善视觉和音频中的动作识别。

此外,迄今为止的大多数方法通常仅利用动作的精确时间长度;一个精确裁剪的动作片段被输入到基于卷积[5, 8, 39]或基于转换器[1, 11, 22]的主干网络中,该网络预测正在进行的动作。即使当利用周围上下文来改善动作识别时[18, 31, 42],这种上下文也是以相邻动作的精确片段形式提供的,而不是未裁剪的长输入视频。在本文中,我们提出了一种方法,该方法编码长视频输入中视觉和听觉流中发生的多个事件。我们通过将时间间隔提升为首要元素来实现这一点,利用它们来指定伴随模态中的查询。我们将这种机制称为时间间隔机器(TIM)。它能够接收长视频输入,并输出被查询模态的查询区间内发生的动作

图1. 时间区间机器(TIM):顶部:给定视觉和听觉流输入,特定时间区间的正在进行的动作由指定该区间开始和结束时间的查询以及感兴趣的模态来确定。底部:TIM可以查询视觉(例如,“冲洗海绵”)和听觉(例如,“水声”)动作类别,并区分同一模态中重叠的动作(“玻璃碰撞”和“擦洗/刮擦”)。

考虑图1中的示例。输入包含水流动的声音,同时海绵被冲洗,之后用来擦拭表面。这些不同的事件在持续时间上可能差异很大,并且可能在音频或视觉模态中更为突出。尽管这些事件之间存在差异,但它们与周围环境之间很可能存在许多相关性,这可能有助于识别给定事件(例如,水声与冲洗海绵相关,为识别视觉动作提供了有用的信息)。TIM能够通过访问两种模态内的上下文(包括没有事件发生时的背景)来利用这一点。然后,它可以通过查询给定模态中特定事件的时间间隔来区分同一输入中不同且可能重叠的事件

我们在三个具有挑战性的长视频视听识别数据集上测试了TIM:EPIC-KITCHENS[7],该数据集最近通过EPIC-SOUNDS[15]提供了不同的音频标注;Perception Test[30];以及AVE[36]。我们展示了TIM能够在长输入中有效地学习视觉和听觉类别,在EPIC-KITCHENS上比当前最先进(SOTA)的top-1准确率提高了2.9%,在EPIC-SOUNDS上提高了1.4%,尽管之前的竞争方法使用了更大的预训练数据集、大型语言模型或更高分辨率的输入。此外,我们在AVE上比使用公共数据集预训练的模型提高了0.6%,并在Perception Test的视觉和音频动作识别中分别比强大的基线提高了9.9%和3.2%。

此外,我们通过固定多尺度密集查询和添加区间回归损失,将TIM适应于动作检测。我们在EPIC-KITCHENS和Perception Test上报告了强大的检测结果,分别比Action Former[49]高出1.6平均mAP和4.3。

我们的贡献总结如下:(i) 我们提出了TIM查询机制,用于关注长视频中特定模态的区间。(ii) 我们有效地训练TIM以使用时间区间编码/查询多个音频和视频动作。(iii) 我们展示了TIM在视觉和听觉动作识别中的价值,并通过添加区间回归损失将其适应于检测。(iv) 我们在多个数据集的视频和多模态识别中均达到了新的SOTA水平

2. 相关工作

音-视频动作识别。已有一些工作采用音频和视觉模态进行动作识别[10, 17, 18, 26, 41, 44]。一些工作引入新的架构来有效地融合不同模态[17, 18, 26, 44];其他工作则提出了独特的训练技术来解决训练多模态模型时出现的问题,如梯度混合[41],以解决每个模态以不同速度过拟合的问题,或跨模态对比学习以进行区分[25]。然而,这些工作对两种模态都使用相同的语义和时序标签。最近的工作表明,事件的时序区间和语义在不同模态之间是不同的[15, 30]。[37]独立地对视觉和听觉事件进行了时序标注,尽管它们共享相同的标签集。在这项工作中,我们为每个模态训练了不同的标签,以利用具有判别性的音频和视觉动作

利用时序上下文。一些工作已经考虑了融入时序上下文[18, 27, 42, 43, 48],这是一个与使用多种模态正交的方向,特别是在未裁剪的视频中特别有用。在[27]中,提出了一种基于自回归LSTM的编码器-解码器,用于动作序列分类,有效地利用过去的动作上下文来预测当前的动作。时间查询网络(Temporal Query Network)[48]使用可学习的查询向量,这些向量对应于长视频的特定属性,使模型能够关注视频的各个方面及其周围的上下文,以产生针对每个属性的响应。[42]提出通过长期特征库(Long-Term Feature Bank)和注意力机制,从邻近的动作片段中聚合时间上下文来增强动作的表示。[43]通过存储一个转换器所有中间层的键和值来构建一个更复杂的记忆库,以聚合过去的上下文。最后,[18]利用视觉、音频和语言从周围动作中提取多模态时间上下文。

[18, 42, 43]与我们的方法最为接近,因为共同的目标是使用未裁剪视频中的周围上下文来丰富感兴趣动作的表示,而不是仅依赖邻近的片段。然而,[42, 43]是单模态模型,仅识别视觉动作。[18]假设所有动作的时间范围都是已知的,包括测试集,这具有一定的限制性。

视觉模型中的查询。使用Transformer架构学习视觉查询最近受到了关注[4, 14, 16, 23, 48]。通常,这些方法使用一组可学习的向量来查询输入中某个概念的存在。例如,在[4, 23]中,可学习的查询对应于不同的对象,而在[14]中,它们被用于多任务学习,每个可学习的查询对应于不同的任务。[16]已经融入了可学习的查询来适应预训练模型,同时保持其余参数冻结。与我们的动机最接近的是[48],其中查询对应于视频中的事件及其属性,用于细粒度动作识别。作者指出,这些查询还具有在未裁剪视频中定位事件时间的作用

与[48]和其他工作不同,我们的查询主要是时间性的,没有语义解释,并且应用于多个模态。重要的是,由于时间是连续的,我们不能使用预定义的一组查询。相反,我们采用MLP架构来编码时间,类似于一个通用时钟。接下来我们将介绍我们的方法。

3. 时间间隔机

在本节中,我们描述了时间间隔机器(TIM),一个多模态Transformer编码器架构,其中所有输入(包括特征和查询)都与其相关的时间间隔进行编码时间间隔结合了每个音频和视觉特征的持续时间和位置,并用于查询网络以获取给定时间间隔内发生的任何动作。TIM的架构如图2所示。它接收大量的视频输入,这些输入被表示为一系列音频和视觉特征,并为提供的时间间隔输出正在进行的听觉或视觉动作标签

图2. 时间间隔机器(TIM)概述。该模型接收来自视频的音频和视觉特征序列,每个特征都通过其跨越的时间间隔进行时间戳记,并根据其模态进行编码。为了推断在时间间隔内发生的动作(视觉或音频事件),会形成一个查询,指定感兴趣的时间间隔和模态。

3.1. 模型体系结构

输入。TIM的输入是未裁剪视频的长片段,由提取的特征表示。当考虑两种模态输入,如视频和音频时,每种模态的嵌入是分别进行的:对于每种模态m,设Xm = [Xm1, ..., XmNm]是输入视频的Nm个按时序排列的特征表示,这些特征表示是从预训练的特征提取器Sm(·)中获得的。我们将这些特征通过特定模态的嵌入层gm(·)进行传递,将它们投影到所有模态共有的较低维度D。然后,嵌入的特征会被标记上模态编码和时间间隔编码,形成Transformer编码器的输入。现在我们详细说明如何对时间间隔进行编码。

图3. 时间间隔MLP I(·)的说明。它输入一个二维向量,即一个时间间隔的起始时间和结束时间,并输出一个单一向量,该向量可以沿着通道维度与输入特征或[CLS]标记进行级联。图中展示了三个时间间隔输入和三个对应的输出。请注意,在实际操作中,时间间隔是同时输入的。

时间间隔编码。在这项工作中,我们介绍了一种新型的学习查询网络——时间间隔MLP(多层感知器),它生成一个表示给定时间间隔的单一的D维向量。这个网络在TIM中用于编码输入特征的时间间隔以及我们想要查询并后续分类的时间间隔。图3说明了这个网络的概念。

时间间隔MLP I(·) : R2 → RD 接收一个时间间隔作为输入,这个时间间隔由起始时间和结束时间表示,并输出该时间间隔的一个单一的D维编码。请注意,这与单独编码起始时间和结束时间是不同的。具体来说,设ts和te是感兴趣的时间间隔的起始时间和结束时间,它们被长视频输入的长度归一化。I(·)接收时间间隔 ˜t = [ts, te] 作为输入,并输出该时间间隔的D维向量编码,这个向量编码了时间间隔在输入内的相对位置,以及其持续时间。然后,这个向量作为模型关于该时间间隔内发生的动作的查询。此外,每个特征\{X_i^m\}在输入内跨越一定的时间间隔。因此,对特征的时间间隔进行编码也很重要。总的来说,时间间隔MLP充当了一个通用时钟,它编码了输入中来自任何模态的特征的时间范围。请注意,对于输入特征和跨模态查询的所有时间间隔,使用相同的时间间隔MLP进行编码是至关重要的,以便准确编码通用时间。还值得注意的是,时间间隔MLP可以覆盖连续的时间间隔,而传统的位置编码仅覆盖输入特征的固定位置集合。时间间隔MLP与Transformer一起进行端到端的训练。

Transformer特征输入。\tilde{\mathbf{t}}^{m} = [\tilde{t}_{1}^{m},\cdots,\tilde{t}_{N^{m}}^{m}] 是来自模态m的视频特征Xm对应的时间间隔。我们通过通道级联将编码的时间间隔I(˜tm)注入到嵌入的特征中。然后,一个可学习的特定模态编码em ∈ R2D被添加到时间编码的特征上,以区分每个模态。总结来说,TIM的特征输入Em通过以下方式计算:

E_i^m=[g^m(X_i^m),I(\tilde t_i^m)]+e^m\quad\forall i\in[1,...,N^m]\quad(1)

其中[·, ·]表示级联。

Transformer查询输入。为了查询某个感兴趣区间内的动作,我们采用了标准的方法,即在输入序列的末尾添加一个可学习的分类标记CLSm如果˜tQ是一个感兴趣的时间区间,我们将时间区间表示I(˜tQ)沿着通道维度与这个分类标记连接起来,这作为网络的一个查询,以预测在˜tQ区间内发生的对应动作。我们还向每个分类标记添加了模态特定的编码e^m,作为一个标志来区分我们正在查询的是哪种模态。编码后的[CLS]m标记可以更正式地定义为:
[\text{CLS}]^m=[\text{CLS}^m,I(\tilde{t}_Q)]+e^m\quad(2)
在训练期间,我们为输入视频中的每个动作添加一个分类标记,从而在两种模态中都生成了多个[CLS]标记

Transformer编码器。我们使用transformer编码器对输入序列执行自注意力机制,以聚合相关的时间上下文和跨模态关系。我们使用编码后的特征输入Em和一个或多个代表每个时间区间查询的分类标记[CLS]m来形成transformer的输入序列,并将这些输入到编码器中。请注意,我们通过向输入中添加多个CLSm标记来同时识别来自任何模态的所有动作然后,将transformer输出的[CLS]m表示ZmCLS传递给相应的线性分类器,以预测动作标签。重要的是,我们使用注意力掩码来防止查询之间相互关注,同样防止输入特征关注查询,这确保了在推理期间,每个查询都是在不依赖于其他查询或动作边界的特权知识的情况下被识别的

3.2. TIM的训练和测试

为了训练TIM(Temporal Interaction Modeling),我们考虑未裁剪视频中的所有W秒长的连续片段,并以Hw的步长遍历整个视频。我们从这些片段中随机选择批次。对于每个窗口,我们查询所有与窗口重叠超过δ = 0.2秒的已标注音频和视觉动作

窗口中的所有查询都被编码并连接到不同的CLS标记上。为了对查询进行分类,h_{\mathrm{CLS}}^{m}(\cdot)为模态m的线性分类器,设\hat{y}_{\mathrm{CLS}}^{m}=h^{m}(Z_{\mathrm{CLS}}^{m})为ZmCLS输出表示的预测动作

我们通过使用交叉熵分类损失CE(·)在真实标签ymCLS上训练TIM,如下所示:
L^m=\frac{1}{N_Q}\sum^{N_Q}CE(\hat{y}_{\mathrm{CLS}}^m,y_{\mathrm{CLS}}^m)\text{(3)}
其中NQ是批次内的查询数量。

时间距离损失。除了标准的分类损失外,我们还引入了时间距离(TD)损失作为训练TIM的辅助损失。受到[21]的启发,其中使用自监督学习令牌嵌入中的相对补丁位置,我们同样训练网络以获取两个transformer输出并预测它们对应时间区间之间的经过时间

\mathbf{Z}_{1:\sum_{m}N^{m}}为来自所有模态的特征的transformer输出。我们从这些输出中随机采样一组特征对\mathbb{B}\subset\mathbf{Z}_{1:\sum_{m}N^{m}},将它们沿通道维度连接并输入到时间距离回归头h_{\tilde{t}}(\cdot) : \mathbb{R}^{4D} \to \mathbb{R}^{1},以预测每对之间的时间区间差。请注意,特征对可以在模态内部和跨模态中采样。在我们的情况下,我们通过将一个视觉特征与另一个音频特征配对来跨模态采样。这有助于模型学习模态之间的时间关系

正式地,TD损失Ltd计算为:
L^{td}=\sum_{\{Z_i,Z_j\}\in\mathbb{B}}|h_{\tilde{t}}(Z_i,Z_j)-d_{ij}|\quad(4)
其中dij是区间˜ti, ˜tj之间的时间距离。

将两个时间段的特征进行通道维度拼接,输入到时间距离回归头来预测这两个时间段之间的时间差,通过最小化TD损失,来使得从特征层面预测的时间差和实际的时间差相近。

训练目标和策略。对于最终的训练损失,我们将各模态的损失与时间距离(TD)损失相加

L^{total}=\left(\sum_{m\in\mathbb{M}}\lambda^mL^m\right)+\lambda^{td}L^{td}\quad\text{(5)}

其中,M 是模态的集合,λm 控制每个模态损失的权重,λtd 是一个超参数,控制时间距离(TD)损失的权重。

测试时增强。我们使用测试时增强,因为这通常会增加预测的鲁棒性和性能[29, 32]。在TIM中,我们使用一个滑动窗口遍历未裁剪的视频,从而为相同的区间查询提供不同的上下文。然后,我们将不同窗口中相同区间查询的预测结果进行聚合,以做出最终预测

3.3. 适应检测

虽然TIM最初是为了识别而设计的,但我们可以将其调整为用于检测。其基础架构在识别方面基本保持不变,但有两个主要的不同点。首先,我们在每个尺度上构建了跨越整个视频输入的密集多尺度区间查询。这些查询在训练和检测推断中都被用作区间查询。多尺度区间允许检测长动作和短动作。其次,我们引入了一个额外的区间回归头,该回归头将查询区间回归到动作的精确时间长度

在训练过程中,我们将多尺度金字塔中任何与真实动作重叠超过某个IoU(交并比)阈值的查询视为正查询。除了对查询进行分类外,我们还训练了一个DIOU回归损失[52]来预测动作的精确区间。分类损失和区间回归损失都是联合训练的。我们在ArXiv附录中提供了完整的细节。

4. 实验

本节描述了用于评估我们模型的数据集、实现细节和结果,以及与最先进方法的比较。

4.1 数据集

EPIC-KITCHENS-100 [7] 是一个大规模视频数据集,包括 700 个记录厨房中动作的第一人称视角视频。它包含 89,977 个细粒度动作片段。受先前工作 [11, 34, 35] 的启发,我们直接在训练和验证集中从 3806 个类别中预测动作,以避免预测无效动作。

EPIC-SOUNDS [15] 提供了音频注释,这些注释捕获了 EPIC-KITCHENS-100 音频流中的时间范围和类别标签。注释包含 78,366 个标记的音频事件。我们将 EPIC-KITCHENS 的视觉注释与 EPIC-SOUNDS 的音频注释结合起来,以训练我们的音视频模型。TIM 可以使用单个模型从两个数据集中识别动作。

AVE [36] 包含 4,143 个视频,涵盖了一系列现实生活场景,并被标记为 27 个类别,如教堂钟声、男性说话和狗叫。每个视频都被平均分成 10 个段,每个段长 1 秒。我们在监督音视频事件定位任务上评估 TIM。给定一个 1 秒的片段,我们从 27 个类别加上一个背景类别中识别正在进行的动作。

Perception Test [30] 是一个最近的包含 11,620 个视频的多模态视频基准,平均长度为 23 秒,同时提供了时间动作和声音注释。有 73,503 个跨越 63 个类别的视觉注释,以及 137,128 个跨越 16 个类别的声音注释。

4.2. 实现细节

架构细节视觉和音频嵌入层 gm 包括一个单一的 512 维前馈层,随后是 GELU [13] 激活函数和层归一化 [2],用于将特征投影到公共空间时间间隔多层感知机 I 由三个具有 512 维隐藏维度的线性层组成,后跟 ReLU 激活函数,最后一个线性层的输出后还有层归一化。我们为每个模态的每个查询都包含了 512 维的可学习 [CLS] 标记(如 [CLS]m_action),这些标记在与时间间隔编码拼接后变为 1024 维。然后,它们与 1024 维的模态编码 e_m 相加。音视频转换器包含四个编码器层,每层有 8 个注意力头、GELU 激活函数以及 1024 维的键、查询和值。在编码器层内部应用了 p=0.1 的丢弃率。我们还在原始输入特征以及编码后的转换器输入上直接应用了通道级丢弃率 p=0.5。时间距离头由两个隐藏维度为 1024 的线性层和一个输出单个数字的第三层组成,该数字对应于每个时间间隔之间的已过去时间。我们在 ArXiv 附录中包含了关于编码器层和时间距离头的架构消融研究。

训练/验证细节。我们使用 AdamW [24] 优化器对每个模型进行 100 个周期的训练,批次大小为 64,权重衰减为 1e-4。在前两个周期中应用了线性学习率预热,从 1e-6 增加到目标学习率,并使用余弦学习率调度器。我们将 TD 损失权重 λtd 设置为 0.3。我们为批次中每个窗口的查询填充到每个数据集中单个窗口中的最大查询数。我们在 ArXiv 附录中为每个数据集提供了实现细节。

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

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

相关文章

Java用文件流mask文本文件某些特定字段

思路 在Java中,如果你想要掩码(mask)文本文件中的某些特定字段,你可以按照以下步骤进行: 读取文本文件内容。找到并识别需要掩码的字段。用特定的掩码字符(如星号*)替换这些字段。将修改后的内…

如何恢复未格式化分区数据?看这里!

什么是未格式化分区? 未格式化或RAW文件系统的分区无法被Windows操作系统识别和挂载,因此,Windows会提示你进行格式化以创建新的文件系统。注意,不要进行格式化。通常,文件系统变为未格式化或RAW会出现以下常见错误消…

C语言练习03-字符串

一、遍历字符 #include<stdio.h>int main() {char str[100];//录入字符串printf("请输入一串字符&#xff1a;\n");scanf("%s",str);//遍历字符串char* p str;while(1){char c *p;if(c \0){//如果遍历到结束标记&#xff0c;则循环结束break;}//…

Android开发系列(六)Jetpack Compose之Box

Box是一个用来组合和控制子元素布局的组件。它可以在一个矩形区域内排列一个或多个子元素&#xff0c;并根据所提供的参数来控制它们的位置、大小和样式。 Box的功能类似传统的FrameLayout。 下面通过示例了解Box的使用方法&#xff0c;首先看一个最简单的示例&#xff0c;如下…

PyMuPDF 操作手册 - 05 PDF的OCR识别等

文章目录 六、PyMuPDF的OCR识别6.1 使用 Tesseract进行OCR6.2 使用MuPDF进行OCR6.3 使用 Python 包easyocr进行OCR识别6.4 使用 Python ocrmypdf包进行OCR识别6.5 将图像批量OCR并转换为PDF七、PDF附加、嵌入、批注等7.1 附加文件7.2 嵌入文件7.3 从文档中获取所有批注六、PyMu…

使用Python selenium爬虫领英数据,并进行AI岗位数据挖掘

随着OpenAI大火&#xff0c;从事AI开发的人趋之若鹜&#xff0c;这次使用Python selenium抓取了领英上几万条岗位薪资数据&#xff0c;并使用Pandas、matplotlib、seaborn等库进行可视化探索分析。 但领英设置了一些反爬措施&#xff0c;对IP进行限制封禁&#xff0c;因此会用到…

英文字母表

目录 一 设计原型 二 后台源码 一 设计原型 二 后台源码 namespace 英文字母表 {public partial class Form1 : Form{public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){foreach (var item in panel1.Controls){if (item ! null)…

最新五款加密软件推荐(加密软件哪个最好用)

随着信息技术的飞速发展&#xff0c;数据安全问题变得愈发重要。加密软件作为保障数据安全的关键工具&#xff0c;能够有效防止未经授权的访问和数据泄露。在众多加密软件中&#xff0c;如何选择一款合适的软件成为了许多企业和个人的关注焦点&#xff0c;本文将介绍几款目前市…

ServBay 下一代Web开发环境

ServBay是一个集成式、图形化的本地化Web开发环境。开发者通过ServBay几分钟就能部署一个本地化的开发环境。解决了Web开发者&#xff08;比如PHP、Nodejs&#xff09;、测试工程师、小型团队安装和维护开发测试环境的问题&#xff0c;同时可以快速的进行环境的升级以及维护。S…

VScode创建ROS项目 ROS集成开发环境

ROS使用VScode创建项目步骤 1.创建ROS工作空间2.启动VScode3.VScode编译ROS4.创建ROS功能包C语言开发Python语言开发 本文章介绍了如何在Ubuntu18.04系统下搭建VScode 的ROS项目 搭建项目分为一下几个步骤&#xff1a; 1.创建ROS工作空间 创建一个demo的ROS工作空间&#xff0…

C语言中操作符详解(一)

众所周知&#xff0c;在我们的C语言中有着各式各样的操作符&#xff0c;并且在此之前呢&#xff0c;我们已经认识并运用了许许多多的操作符&#xff0c;都是诸君的老朋友了昂 操作符作为我们使用C语言的一个非常非常非常重要的工具&#xff0c;诸君一定要加以重视&#xff0c;…

pretender:一款功能强大的红队MitM安全测试工具

关于pretender pretender是一款功能强大的红队MitM安全测试工具&#xff0c;该工具专为红队研究人员设计&#xff0c;该工具不仅能够进行MitM和中继攻击&#xff0c;而且还支持执行DHCPv6 DNS接管以及mDNS、LLMNR和NetBIOS-NS欺骗攻击。在该工具的帮助下&#xff0c;广大研究人…

51单片机STC89C52RC——4.1 独立按键(数码管显示按键值)

目录 目录 目的 一&#xff0c;STC单片机模块 二&#xff0c;矩阵按键模块 2.1 针脚定义 ​编辑 2.2 矩阵按键位置 2.3 如何理解按键按下后针脚的高低电平 2.3.1 错误理解1 2.3.2 错误理解2 2.3.3 正确判定按下的是那个按键的逻辑 2.3.4 判定按键按下的依次扫描程…

186.二叉树:二叉搜索树中的插入操作(力扣)

代码解决 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* Tre…

ASP.NET Core 6.0 多种部署方式

IIS 环境准备和部署 安装并配置 IIS 安装 IIS&#xff0c;在搜索输入并打开 启用或关闭 Windows 功能。 配置IIS 需要配置 ASPNETCore 部署IS 程序包安装 &#xff08;ASP.NET Core Module v2&#xff09; Download .NET 6.0 (Linux, macOS, and Windows).NET 6.0 downloads…

鸿蒙开发系统基础能力:【@ohos.accessibility (辅助功能)】

辅助功能 说明&#xff1a; 本模块首批接口从 API version 7 开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import accessibility from ohos.accessibility;AbilityState 辅助应用状态类型。 系统能力&#xff1a;以下各项对应的…

电子杂志制作工具推荐:让你轻松成为编辑大人

在这个数字化的时代&#xff0c;电子杂志已经成为信息传播的重要载体。它不仅能够满足人们对阅读的需求&#xff0c;还能够提供更加丰富、互动的阅读体验。因此&#xff0c;掌握一款好用的电子杂志制作工具&#xff0c;已经成为每个编辑大人的必备技能。接下来告诉大家一个超简…

永磁同步电机驱动死区补偿

1 死区效应及补偿 1. 1 死区效应 在本文的电机控制嵌入式系统中,逆变器为三 相电压型桥式逆变电路,如图 1 所示。 在理想状态 下,上桥臂和下桥臂的控制信号满足互补通断原则, 即上桥臂开通时,下桥臂关断,反之亦然。 而在实际 应用中,开关管的通断需要一定的开通时…

Java项目:基于SSM框架实现的绿色农产品推广应用网站果蔬商城水果商城蔬菜商城【ssm+B/S架构+源码+数据库+答辩PPT+毕业论文】

一、项目简介 本项目是一套基于SSM框架实现的绿色农产品推广应用网站果蔬商城水果商城蔬菜商城 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能…

容器之按钮盒构件演示

代码; #include <gtk-2.0/gtk/gtk.h> #include <glib-2.0/glib.h> #include <gtk-2.0/gdk/gdkkeysyms.h> #include <stdio.h>int main(int argc, char *argv[]) {gtk_init(&argc, &argv);GtkWidget *window;window gtk_window_new(GTK_WINDO…