【弱监督时间动作定位】ACGNet: Action Complement Graph Network for WSTAL 论文阅读

ACGNet: Action Complement Graph Network for Weakly-supervised Temporal Action Localization 论文阅读

  • Abstract
  • Introduction
  • Related Work
  • Action Complement Graph Network
    • Method Overview
    • Action Complement Graph
    • Graph Inference
    • Training Objective
  • Experiments
  • Conclusion
  • 阅读总结

文章信息:
在这里插入图片描述

发表于: AAAI 2022

原文链接:https://ojs.aaai.org/index.php/AAAI/article/view/20216

源码:无

Abstract

在未剪辑视频中进行弱监督时序动作定位 (WTAL) 已成为一项实用但具有挑战性的任务,因为只提供视频级标签。现有的方法通常利用现成的片段级特征,这些特征存在空间不完整性和时间不连贯性,从而限制了它们的性能。在本文中,我们通过增强片段级表示的一个简单而有效的图卷积网络,即动作补全图网络 (ACGNet),从一个新的角度解决这个问题。它使当前视频片段能够感知来自其他片段的空间-时间依赖性,这些片段可能传递互补线索,从而隐式减轻上述两个问题带来的负面影响。通过这种方式,片段级特征对空间-时间变化更具辨别力和鲁棒性,有助于更高的定位准确性。更重要的是,提出的ACGNet作为一个通用模块,可以灵活地插入不同的WTAL框架,同时保持端到端的训练模式。在THUMOS’14和ActivityNet1.2基准上的大量实验清楚地表明了所提出方法的优越性。

Introduction

在这里插入图片描述
图1:提出的动作补全图网络(ACGNet)的直觉。通过利用不同片段之间的互补信息,学习到更具辨别力的片段级动作表示,从而实现更准确的定位结果。蓝色/绿色虚线表示分类超平面。

理解视频中的人类动作是一个重要的研究方向,并且在计算机视觉社区中得到了积极的研究(Wu 等,2019;Wang 等,2020;Zolfaghari, Singh, 和 Brox,2018;Qin 等,2017;Li 等,2020;Qi 等,2020;Liu 等,2020;Feichtenhofer 等,2019;Kong 等,2020;Yang 等,2021;Ni, Qin, 和 Huang,2021)。基本步骤是构建有意义的时空表示,这不仅涉及每帧的静态特征,还涉及跨连续帧的动态依赖性。在动作理解的主要任务中,时序动作定位(Wu 等,2020;Lin 等,2018,2019)在过去几年中得到了大量的研究,并具有广泛的应用(如智能监控、视频检索和人机交互)。

为了实现准确的定位结果,传统的(完全监督的)时序动作定位 (FTAL) 方法(Shou 等,2017;Lin 等,2018,2019;Zhao 等,2017;Yang 等,2019)通常利用在具有帧级注释的视频数据集上训练的深度卷积神经网络 (CNNs)。不幸的是,随着数据集规模的快速增长,总视频长度甚至达到数十年(Abu-El-Haija 等,2016),获取如此细粒度的注释显然是不现实的。为此,弱监督时序动作定位 (WTAL)(Wang 等,2017),仅注释视频级动作类别,最近成为一个更实用的任务。为了应对 WTAL,一种常见做法是均匀地采样等长度的短片段,对这些片段进行分类器训练(通常通过多实例学习 (Paul, Roy, 和 Roy-Chowdhury 2018))使用视频级标签,并根据每个片段相对于动作类别的分类/激活分数生成定位结果。

然而,在这种范式中,均匀采样策略引发了两个严重问题,这极大地限制了定位性能。一方面,动作片段通常会遭遇遮挡、模糊、视野外等问题,因此缺乏某些空间细节。另一方面,一个完整的动作通常跨越较长的时间窗口,而一个短动作片段不足以观察该动作的全部动态。我们分别将这两个问题称为动作片段的“空间不完整性”和“时间不连贯性”,这两者都使得在 WTAL 中的预测不可靠。

在这项工作中,我们通过一个简单而有效的图卷积网络隐式地解决了这两个问题。提出的动作补全图网络 (ACGNet) 使动作片段能够利用整个未剪辑长视频中其他片段的互补线索。如图1所示,在应用我们的 ACGNet 后,这些难以分类的示例可以基于增强的特征更容易地分类。具体来说,我们不仅考虑片段级别的相似性,还在构建初始动作补全图 (ACG) 时减轻时间上相近片段的负面影响。此外,我们使这个图足够稀疏,以保留最有信息量的连接。通过图卷积,高质量片段的互补信息传播到低质量片段,从而增强每个片段的动作表示。换句话说,其他片段提供的互补信息被视为监督,以在 WTAL 场景中学习更具辨别力的特征。最重要的是,由于精心设计的损失函数,我们的 ACGNet 作为一个通用插件模块,可以灵活地嵌入到不同的 WTAL 框架中,从而显著增强现有技术的性能。

总之,我们的主要贡献有三个方面:

  • 我们提出了一种用于弱监督时序动作定位 (WTAL) 的新型图卷积网络,即动作补全图网络 (ACGNet),通过隐式利用互补信息,并共同解决空间不完整性和时间不连贯性问题,大大增强了片段级动作表示的辨别能力。
  • 我们考虑了多个关键因素(即片段相似性、时间扩散和图稀疏性)来构建初始动作补全图 (ACG)。此外,我们通过提出一种新颖的“易正样本挖掘”损失,使我们的图网络训练可行且实用,使得 ACGNet 具有灵活性,可以无缝集成到现有框架中。
  • 我们将几种最近的 WTAL 方法与所提出的 ACGNet 结合。对两个具有挑战性的数据集进行的大量实验表明,该方法能够在很大程度上进一步推动 WTAL 的技术进展。

Related Work

Fully-supervised Temporal Action Localization.

动作定位最近引起了众多研究兴趣(Zhang 等,2019;Escorcia 等,2016;Lin, Zhao, 和 Shou,2017;Lin 等,2018;Li 等,2019)。一个典型的流程是首先生成时序动作提议,然后根据这些提议分类预定义的动作。例如,(Shou 等,2017)通过时间上采样和空间下采样提出了一个卷积-反卷积滤波器,以精确检测片段边界。(Zhao 等,2017)提出了结构化片段网络,通过结构化时间金字塔来建模每个动作片段的时间结构。(Yang 等,2019)提供了一个端到端的渐进优化框架(STEP),用于更有效的时空建模。

Weakly-supervised Temporal Action Localization.关于弱监督时序动作定位 (WTAL),仅提供整个视频的类别标签,而没有每个动作实例的细粒度注释。为了解决这一挑战,现有方法通常在等时间间隔内对视频进行分段,然后通过多实例学习对每个片段进行分类。具体来说,通过计算每个片段对每个类别的激活分数,即类别激活序列 (CAS),来对动作片段进行分类。(Wang 等,2017)正式提出了“弱监督动作识别和时序定位”任务,并使用注意力权重排除不包含动作的视频片段。(Lee, Uh, 和 Byun,2020)通过引入背景类来辅助训练,抑制背景帧的激活以提高定位性能,从而提出了 BaS-Net。(Shi 等,2020)提出了一种基于帧级注意力的帧级概率分布模型 (DGAM),用于区分动作帧和背景帧。BaM (Lee 等,2021) 是 BaS-Net 的改进版本,它采用多实例学习来估计视频帧分类的不确定性并建模背景帧。

Graph-based Temporal Action Localization.最近,一些研究探讨了图学习,以融合相关类别、多个提议或多个子动作之间的信息,从而推断某一片段可能的动作。例如,P-GCN(Zeng 等,2019)根据提议之间的距离和 IoU 构建图,旨在通过使用上下文信息调整每个提议的类别和边界。G-TAD(Xu 等,2020)尝试利用时间上下文和通过图卷积网络(GCN)捕获的语义上下文,将时序动作检测视为子图定位问题。GTRM(Huang, Sugano, 和 Sato,2020)在动作分割任务中使用 GCN 来整合某一时间段内的所有动作片段。所有这些努力都是在完全监督的设置下进行的。

在 WTAL 中,(Rashid, Kjellstrm, 和 Yong,2020)建立了一个相似性图,以理解一个动作的表现以及构成该动作完整范围的子动作。值得注意的是,这与我们的目标本质上不同,我们旨在通过充分挖掘片段之间的互补信息来补充和增强特征。此外,他们设计了一个固定的 WTAL 网络,而我们的 ACGNet 作为一个通用模块,能够改进各种 WTAL 框架。此外,我们提出了不同的图设计和一种新颖的损失函数,使得 ACGNet 和 WTAL 框架能够联合训练。

Action Complement Graph Network

如上所述,输入视频被均匀地划分为多个时间片段,基于这些片段进行 WTAL。定位准确性高度依赖于片段级动作表示的辨别能力,特别是在我们弱监督的设置下。为此,我们旨在通过利用不同片段之间的互补信息来增强片段级表示。由于我们的 ACGNet 本质上是为特征增强设计的,它可以灵活地嵌入各种现有的 WTAL 框架中,例如在我们实验中使用的(Lee, Uh, 和 Byun,2020;Lee 等,2021;Shi 等,2020)。接下来,我们首先简要介绍整个提议的网络。然后,我们详细说明如何以原则性的方法构建动作补全图(ACG),以及如何基于图卷积增强特征。最后,提出了一种新颖的损失函数,使得我们的图网络训练变得可行。在将 ACGNet 嵌入到现有 WTAL 框架后,我们遵循(Lee, Uh, 和 Byun,2020;Lee 等,2021;Shi 等,2020)提供的标准流程生成最终的定位结果。

在这里插入图片描述

图2:所提出的 ACGNet 的整体框架,它以片段级特征作为输入,通过利用不同片段之间的互补线索生成增强的、更具区分性的特征。更重要的是,我们的 ACGNet 可以灵活地嵌入到各种现有的 WTAL 框架中,无需复杂的修改。

Method Overview

图2展示了所提出的 ACGNet 的整体框架。给定输入视频 V V V,我们首先将其均匀划分为固定数量的 T T T 个短时间片段 { S t } t = 1 T \{S_t\}_{t=1}^T {St}t=1T,以应对视频长度的巨大变化。然后,我们使用广泛采用的视频特征提取网络(如 I3D 网络,Carreira 和 Zisserman,2017)提取这些片段的特征。提取的片段级特征用 D D D 维特征向量 f t ∈ R D \mathbf{f}_t \in \mathbb{R}^D ftRD表示,这些特征向量可以连接形成视频级表示 F = [ f 1 , f 2 , ⋯ , f T ] ∈ R T × D \mathbf{F}=[\mathbf{f}_1, \mathbf{f}_2, \cdots, \mathbf{f}_T] \in \mathbb{R}^{T \times D} F=[f1,f2,,fT]RT×D

所提出的 ACGNet 接受原始特征 F \mathbf{F} F作为输入,并基于图卷积网络生成增强的特征 F ′ \mathbf{F}' F。动作补全图 (ACG) 是为每个视频以原则性的方法构建的,以在其节点(即片段)之间交换互补信息。在构建 ACG 之后,通过图卷积操作传播和融合节点级特征。输出的图特征可以看作是原始特征的增强和互补对应部分。最后,原始特征和增强特征结合成为最终的辨别特征 F ′ \mathbf{F}' F,可以用作任何 WTAL 方法的输入,从而在很大程度上提高其定位性能。此外,还提出了一种新颖的损失函数,以促进 ACGNet 和现有 WTAL 框架的联合训练。

Action Complement Graph

由于缺乏帧级标注,分类单个短片段是困难的。然而,视频中的多个片段(其中通常存在容易分类的动作实例)可以互为补充。因此,ACG 用于捕捉互补关系并增强每个片段的表示。

形式上,ACG 定义为 G = ( V , E ) \mathcal{G} = (\mathcal{V}, \mathcal{E}) G=(V,E) V \mathcal{V} V 表示一组节点 { v t } t = 1 T \{v_t\}_{t=1}^T {vt}t=1T,对应于 T T T 个片段级特征 { f t } t = 1 T \{\mathbf{f}_t\}_{t=1}^T {ft}t=1T,而 E \mathcal{E} E 是边集,其中 e i j = ( v i , v j ) e_{ij} = (v_i, v_j) eij=(vi,vj) 是节点 v i v_i vi v j v_j vj 之间的边。此外,我们定义 A ∈ R T × T \mathbf{A} \in \mathbb{R}^{T \times T} ART×T 为与图 G \mathcal{G} G相关的邻接矩阵。边的权重 A i j A_{ij} Aij 表示两个连接节点之间关系的强度,权重越大表示两个片段之间的关联程度越高。

接下来,我们介绍如何在同时考虑多个因素的情况下构建 ACG。

Segment Similarity Graph.一个未剪辑的长视频可能包含多个动作实例,这些实例由于不同的场景、光照条件、拍摄角度、遮挡等而存在很大差异。然而,同一动作类别的多个实例之间总是存在相似的运动模式,其中一些高质量或易于分类的片段记录了更多完整的动作实例,干扰较少,提供了相对稳定的信息,而低质量的片段也可以相互补充。例如,属于同一动作类别的两个时间片段可能在不同的区域被遮挡。在这种情况下,一个片段可以帮助另一个片段感知在其自身片段中可见的区域。因此,有必要在所有片段之间传播各种互补信息。为此,我们首先通过考虑片段级特征之间的相似性构建一个片段相似性图。

在这里,我们使用两个原始片段级特征之间的余弦距离来测量它们的相似性,并通过设置第 i i i 个和第 j j j 个节点之间的边权重 ( 即, A i j s ) (即,A_{ij}^\text{s}) (即,Aijs) 来构建相似性图 G s \mathcal{G}^\mathrm{s} Gs,如下所示:

在这里插入图片描述
其中 ( ⋅ ) (\cdot) () 表示内积, ∥ ⋅ ∥ \|\cdot\| 表示向量的模。

Temporal Diffusion Graph.由于相邻片段之间存在较高的时间依赖性,在构建图时我们也考虑了时间信息。本质上,时间上相近的片段通常有很高的概率属于同一动作,并且往往具有很高的相似性,即对应的边权重应该相对较大。此外,在实践中,特征提取网络(如我们实验中的 I3D)中的时间卷积可以在一个短时间窗口内融合相邻片段之间的时间信息。这导致时间上相近的片段之间的特征相似性更高(即,当 i → j i \to {j} ij时, A i j s A_{ij}^\mathrm{s} Aijs 往往较大)。因此,如果我们基于上述事实构建时间图并直接将其添加到片段相似性图中,互补信息的传播可能会被限制在一个短时间窗口内,不能在时间上相距较远的片段之间成功共享。例如,包含高质量辨别动作实例的第 i i i 个片段 S i S_i Si 无法补充那些时间上远离 S i S_i Si的其他较差的实例(属于同一动作)。

因此,我们尝试尽可能广泛地传播互补信息,以增强未剪辑长视频中更多片段的辨别能力,从而提高定位性能。为此,我们通过在较远的节点之间施加较大的边权重来构建时间扩散图。具体而言,我们构建时间扩散图 G t \mathcal{G}^\mathrm{t} Gt 如下:

在这里插入图片描述

其中Z是控制扩散程度的超参数。

Overall Sparse Graph.通过简单地结合两个子图 G s \mathcal{G}^\mathrm{s} Gs G t \mathcal{G}^\mathrm{t} Gt,我们可以得到最终的动作补充图 G \mathcal{G} G,其邻接矩阵定义如下:

在这里插入图片描述

其中,两个矩阵 A s \mathbf{A}^\mathrm{s} As A t \mathbf{A}^\mathrm{t} At 分别包含 A i j s A_{ij}^\mathrm{s} Aijs A i j t A_{ij}^\mathrm{t} Aijt 作为它们的 ( i , j ) (i,j) (i,j) 元素, α \alpha α是用于在两个子图之间实现更好权衡的超参数。

由于两个子图的边权重大多数都大于零,简单地将它们结合形成 ACG 会导致非常密集的图。如果我们直接基于这个密集图来学习增强特征,我们可能会为每个节点/片段获得相似的全局视频级特征,因为每个节点都需要感知所有其他节点的特征。这会隐式地妨碍片段级特征的辨别能力,从而导致定位结果不够准确。因此,有必要使图足够稀疏,只保留那些最具信息量的节点。具体而言,我们根据阈值 l a m b d a lambda lambda 和 Top-K 排名列表设定稀疏化标准。最终的稀疏 ACG 构建如下:

在这里插入图片描述

其中, sgn ( ⋅ ) \text{sgn}(\cdot) sgn() 是一个指示函数,即 sgn ( x ) = 1 \text{sgn}(x)=1 sgn(x)=1 如果 x > 0 x>0 x>0;否则 sgn ( x ) = 0 \text{sgn}(x)=0 sgn(x)=0 rank i ( j ) \text{rank}_i(j) ranki(j) 是第 j j j个节点在所有与第 i i i 个节点相邻的节点中的边权重排名。注意,我们采用这两个标准 λ \lambda λ K K K 来使图变得稀疏,因为仅仅采用阈值无法去除那些在类似场景中但属于不同动作类别的模糊片段。这一直观也得到了我们实验中的消融研究的支持。

Graph Inference

Graph Average.在构建最终的稀疏 ACG 后,将所有节点级特征进行聚合的一个简单方法是通过考虑边权重来计算平均特征,如下所示:

在这里插入图片描述
其中, A ^ i j \hat{A}_{ij} A^ij 是矩阵 A ^ \hat{\mathbf{A}} A^ ( i , j ) (i,j) (i,j)元素,它是相对于 A ′ \mathbf{A}^\prime A 的按行归一化邻接矩阵。在实践中,我们发现平均特征 f i A V G \mathbf{f}_i^\mathrm{AVG} fiAVG 可以在一定程度上交换互补信息,从而取得满意的性能,如后续实验所示。

Graph Convolution.图卷积。除了上述的平均特征外,我们将图卷积引入到我们的 ACGNet 中,以更好地聚合节点级特征。对于具有 M M M 层的图卷积网络(GCN),第 m m m 层 ( 1 ≤ m ≤ M 1 \leq m \leq M 1mM) 的图卷积操作如下:

在这里插入图片描述

其中, F ( m ) \mathbf{F}^{(m)} F(m) 是第 m m m 层图卷积层生成的特征, F ( 0 ) = F ~ \mathbf{F}^{(0)}=\tilde{\mathbf{F}} F(0)=F~ 是原始特征, F G C N = F ( M ) \mathbf{F}^{\mathrm{GCN}} = \mathbf{F}^{(M)} FGCN=F(M) 是最后一层图卷积层的最终输出, W ( m ) ∈ R D × D \mathbf{W}^{(m)} \in \mathbb{R}^{D \times D} W(m)RD×D 是第 m m m层的可训练参数, σ ( ⋅ ) \sigma(\cdot) σ()是 ReLU(Nair 和 Hinton 2010)激活函数。

最后,原始特征与图平均特征以及 GCN 的输出特征结合,得到增强的区分特征:

在这里插入图片描述
由于 F ′ \mathbf{F}^\prime F 是原始特征的增强版本,不同的 WTAL 方法可以用 F ′ \mathbf{F}^\prime F 替换其原始输入,然后进一步执行后续的定位任务。

Training Objective

为了发现易于分类的片段以增强其他相似片段的特征,使更多片段更容易被分类,我们提出了一种基于“易分类正样本挖掘”(EPM)策略的新颖损失函数,以充分训练嵌入我们 ACGNet 的联合 WTAL 网络:

在这里插入图片描述
其中, f n , i ′ \mathbf{f}_{n,i}^{\prime} fn,i 是针对第 n n n 个视频中第 i i i 个片段的 ACGNet 输出特征, f n , j \mathbf{f}_{n,j} fn,j p n , j p_{n,j} pn,j 分别是同一视频中第 j j j 个片段的原始特征和所有类别中的最大激活得分。

根据公式(8),ACGNet 的输出特征被鼓励与相似片段的原始特征保持一致,特别是那些可以以最高置信度成功分类的“易分类正样本”。换句话说,“易分类正样本”可以被视为特征空间中的类别中心,我们的目标是将其他相似片段推向这些类别中心。因此,更多的动作片段变得更容易区分,最终实现更准确的定位结果。

Experiments

在这里插入图片描述
在这里插入图片描述

Conclusion

本文提出了 ACGNet,旨在增强视频片段级表示的区分能力以用于 WTAL。来自同一视频中其他片段(特别是易于分类的片段)的互补线索,为学习更具区分性的特征提供了某种监督。我们的 ACGNet 作为一个通用模块,灵活地嵌入到各种现有的 WTAL 框架中,在两个具有挑战性的基准上显著提升了最先进的性能。

阅读总结

这不就是一个很常规的图卷积网络吗?

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nvm node yarn 的安装教程

一、完全卸载旧的nodejs 1、控制面板卸载 nodejs 2、删除node的安装目录 3、删除C盘中遗留的文件 4、将有关node的环境变量删除 5、查看卸载是否成功 npm -v node -v二、安装并配置NVM 1、下载NVM 地址:https://github.com/coreybutler/nvm-windows/release…

移除元素OJ详解

一、题目介绍 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。 假设 nums 中不等于 val 的元素数量为 k,要通过此题,您需要执行以下操作&am…

资料分析公式

年均增长量 年均增长率

SpringIOC和SpringAOC

lombok插件 XML<!-- 加载资源文件 --><context:property-placeholder location"classpath:jdbc.properties"></context:property-placeholder><!-- 注入数据源 --><bean id"dataSource" class"com.mchange.v2.c3p0.ComboP…

HPA 与pod调度

HPA 自动更新工作负载资源&#xff08;例如 Deployment 或者 StatefulSet&#xff09;&#xff0c; 目的是自动扩缩工作负载以满足需求。 绑定到deploy上&#xff0c;控制pod 依托于metrics-server HorizontalPodAutoscaler 水平pod自动扩缩&#xff1a;意味着对增加的负…

C语言实现单链表

一、什么是单链表 1.链表就是一种在物理存储上各个节点非连续的&#xff0c;随机的&#xff0c;元素的逻辑顺序是通过链表中的指针链接的次序而实现的。 图示&#xff1a; 二、单链表中节点的定义 #include<stdio.h> #include<stdlib.h> #include<string.h>…

机械学习—零基础学习日志(数学基础汇总2)

零基础为了学人工智能&#xff0c;正在艰苦的学习 我比较推荐&#xff0c;《三个月从零入门深度学习&#xff0c;保姆级学习路线图》的整体学习思路&#xff0c;但因为数学基础太差&#xff0c;而且针对所需的数学系统知识&#xff0c;我依然没有很明确的学习方向。 所以直接使…

高性能日志系统 日志格式化输出逻辑

概述 日志消息是由许多要素组成&#xff0c;而日志格式化的主要作用&#xff0c;即是对日志消息进行格式化&#xff0c;组织成自己指定好的字符串结构 总体架构 日志消息&#xff08;LogMsg&#xff09; 用于存储各种日志信息&#xff0c;例如存储日志的级别、时间、行号等信息…

Summernote 富文本编辑器的内容变成只读模式

我 | 在这里 ⭐ 全栈开发攻城狮、全网10W粉丝、2022博客之星后端领域Top1、专家博主。 &#x1f393;擅长 指导毕设 | 论文指导 | 系统开发 | 毕业答辩 | 系统讲解等。已指导60位同学顺利毕业 ✈️个人公众号&#xff1a;热爱技术的小郑。回复 Java全套视频教程 或 前端全套视频…

【安卓】动态加载布局技巧

文章目录 使用限定符常见限定符 使用最小宽度限定符 使用限定符 修改FragmentTest项目中的activity_main.xml文件 <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:orientation"horizontal"android:layout_width&quo…

JavaScript constructor原型原型继承

constructor 在 JavaScript 中&#xff0c;构造函数是一种特殊的函数&#xff0c;使用 new 关键字来调用&#xff0c;用于创建对象实例。JavaScript 中的构造函数通常通过 function 关键字定义。 例如&#xff1a; function Person(name, age) {this.name name;this.age a…

4.MySQL数据类型

目录 数据类型 ​编辑数值类型 tinyint类型 bit类型 float类型 decimal类型 字符串类型 char类型 varchar varchar和char的区别 日期和时间类型 数据类型 数值类型 说明一下&#xff1a;MySQL本身是不支持bool类型的&#xff0c;当把一个数据设置成bool类型时&#x…

C#复习之封装_构造函数,析构函数,垃圾回收

知识点一&#xff1a;构造函数 基本概念 在实例化对象时 会调用的用于初始化的函数 如果不写 默认存在一个无参构造函数 构造函数的写法 1.没有返回值 2.函数名和类名必须相同 3.没有特殊需求时 一般都是public的 4.构造函数可以被重载 5.this代表当前调用该函数的对象自己 注…

【多线程】synchronized原理

文章目录 一、锁升级 (面试经常考)偏向锁 二、锁消除三、锁粗化锁的粒度 四、相关面试题 结合 锁策略&#xff0c;我们就可以总结出&#xff0c;synchronized具有以下特性&#xff1a; 乐观悲观&#xff0c;自适应重量轻量&#xff0c;自适应自旋挂起等待&#xff0c;自适应非…

Gradio 快速开发网页应用

Gradio 是一个开源的 Python 框架&#xff0c;可以快速开发页面&#xff0c;Gradio 主要用于 AI 模型 Demo 的开发&#xff0c;通过几行代码可以快速生成一个 Web Demo&#xff0c;由于 AI 算法工程师使用的都是 Python 语言&#xff0c;使用 Python 开发 Demo 会相对简单&…

演示:基于WPF的DrawingVisual开发GS(2019)1822号矢量中国地图一

一、目的&#xff1a;基于WPF的DrawingVisual开发的矢量地图 二、预览 默认样式 深黑样式 深蓝色样式 深蓝色透明样式 演示&#xff1a;基于WPF的DrawingVisual开发GS(2019)1822号矢量中国地图二-CSDN博客VS2022&#xff0c;net7演示&#xff1a;基于WPF的DrawingVisual开发GS…

DVWA—SQL(Blind)实例

DVWA—SQL Injection&#xff08;Blind&#xff09;实例 预备知识 在SQL注入中会有回显注入和盲注入的形式&#xff0c;在前面的文章中展示了回显注入的情况&#xff0c;而盲注入就是当我输入查询语句的时候数据并不会直接显示在页面中而是以程序员规定的输出格式来进行显示&…

【数据结构和算法】(基础篇二)——链表

链表 数组最麻烦的地方就是其在建立之后大小固定&#xff0c;对于增删数据很不方便。链表的出现解决了这个问题&#xff0c;链表的元素不是在内存中连续存储的&#xff0c;而是通过指针链接在一起的节点集合&#xff0c;这样的设计让链表有了动态的大小。链表是树和图结构的基…

Windows11 WSL2 Ubuntu编译安装perf工具

在Windows 11上通过WSL2安装并编译perf工具&#xff08;Linux性能分析工具&#xff09;可以按以下步骤进行。perf工具通常与Linux内核一起发布&#xff0c;因此你需要确保你的内核版本和perf版本匹配。以下是安装和编译perf的步骤&#xff1a; 1. 更新并升级系统 首先&#x…

Unity数据持久化 之 Json序列化与反序列化

语法规则可以看这篇文章&#xff1a;Unity数据持久化 之 Json 语法速通-CSDN博客 Q:Unity是通过什么来对Json文件进行处理的&#xff1f; A:JsonUtility&#xff1a;Unity 提供了 JsonUtility 类&#xff0c;用于将对象序列化为 JSON 字符串或将 JSON 字符串反序列化为对象。…