【视频异常检测】Diversity-Measurable Anomaly Detection 论文阅读

Diversity-Measurable Anomaly Detection 论文阅读

  • Abstract
  • 1. Introduction
  • 2. Related Work
  • 3. Diversity-Measurable Anomaly Detection
    • 3.1. The framework
    • 3.2. Information compression module
    • 3.3. Pyramid deformation module
    • 3.4. Foreground-background selection
    • 3.5. Training and inference
  • 4. Experiments and Analysis
  • 5. Conclusion

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

发表于:CVPR 2023
原文链接:https://arxiv.org/abs/2303.05047
源码:https://github.com/FlappyPeggy/DMAD

Abstract

基于重建的异常检测模型通过抑制对异常的泛化能力来实现其目的。然而,多样化的正常模式因此也不能被很好地重建。虽然一些努力已经被做出来通过建模样本多样性来缓解这个问题,但由于不希望的异常信息的传递而导致了捷径学习。在本文中,为了更好地处理这个权衡问题,我们提出了多样性可测量异常检测(DMAD)框架,以增强重建多样性,同时避免对异常的不良泛化。为此,我们设计了金字塔变形模块(PDM),它从重建的参考到原始输入中估计多尺度变形场,以建模不同的正常模式并测量异常的严重程度。结合信息压缩模块,PDM本质上将变形与原型嵌入分离开来,并使最终的异常分数更可靠。对监控视频和工业图像的实验结果证明了我们方法的有效性。此外,DMAD在面对受污染的数据和类似异常的正常样本时同样有效。

1. Introduction

视觉异常检测是计算机视觉领域中的一个基本且重要的问题,广泛应用于视频监控和工业检测等领域。它旨在从已知类别中检测异常值和从未见过的类别中发现新的模式。这项任务非常具有挑战性,因为异常数据的分布多样且收集成本高昂。因此,我们必须在无监督设置下基于仅有的正常样本构建模型,以便高度区分正常和异常样本。

在过去的十年中,基于重构的方法在异常检测方面取得了巨大进展。这些方法使用自动编码器(AEs)或生成对抗网络(GANs)来从任何输入图像或视频帧中重新构建正常对应物。基于AE的方法首先将输入压缩以丢弃超出正常原型的信息,然后解码嵌入以重新构建输入。根据估计的重构误差,可以检测出异常。

然而,基于重构的方法在异常检测方面的性能长期受到一个严峻问题的限制,即在重构多样化正常和检测未知异常之间的权衡。为了更容易区分异常,先前的工作施加了更多的约束来抑制自动编码期间的异常信息,这导致对多样化正常实例的高重构误差。例如,在图1和图2g中,严重变形的正常(也称为异常样本)“7”的样本甚至比异常样本“4”的误差更高。为了更好地重构多样化的正常,每个查询向量对应于内存中的多个原型,即使异常投影远离原型,也可能被组合到异常嵌入中。因此,在原型嵌入之间的低可能性区域分布的异常很难从多样化正常中识别出来。MNAD引入了跳跃连接以进行多样化重构,并添加了额外的约束以解决错误组合问题。但是后者通过跳跃连接强制模型传输更多不受约束的异常部分信息,导致了捷径学习和不受欢迎的异常重构。

在这里插入图片描述

图1. MNIST数据集中异常检测困难的示例。原型由橙色三角形表示,异常由红色点表示。在这种情况下,基于重构误差或高维特征空间中的距离几乎无法检测到异常。我们的解决方案在图2中进行了说明。

解决上述权衡问题的关键是找到一个适当的多样性度量,该度量能够正相关地反映正常和异常样本的多样性,同时与异常的严重程度相关联。有了这样的度量,我们就不需要对抗正常重构的不完美或者不受欢迎的异常重构,因为异常可以通过多样性度量和重构误差一起更准确地检测出来。需要注意的是,像素级的重构误差不是多样性的理想度量,因为高误差区域经常会将多样化的正常与异常混淆在一起,例如,具有结构变形的正常与颜色接近背景的异常可能会产生不可靠的重构误差。

在本文中,我们提出了一种多样性可测量的异常检测(DMAD)框架,以增强重构多样性的可测量性,从而更准确地测量异常性。我们的基本思想是将重构分解为原型正常的紧凑表示和更多样化的正常与异常的可测量变形,从而将被低估的重构误差通过可以正确测量的多样性进行补偿。为此,DMAD框架包括一个金字塔变形模块(PDM)来建模和测量多样性,以及一个信息压缩模块(ICM)来学习原型正常模式。

受[4, 15]的启发,我们假设异常(例如在视频监控中)可以被表示为外观的显着变形,包括位置变化和微小运动。相比之下,各种各样的正常样本可以被表示为较弱的变形,因此可以很容易地与异常样本区分开来。因此,我们设计了PDM来建模正常样本的多样性以及异常的严重程度。具体来说,PDM学习了描述像素级转换方向和距离的分层二维变形场(图2c,d),从参考图(图2b,由内存中的原型重构而成)到原始输入。在ICM中,我们学习了作为稀疏原型的压缩表示。因此,单个内存项足以表示每个正常聚类。这比其他基于内存的方法更紧凑,其他方法通常需要多个内存项。通过将PDM与ICM集成,DMAD基本上将变形信息(图2e)与类原型分离开来,使最终的异常得分更具有区分性(图2f)。

在这里插入图片描述

图2. 我们的多样性可测方法解决检测困难的示意图。白色数字表示异常分数。a) 原始输入; b) 重构的参考图像; c) 粗略变形; d) 细微变形; e) 多样性的度量; f) 添加了变形信息的误差图为类似异常的样本分配了比真实异常更低的异常分数; g) 像素级重构误差产生了不正确的异常分数。

我们在视频监控和工业缺陷检测的场景中评估我们的异常检测框架。为了在后一种情况下应用DMAD,我们提出了PDM的一种变体PPDM,以处理纹理重建中的误报问题。大量的实验结果验证了我们方法的有效性。此外,即使在受污染的数据和异常样法线面前,我们的方法也能很好地工作。我们工作的主要贡献如下:

  • 我们引入了多样性可测量的异常检测框架,使基于重构的模型能够在重构各种各样的正常模式和检测未知异常之间实现更好的平衡。
  • 我们提出了金字塔变形模块来实现多样性度量,其中变形信息明确地与紧凑的类别原型分离,由此产生的多样性度量与异常性呈正相关。
  • 我们的方法在视频异常检测和工业缺陷检测方面优于先前的作品,并且在面对受污染数据和类似异常的正常样本时表现良好,展示了其广泛适用性和稳健性。

2. Related Work

Anomaly detection.基于重构的方法对正常数据的分布进行建模,并将重构误差较高的样本标记为异常,因为仅使用正常数据训练的模型无法重构异常数据。一些方法使用自动编码器来检测异常,例如卷积自动编码器[9]及其变种[24, 40]。其他方法引入额外的约束或记忆来使模型更具区分性。例如,稀疏编码[25, 39]通过正则化减少表示的冗余性;带记忆的自动编码器(MemAE)[8]使用外部记忆库记忆训练数据集中出现的正常模式;变分自动编码器[10, 35]假设正常数据的先验分布以约束非线性表示能力;HF2VAD [20]使用CVAE[33]捕获动态之间的相关性。帧预测[19]假设视频中的异常样本不能由不包含未见信息的过去帧表示,并迫使模型编码不同帧之间的变化。此外,自动编码器还可以与外部对象检测器[7, 14, 20]结合使用,以捕获与背景无关的外观。

尽管这些方法通常表现良好,但由于重构和区分之间的权衡问题,它们往往难以区分异常样本和类似异常的正常样本。在我们的框架中,利用金字塔变形模块和信息压缩模块来解决这一权衡问题,显著提高了异常检测性能。

Memory network.生成模型在特征空间中连续映射,可能会将异常赋予比正常样本更高的概率[28]。最近的研究[8,11,20,29]探索了使用离散外部存储器来生成已见的正常模式的应用,即使输入是异常的。MemAE [8]提出了一种记忆增强型自编码器,它使用编码器的信息作为查询,并从存储模块中获取检索到的正常模式。MNAD [29]引入了跳跃连接来缓解多样化的正常模式可能产生高重构误差的问题。HF2VAD [20]将存储模块扩展到多级存储,并使用额外的估算器[3,13]来明确建模运动信息并过滤背景中的噪声。DAAD [11]使用分块存储器来增加存储器的特异性。

在大多数现有的工作中,存储模块输出存储项的线性组合,这可能导致类似正常的异常不良重构。而它们并没有明确考虑到,对应于相同存储格的实例可能位于接受域的不同位置。在我们的方法中,通过将嵌入压缩为单个存储项来缓解这些问题,以确保输出绝对正常。

Transformation modeling.视频帧之间的转换是异常检测的关键线索。一些方法[7, 14, 19, 20]使用外部对象检测器或光流估计器隐式或显式地建模运动信息。在转换估计器中,光流估计[13]被广泛研究,旨在估计连续帧之间的像素级运动。此外,对成对图像之间的对应建模也应用于2D几何匹配[30]和3D图像配准[36]以获得图像变形场。STN [15]学习将原始图像自身进行转换,以提高识别算法的性能。RegAD [12]使用特征级仿射配准来重新定位特征而不改变嵌入。

然而,成对转换建模仅关注模式变化,因此无法检测静态异常。而预训练的转换估计器在不同场景中引入了泛化误差。相比之下,我们通过在端到端训练中将转换与原型内存分离和测量来解决这些问题。

3. Diversity-Measurable Anomaly Detection

在本节中,我们首先分析了基于重构的异常检测的目标,并提出了一个多样性可测量的框架,以解决现有工作中的权衡问题。然后,我们介绍了信息压缩模块和金字塔变形模块(PDM)作为该框架的实现。最后,我们解释了训练和推断过程,以及如何使用PDM的变体将该框架应用于缺陷检测。

3.1. The framework

给定输入 x x x,基于自编码器的方法旨在通过最小化以下重构损失(其中 ∥ . ∥ 2 \lVert.\rVert_2 .2只是一种重构损失的类型)来建模正常数据分布:
在这里插入图片描述

对于编码器 f ( ⋅ ) f(·) f()、解码器 g ( ⋅ ) g(·) g()、潜变量 z z z(在这些情况下是指离散记忆项)以及对应于其约束 R 1 ( ϕ ) R_1(\phi) R1(ϕ)的受限特征映射函数 ϕ ( ⋅ ) \phi(·) ϕ(),我们考虑最小化上述重构损失。为了生成多样化的正常模式,引入了跳跃连接和连接 [ ⋅ , ⋅ ] [·, ·] [⋅,⋅][29]:
在这里插入图片描述
然而,由于数据分布的多样性,先前的方法不得不面对代表多样化正常情况和检测异常之间的冲突。其固有原因在于多样性编码[·, f(x)]包含无法准确测量的冗余信息。

在这项工作中,我们提出了一个基于原则的框架,称为多样性可测量异常检测(DMAD),以缓解这种冲突。基本思想是限制传输到 g ( ⋅ ) g(·) g() 的异常信息,同时测量和建模其余部分的多样性。为此,我们设计了信息压缩模块 ϕ ( ⋅ ) \phi(·) ϕ() 和多样性感知模块 ψ ( ⋅ ) ψ(·) ψ(),在 DMAD 框架下:
在这里插入图片描述
其中, ∘ \circ 表示聚合运算符。通过适当设计 ϕ ( ⋅ ) \phi(·) ϕ() ψ ( ⋅ ) ψ(·) ψ()和约束条件,重建损失的优化可以提高特征嵌入的紧凑性。这样,多样化的表示通过 ϕ ( ⋅ ) \phi(·) ϕ()映射到内存中的紧凑原型。输入 x 相对于其重建的多样性由 ψ ( ⋅ ) ψ(·) ψ()表示。在 ψ ( ⋅ ) ψ(·) ψ()中测量到的多样性可以弥补对重建误差的低估,这是产生准确异常分数的关键因素。

在满足以下条件(图3)的前提下,该框架可以实现我们的目标:1. ψ ( ⋅ ) ψ(·) ψ()能够从原型模式到任何正常输入中学习所有的多样化信息,以确保正常样本不会产生高异常分数;2. ψ ( ⋅ ) ψ(·) ψ()生成的变形与多样性度量呈正相关;3. 由 ψ ( ⋅ ) ψ(·) ψ()表示的有关 x x x 的原型信息需要最小化。在接下来的小节中,我们将解释如何设计模块来满足这些条件。

在这里插入图片描述

图3.DMAD 框架的三个条件。线条的颜色表示多样性(异常程度)的测量值;灰色区域表示测量的不确定性;双虚线箭头表示边界的可能范围。最后两行分别表示 DMAD 和传统的基于重构的方法。

3.2. Information compression module

根据 [35],我们采用 VQ-Layer 作为信息压缩模块来学习 ϕ ( ⋅ ) \phi(·) ϕ(),给定嵌入 f ( x ) ∈ R D × H ′ × W ′ f(x)∈R^{D×H'×W'} f(x)RD×H×W 作为查询 z e = f ( x ) z^e = f(x) ze=f(x),并且记忆 z ∈ R D × N z ∈ R^{D×N} zRD×N。然后,通过寻找具有最小 L 2 L2 L2 距离的记忆项(图 4 中的“搜索”),将 z e z_e ze 量化为单个记忆特征立方体 z q ∈ R D × H ′ × W ′ z_q ∈ R^{D×H'×W'} zqRD×H×W
在这里插入图片描述
这里, z n z_n zn 表示第 n n n 个记忆项, h ∈ { 1 , ⋅ ⋅ ⋅ , H ′ } h ∈ \{1, · · · ,H'\} h{1,⋅⋅⋅,H} w ∈ { 1 , ⋅ ⋅ ⋅ , W ′ } w ∈ \{1, · · · ,W'\} w{1,⋅⋅⋅,W} 表示 z q z_q zq z e z_e ze 中相同的位置。使用 stop-gradient 运算符 S G ( ⋅ ) SG(·) SG() 来更新其参数,压缩损失 L c o m L_{com} Lcom 由超参数 β β β 加权组合:
在这里插入图片描述
可以使用信息容量较低的跳跃连接(图 4 中的 “ C o m p Comp Comp.”)来进一步提高重建质量,而不会引入过多的泛化(即对中间特征使用带有 stop-gradient 运算符的 Conv-Layer,其缩减因子为 16 或更大)。

在这里插入图片描述

图 4. 多尺度金字塔形变场的两个版本多样性可测量异常检测框架。用 O \Omicron O 表示前向形变过程,反向过程为 O T \Omicron^T OT。a) PDM 版本在重建后计算前向形变 O \Omicron O。b) PPDM 版本采用循环一致的前向-反向形变,前向形变应用在输入上。

3.3. Pyramid deformation module

我们将未知的异常分为以下三种类型:未见类别(例如,新颖的对象)、全局异常(例如,意外的移动)和已见类别的局部异常(例如,奇怪的行为和工件损坏)。未见类别往往可以根据重建结果轻松检测,但后两种类型通常会与多样化的正常样本混淆。为了将这些异常与正常样本区分开来,我们使用可测量的形变来表示多样性,即重建参考图像与原始输入之间的形变,这样,正常样本中会出现轻微的形变,而异常样本中会出现剧烈的形变。

受到 STN 和 DCN [4,15] 的启发,我们引入了金字塔形变模块(PDM),该模块明确地学习具有分层尺度的形变场,以模拟不同异常类型的运动、行为和缺陷,如图 4a 所示。具体而言,在特征提取之后, ψ ( ⋅ ) ψ(·) ψ() 使用 K K K 个头来计算偏移量 O \pmb{\Omicron} O = { O 1 , ⋅ ⋅ ⋅ , O K } \{O_1, · · · , O_K\} {O1,⋅⋅⋅,OK},对应 K K K 个粗到细的形变:
在这里插入图片描述
这里的 P E ( ⋅ ) PE(·) PE() 是位置嵌入算子 [18], h h h : R C × H × W → R 2 × { H 1 × W 1 , ⋅ ⋅ ⋅ , H K × W K } R^{C×H×W} → R^{2×\{H_1×W^1,··· ,H^K×W^K\}} RC×H×WR2×{H1×W1,⋅⋅⋅,HK×WK} 是形变估计器,生成偏移向量, U p ( ⋅ ) Up(·) Up() 是上采样函数,将 K K K 个头的输出调整为与原始图像相同大小。在我们的实验中,我们设置 K K K = 2,其中 O 1 O_1 O1 用于估计粗略形变(例如,对应于行人的位置或工件的摆放位置),而 O 2 O_2 O2 用于估计细微形变(例如,对应于行人行为或工件细节)。

考虑到没有位置信息的量化嵌入可能导致不准确的重构,我们还为解码器 g ( ⋅ ) g(·) g() 引入位置嵌入算子。然后,我们将 O \pmb{\Omicron} O 聚合到重构的参考图 g ( P E ( z q ) ) g(PE(z^q)) g(PE(zq)) 上,得到由第 k k k 层形变场校准的 x ~ k ( k = 1 , . . . , K ) \tilde{x}_k(k = 1, . . . ,K) x~k(k=1,...,K)
在这里插入图片描述
其中, ∘ \circ 是在此实现中带有参考坐标的网格采样函数(图 4 中的“Agg.” 和 “Coord.”)。然而,针对 ψ ( x ) ψ(x) ψ(x) 最小化无约束的重构损失可能会导致编码器 f ( ⋅ ) f(·) f() 的退化解。为了解决这个问题,我们通过梯度运算和强度损失添加了平滑度损失的约束,如下所示:
在这里插入图片描述

3.4. Foreground-background selection

将背景信息存储在存储器中将破坏嵌入的紧凑性并且需要大量的存储器项。此外,变形估计不应应用于背景。一些方法使用外部估计器来消除背景的干扰,但是在不同场景中的泛化不能得到保证,并且额外的噪声将不可避免地被引入。由于固定视角视频具有强大的先验知识,我们使用可学习的模板 x b g x_{bg} xbg 来建模背景,并使用 f m ( ⋅ ) f_m(·) fm() 生成一个二进制掩码来指示像素是否属于前景或背景。第 k k k 个头部的最终重构 x ~ k \tilde{x}_k x~k 为:
在这里插入图片描述

3.5. Training and inference

Training phase.一旦我们获得了重构 x ~ k \tilde{x}_k x~k,我们就可以计算重构损失 L r e c L_{rec} Lrec 如下:
在这里插入图片描述
这里的 D i s ( ⋅ ) Dis(·) Dis() 是样本空间中的距离函数。回想一下方程 3 中的优化目标,我们使用 L c o m L_{com} Lcom L d f L_{df} Ldf 实现了两个约束。最后,训练通过最小化总损失来完成:
在这里插入图片描述
Inference phase.在推断阶段,我们使用 O \pmb{\Omicron} O 和重构损失来计算输入样本 x x x 的误差图:
在这里插入图片描述
基于局部最大值计算图像级异常分数:
在这里插入图片描述
其中, ⊗ ⊗ 表示卷积运算符, k ⋆ k^{\star} k 是用于异常图的卷积核。 α α α 是一个权衡参数。也就是说,重构损失和变形共同决定了异常分数,这比传统的基于重构的方法更有效,如图 3 所示。

4. Experiments and Analysis

在这里插入图片描述

5. Conclusion

在本文中,我们提出了一种基于重建的多样性可测量异常检测框架,该框架同时增强了异常区分能力和重建多样性。为了实现这一目的,我们提出了金字塔变形模块与信息压缩模块一起使用。PDM显式地模拟了从参考到原始输入的多尺度变换场,而不依赖于外部估计器。因此,可以准确重建多样性正常模式并且可以准确测量异常的严重程度。对视频和图像基准数据的实证研究表明了我们工作的有效性和适用性。在未来的研究中,我们将进一步探索多样性感知模型用于异常检测。

注:
我并没有对图像一场检测那部分进行过多关注,有时间的话再研究工业一场检测那部分的。

更新:简单跑了一下代码,这两天看看代码看看
在这里插入图片描述

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

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

相关文章

第七课-----分支切平面

割平面方法的基本思想是对于一个优化问题而言,通过不断添加约束条件来切割可行域, 最终将可行域不断变小,相当于搜索空间变小。在LP中讲过,一个等式约束就等价于一个超平面,一个不等式约束就代表一个半空间&#xff0c…

从零开始搭建游戏服务器 第二节 Actor模型与应用

目录 复习本节内容正文什么是Actor模型如何应用创建Actor基类创建RootActor创建AkkaContext创建ConnectActorManager和ConnectActor生成actor并发送消息给它 课后作业结尾 复习 上一节我们使用gradle构建了一个多模块系统。 并且在登录服启动了Netty服务,监听confi…

spacy进行简单的自然语言处理的学习

自然语言处理基本概念 概念:自然语言处理,是让机器理解人的语言的过程。 作用:通过使用自然语言处理,机器可以理解人的语言,从而进行语义分析,例如:从一句话中判断喜怒哀乐;从一段文…

lua脚本的基础内容

官方地址:http://luajit.org/ 官方wiki地址:http://wiki.luajit.org/Home 推荐书籍: OpenResty 最佳实践:https://moonbingbing.gitbooks.io/openresty-best-practices/content/ lua基础文档:https://www.runoob.com/l…

数据库-mysql安装

我们使用两种方式安装配置mysql数据库 一种采用无安装绿色版 一种采用官方提供的msi,windows安装版 亲测两种都可运行,有的电脑可能其中一种不能运行那可以尝试另外一种,有条件的同学可以试试docker版。 mysql安装 初次安装mysql之前建议大家…

消息队列思想学习(以及池化思想延展)

目录 消息队列的功能 消息中间件必备 池化思想以及弹性线程池的设计 弹性连接池 [核心参数:初始连接数,最大连接数,最大空闲时间] 弹性线程池 [核心参数:coreThreadCount, maxThreadCount] 引言:为啥要把消息队列…

JUC之Java对象内存布局

Java对象 对象在堆中的存储布局 它保存了什么 对象指向它的类元数据的指针,虚拟机通过这个指针来确定这个对象是哪个类的实例 对象头有多大?在64位系统中,Mark Word占了8个字节,类型指针占了8个字节,一共是16个字…

uniapp——第2篇:编写vue语法

前提,建议先学会前端几大基础:HTML、CSS、JS、Ajax,还有一定要会Vue!(Vue2\Vue3)都要会!!!不然不好懂 一、去哪写? 就在【pages】的你的人一个页面文件夹里的【.vue】文…

中间件 | RPC - [Dubbo]

INDEX 1 Dubbo 与 web 容器的关系2 注册发现流程3 服务配置3.1 注册方式 & 订阅方式3.2 服务导出3.3 配置参数 4 底层技术4.1 Dubbo 的 spi 机制4.2 Dubbo 的线程池4.3 Dubbo 的负载均衡策略4.3 Dubbo 的协议 1 Dubbo 与 web 容器的关系 dubbo 本质上是一个 RPC 框架&…

计算机二级Python题目13

目录 1. 基本题 1.1 基本题1 1.2 基本题2 1.3 基本题3 2. turtle画图 3. 大题 3.1 大题1 3.2 大题2 1. 基本题 1.1 基本题1 lseval(input()) s"" for item in ls:if type(item)type("香山"):s item print(s) 1.2 基本题2 import random random.se…

使用tui-image-editor 图片编辑 标注图片

需求背景: 鼠标悬浮在图片上 出现编辑按钮 点击编辑 对该图片进行编辑(输入文案、涂鸦、标记、裁剪等) 可以体验一下它线上编辑器 Image-editor | TOAST UI :: Make Your Web Delicious! 使用 首先在你的前端项目中安装: np…

python-在图片上标实心圆点

代码: from PIL import Image, ImageDraw# 打开图像 image_path path_to_your_image.jpg image Image.open(image_path)# 创建一个可以在上面绘图的对象 draw ImageDraw.Draw(image)# 设置圆点的坐标和颜色 x 100 # 圆点的x坐标 y 100 # 圆点的y坐标 color …

【JVM】GCRoot

GC root原理 通过对枚举GCroot对象做引用可达性分析,即从GC root对象开始,向下搜索,形成的路径称之为 引用链。如果一个对象到GC roots对象没有任何引用,没有形成引用链,那么该对象等待GC回收。 可以作为GC Roots的对…

Vue命令式组件的编写与应用

目录 1.引言 2.传统的组件 3.命令式组件 4.命令式组件的应用场景 1.引言 大家好!今天我们来聊聊Vue.js中的一个有趣话题——命令式组件。你有没有觉得,有时候我们在Vue模板里写组件,就像是在玩搭积木,每个积木都有固定的形状…

第二百零六回

文章目录 1. 概念介绍2. 思路与方法2.1 实现思路2.2 实现方法 3. 示例代码4. 内容总结 我们在上一章回中介绍了"给geolocator插件提交问题的结果"相关的内容,本章回中将介绍自定义标题栏.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我…

set与zset数据类型

set类型基础 redis集合(set)类型和list列表类型类似,都可以用来存储多个字符串元素的 集合。但是和list不同的是set集合当中不允许重复的元素。而且set集合当中元素是没有顺序的,不存在元素下标。 redis的set类型是使用哈希表构造的,因此复…

Java面向对象案例之描述专业和学生(4)

类的方法图 学生类: 属性:学号,姓名,年龄,所学习的专业方法:学习的方法,描述学习状态。描述内容包括姓名、学号、年龄、所学习的专业信息 专业类: 属性:专业编号&#xf…

阅读 - 二维码扫码登录原理

在日常生活中,二维码出现在很多场景,比如超市支付、系统登录、应用下载等等。了解二维码的原理,可以为技术人员在技术选型时提供新的思路。对于非技术人员呢,除了解惑,还可以引导他更好地辨别生活中遇到的各种二维码&a…

线性回归 quickstart

构建一元一次方程 100个(X, y ),大概是’y3x4’ import numpy as npnp.random.seed(42) # to make this code example reproducible m 100 # number of instances X 2 * np.random.rand(m, 1) # column vector y 4 3 * X np.random…

深度揭秘HW中的灰色技术(盗号,个人实时定位,远程监听)

xss漏洞:是数量最多的漏洞 cross-site scripting 跨站脚本攻击 1.反射型xss:代码存在于网址中,将存在恶意代码的链接发给用户,点击后才能攻击成功实施。 2.存储型xss:指Web应用程序会将用户输入的数据信息保持在服务…