【视频异常检测】Real-Time Anomaly Detection and Localization in Crowded Scenes 论文阅读
文章信息:

发表于:CVPR2015(workshop)
原文链接:https://www.cv-foundation.org/openaccess/content_cvpr_workshops_2015/W04/papers/Sabokrou_Real-Time_Anomaly_Detection_2015_CVPR_paper.pdf
Real-Time Anomaly Detection and Localization in Crowded Scenes 论文阅读
- Abstract
- 1. Introduction
- 2. Proposed System
- 3. Experimental results and comparisons
- 4. Conclusions
Abstract
在本文中,我们提出了一种用于拥挤场景中实时异常检测和定位的方法。每个视频被定义为一组非重叠的立方体块,并通过两种局部和全局描述符进行描述。这些描述符从不同角度捕捉视频的特征。通过结合简单且具有成本效益的高斯分类器,我们可以区分视频中的正常活动和异常事件。局部和全局特征基于相邻块之间的结构相似性,并通过稀疏自编码器以无监督的方式学习得到。实验结果表明,我们的算法在UCSD ped2和UMN基准测试上与最先进的算法相当,但更加高效。实验验证了我们的系统能够在视频中发生异常时,及时、可靠地检测和定位异常。
1. Introduction

图1. 我们算法的框架(从左到右):输入帧,视频块的两个视角(全局和局部),使用高斯分布建模数据,并做出最终决策。
异常的定义取决于关注的上下文。如果一个视频事件在视频中发生的可能性很低,则该事件被视为异常[6]。在复杂场景中描述不寻常的事件是一项繁琐的任务,通常通过采用高维特征和描述符来解决。开发一个可以通过这些描述符进行训练的可靠模型是非常具有挑战性的,且需要大量的训练样本;同时,它也具有较高的计算复杂度。因此,这可能会面临所谓的“维度灾难”,即随着特征描述符维度的增加,训练模型的预测能力会下降。
在最近的研究中,通常会从训练视频中学习一个或一组参考正常模型,然后在测试阶段应用这些模型来检测异常。此类方法通常将测试视频视为异常,前提是该视频与学习到的模型不相似。为了构建这些参考模型,必须使用一些特定的特征描述符。一般来说,特征通常用于表示 (1) 轨迹或 (2) 时空变化。例如,[8] 和 [19] 关注视频中物体的轨迹,其中每个物体根据其是否遵循学习到的正常轨迹被标记为异常或正常。这些方法无法处理遮挡问题,并且在拥挤场景中计算开销非常大。
为了克服这些缺点,研究人员提出了使用低级特征(如光流或梯度)的方法。他们通过低级特征分布来学习形状和时空关系。举例来说,[13] 使用高斯混合模型来拟合特征,而[1] 则使用指数分布。
在[16]中,利用低级特征对测试数据进行聚类。 在[2, 9, 10, 22]中,正常模式被拟合到马尔可夫随机场,而[14, 18]则应用了潜在狄利克雷分配模型。[11]介绍了一种时空异常联合检测器,作者使用了动态纹理混合(MDT)模型。
在最近的研究中,视频中事件的稀疏表示[6, 7, 12]受到了广泛关注。值得注意的是,[6, 7, 11, 14, 15, 12]中提出的模型在异常检测中取得了良好的性能,但它们通常在异常定位任务中表现不佳。除[12]外,所有这些方法都未针对实时应用进行设计,并且通常在现实世界的异常检测问题中失败。
在本文中,我们提出从两个不同的角度或视角来表示视频,从而得到两个部分独立的特征描述符。然后,我们引入了一种方法,在测试步骤中整合这些视角,以实时地同时执行异常检测和定位。与以往的工作不同,我们提出基于自编码器[17]学习一组代表性特征,而不是使用低级特征。
我们的检测框架以实时方式识别异常。我们的异常检测方法具有较高的真阳性率和较低的假阳性率,使其非常可靠。我们在流行的数据集上评估了我们的异常检测和定位框架,并报告了整个过程的运行时间。与最先进的方法进行比较,结果表明我们的方法在性能和运行时间方面都具有优势。
我们工作的主要贡献如下:
(1) 提出了一种特征学习过程,用于描述视频中的异常定位任务。该方法在训练时较为耗时,但学习到的特征对建模正常块具有很好的区分性。
(2) 引入了一个基于描述符的相似性度量,用于检测时空领域中相邻块的突变。
(3) 从两个不同的角度或视角表示视频块。每个视角都使用局部和全局特征集。在最终决策中,这些视角相互支持。
(4) 用高斯分布建模所有正常块。对于测试视频,使用马氏距离来计算其与正常块的相关性。
(5) 实时性强,我们能够在测试视频或流中异常发生后迅速检测并定位异常。
我们算法的总体框架如图1所示。我们在处理时达到了25帧每秒(fps)的处理能力,在容忍一些误差的情况下,使用一台配备3.5 GHz CPU和8G RAM的PC,并在MATLAB 2012a环境下,最高可达到200 fps。
2. Proposed System

图2. 视频表示:每个视频通过一系列不重叠的立方体块表示,覆盖视频中的整个时空。
Overall Scheme.为了表示每个视频,首先将每个视频转换为多个非重叠的立方体块;该视频表示的示意图如图2所示。一般来说,每个视频都有一个或一组主导事件。因此,正常的块应该与其相邻的块具有相似的关系,并且在视频中出现的可能性较高。因此,这些异常块应满足三个条件:
- 异常块与其相邻块(即由空间变化定义的相邻块)之间的相似性,并不像正常块与其相邻块之间的相似性那样遵循相同的模式。
- 异常块的时序变化最有可能不遵循正常块的时序变化模式。
- 显然,异常块的发生概率低于正常块的发生概率。
可以很容易推断出,以上的条件1和2是局部特征所表征的。因此,它们可以通过局部特征描述符进行编码,而条件3则类似于场景的全局特征。换句话说,条件1和2考虑的是块与其相邻块之间的关系,而条件3描述的是视频中块的整体外观。因此,前两个条件对应于时空变化,而后一个则有所不同。因此,我们通过局部表示来建模条件1和2,通过更全局的表示来建模条件3。另一方面,为了避免所谓的“维度灾难”,我们将这两个方面独立建模。
到目前为止,我们已经定义了两种不同的方式来解决这个问题,从而得出了两个独立的模型。为了做出最终决策,我们将两个模型的决策进行聚合。如果两个模型都判定某个块为异常,则该块被认为是异常的。这种组合方式使得系统在真阳性率和假阳性率方面表现更好,因为这种组合方式保证了只有当两个模型一致认为某个块为异常时,才将其选定为异常。
总之,输入视频从两个不同的角度进行表示。然后,这些表示被拟合到一组高斯分布,并为每个表示计算一个决策边界。最后,根据全局和局部模型的结果,做出关于某个块是否为异常的决策(检测)。定位可以通过视频中哪些块被分类为异常来轻松推断。接下来的章节将介绍这两组特征(全局特征和局部特征)。
Global descriptors.视频全局描述符是一组特征,用于整体描述视频,因此最能描述正常的视频块。在[21]中提出,经典的手工设计低级特征,如HOG和HOF,可能并不适用于所有类型的视频,也不足以具有足够的区分能力。因此,与以往使用低级特征的工作不同,我们采用了一种基于自编码器的无监督特征学习方法。自编码器的结构如图3所示。

图3. 使用自编码器学习全局特征的概述。 左侧:学习特征的步骤使用原始正常块;需要组件(1)、(2)、(3)、(4)和(5);目标是通过调整 W 1 W_1 W1 和 W 2 W_2 W2 使用梯度下降重建输入块。 中间:自编码器结构。 右侧:使用 W 1 W_1 W1 权重表示 y y y 块( y × W 1 y \times W_1 y×W1);仅使用(1)、(2)和(3);这是两个矩阵的乘法,因此非常快速。
自编码器通过建模神经网络,基于梯度下降学习稀疏特征。假设我们有 m 个正常块,尺寸为 (w, h, t),创建一个数据结构 x i ∈ R D x_i \in \mathbb{R}^D xi∈RD,其中 D = w × h × t D = w \times h \times t D=w×h×t(原始数据)。自编码器通过重新构建原始数据,最小化在公式 (1) 中定义的目标:

其中,s 是自编码器隐藏层的节点数, W 1 ∈ R s × D W_1 \in \mathbb{R}^{s \times D} W1∈Rs×D 和 W 2 ∈ R D × s W_2 \in \mathbb{R}^{D \times s} W2∈RD×s 是权重矩阵,分别将输入层的节点映射到隐藏层的节点,以及将隐藏层的节点映射到输出层的节点。 W j i W_{ji} Wji 是第 j 个隐藏层节点与第 i 个输出层节点之间的权重,δ 是 sigmoid 函数。此外, b 1 b_1 b1 和 b 2 b_2 b2 分别是输出层和隐藏层的偏置。 K L ( ρ ∥ ρ j ) KL(\rho \parallel \rho_j) KL(ρ∥ρj)是一个正则化函数,用于强制隐藏层的激活保持稀疏性。KL 基于一个伯努利分布,其参数为 ρ \rho ρ,与激活节点的分布之间的相似性。参数 β \beta β 是惩罚项的权重(在稀疏自编码器的目标函数中)。我们可以通过随机梯度下降法高效地优化上述目标,针对 W 1 W_1 W1 进行更新。
Local descriptors.为了描述每个视频块,我们使用一组局部特征。计算每个块与其邻近块之间的相似性。对于邻近块,我们考虑九个空间邻近块和一个时间邻近块(即在时间上紧接着感兴趣块之前的那个块),这样每个块有10个邻近块。对于时间邻近块,我们只考虑感兴趣块之前的那个块(而不是下一个块),因为我们旨在尽可能早地检测到异常,甚至是在下一个视频帧(以及随后的块)到达之前。我们使用SSIM(结构相似性指数)来计算两个块之间的相似性,SSIM是一个广泛使用的图像质量评估工具[4]。此外,作为第二种局部描述符,我们计算每个单帧与其后续帧在感兴趣块中的SSIM值。图4展示了我们通过时空邻近块进行局部特征评估的过程。局部描述符将是这些SSIM值的组合,即 [ d 0 ⋅ ⋅ ⋅ d 9 , D 0 ⋅ ⋅ ⋅ D t − 1 ] [d_0 · · · d_9, D_0 · · · D_{t−1}] [d0⋅⋅⋅d9,D0⋅⋅⋅Dt−1]。
***
图4. 我们的局部描述符示意图:每个感兴趣块与其邻近块的相似性(上图),每个感兴趣块的时间内相似性(下图)
Anomaly Classifier.
为了建模每个视频块中的正常活动,我们引入了两个高斯分类器 C1 和 C2。对于分类 x ′ x' x′块,如前所述,我们使用两个部分独立的特征集(全局特征和局部特征),并计算马哈拉诺比斯距离 f ( y ) f(y) f(y)。如果 f ( y ) f(y) f(y) 大于阈值,则该块被视为异常块,其中 y 在全局分类器中等于 W 1 × x ′ W_1 \times x' W1×x′,而在局部分类器中则为 [ d 0 ⋅ ⋅ ⋅ d 9 , D 0 ⋅ ⋅ ⋅ D 3 ] [d_0 · · · d_9, D_0 · · · D_3] [d0⋅⋅⋅d9,D0⋅⋅⋅D3]。为了避免数值不稳定性,我们避免了密度估计。因此,C1 和 C2 分类器定义如下:


其中, μ \mu μ 和 Σ \Sigma Σ 分别是均值和协方差矩阵。选择一个“合适”的阈值对性能非常重要;它可以基于训练块来选择。如前所述,如果 C1 和 C2 分类器都将某个块标记为异常,则该块被视为异常;如果其中一个或两个分类器都认为该块是正常的,我们的算法将其分类为正常块。以下方程中展示了这些标准的总结,即 F 函数:

Anomaly detection using feature learning.
我们从原始训练数据中学习特征,并按照前一节中规定的方法对视频块进行分类。但基于 [3] 中的观点,使用小块和大块通常会导致假阳性率增加和真阳性率下降。当块变得更大时,自编码器的输入维度增加,因此需要学习的网络权重数量也会增加。
在训练样本有限的情况下,从大块(例如 40×40×5)中学习特征是不可行的。为了克服这些挑战,我们从小块(10×10×5)中学习特征。为了使用这些特征创建一个模型,在测试阶段,我们考虑大块(40×40×5)。由于学习到的分类器是针对 10×10×5 块表示的,我们在 40×40×5 块中卷积已学习的特征(W1),不进行重叠,并对从 40×40×5 块中提取的 16 个特征向量进行池化。因此,我们使用均值池化来实现 40×40×10 块的表示,并使用基于 10×10×5 块的已学习分类器进行检测。该过程如图5所示。

图5. 使用特征学习进行大块异常检测。 (A) 输入视频。 (B) 选定的测试块(例如,40×40×5)被划分为 16 个小块。 (C ) W 1 × W_1 \times W1× 小块。 (D) 对所有特征向量(16 个向量)进行池化。 (E) 计算每个特征的均值并创建一个特征向量。 (F) 使用基于 10×10×5 块的已学习分类器进行分类。
3. Experimental results and comparisons
我们将算法与最先进的方法在Ped2、UCSD1和UMN2基准上进行了比较。实验证明,我们的方法适用于监控系统。
Experimental settings.特征学习是在 10×10×5 的小块上进行的。异常检测的训练和测试阶段分别使用了 10×10×5 和 40×40×5 的块大小。在异常检测中,使用的是 40×40×5 的块大小。特征学习通过自编码器完成,稀疏度设置为 0.05。每个 10×10×5 的块由一个 1000 维的特征向量表示。在特征学习之前,进行了归一化处理,将均值和方差分别设置为 0 和 1。
UCSD datasets.该数据集包括两个子集,ped1 和 ped2,分别来自两个不同的户外场景。两者都是以静态摄像头在 10 帧每秒的速度下录制的,分辨率分别为 158×234 和 240×360。场景中主要的移动物体是行人。因此,任何物体(例如汽车、滑板车、轮椅或自行车)都被认为是异常物体。我们在 ped2 子集上评估我们的算法。该子集包含 12 个视频样本,每个样本被划分为训练帧和测试帧。为了评估定位效果,我们利用所有测试帧的真实标注。我们将我们的结果与现有的先进方法进行比较,使用接收操作曲线(ROC)和等错误率(EER)分析,类似于 [13]。我们使用两个评估指标,一个是帧级别的,另一个是像素级别的。此外,我们还定义了一种新的度量方法,用于评估异常定位的准确性,称为双像素级别。以下是这些指标的定义:
Frame level measure:如果一个像素检测到异常,则认为该帧是异常的。
Pixel level measure:如果算法检测到的像素覆盖了至少 40% 的异常地面真实像素,那么该帧就被认为是异常的。
假设算法检测到某个区域为异常,并且这些区域中的一个与异常的地面真实数据有重叠;在前两种度量中不会考虑这些假阳性区域。这样的区域被称为“幸运猜测”。为了考虑“幸运猜测”区域,我们引入了双像素级别度量。该度量对“幸运猜测”区域较为敏感。
双像素级别度量:在该度量中,如果一个帧满足以下两个条件,则被视为异常帧:(1) 它满足像素级别的异常条件;(2) 至少有 β 百分比(例如,10%)的被检测为异常的像素被异常地面真实数据覆盖。如果除了异常区域之外,其他无关区域也被视为异常,则该度量不会将该帧标记为正样本。图6展示了不同异常检测度量的示例。

图6. 异常评估度量。蓝色和红色矩形分别表示算法输出和异常真实标签。(a)帧级评估。(b)像素级评估:40%的红色(真实标签)被蓝色(检测到的区域)覆盖。(c)双像素级评估:评估40%的红色被蓝色覆盖,但至少 β% 的蓝色没有被红色覆盖。(d)双像素级评估。
Performance Evaluations.图7展示了与其他方法的定性比较。该图表明,在与所有竞争算法的比较中,我们的算法表现最佳。关于运行时间的比较,请参见表1。



在图8(左)中,我们的方法在 ped2 数据集上与其他方法的帧级 ROC 进行了比较。结果显示,我们的方法与其他方法相当。在这个度量上,表2 显示了不同方法的帧级 EER。这确认了我们的方法在与其他方法的比较中表现良好。除了 Li 等人([11] 中报告的方法,我们低了 0.5%)的方法外,我们超越了所有其他方法。
UMN dataset.UMN 数据集包含三个不同的场景。在每个场景中,一群人正在一个区域内行走,突然间所有人都跑开(逃离);这种逃离行为被视为异常。图10展示了该数据集中的正常帧和异常帧的示例。

该数据集存在一些限制。数据集中只有三个异常场景,并且正常帧和异常帧之间的时空变化非常大。该数据集没有像素级的真实标签。基于这些限制,为了评估我们的方法,我们使用了帧级的 EER 和 AUC 指标。EER 和 AUC 的结果见表3。由于该数据集相对简单,且异常定位不太重要,因此仅使用了全局检测器。之前的方法在该数据集上表现得相当不错。我们方法的 AUC 与其他最好的结果相当,而 EER 比之前最好的方法好(提高了 0.3%)。

4. Conclusions
我们提出了一种异常检测和定位方法。在我们的方法中,我们提议使用全局和局部描述符来表示视频。基于这两种表示形式,我们提出了两种分类器。通过对这两个分类器输出的融合策略,我们实现了准确可靠的异常检测和定位。然而,单独使用这两个分类器中的任何一个,都能很好地进行异常检测。尤其是在UMN数据集上,全局描述符实现了最先进的结果。我们还为可疑区域引入了一种新的区域级异常检测指标。此外,我们的方法在UCSD数据集上的表现优于近期的方法。值得注意的是,我们在运行时间上比所有竞争方法都要快,取得了这些良好的结果。我们的方法具有低计算复杂度,可以实时运行。这使得它在实时监控应用中非常有用,在这些应用中,我们处理的是视频的实时流。
相关文章:
【视频异常检测】Real-Time Anomaly Detection and Localization in Crowded Scenes 论文阅读
文章信息: 发表于:CVPR2015(workshop) 原文链接:https://www.cv-foundation.org/openaccess/content_cvpr_workshops_2015/W04/papers/Sabokrou_Real-Time_Anomaly_Detection_2015_CVPR_paper.pdf Real-Time Anomaly D…...
设计模式12:抽象工厂模式
系列总链接:《大话设计模式》学习记录_net 大话设计-CSDN博客 参考: C设计模式:抽象工厂模式(风格切换案例)_c 抽象工厂-CSDN博客 1.概念 抽象工厂模式(Abstract Factory Pattern)是软件设计…...
论文学习——多种变化环境下基于多种群进化的动态约束多目标优化
论文题目:Multipopulation Evolution-Based Dynamic Constrained Multiobjective Optimization Under Diverse Changing Environments 多种变化环境下基于多种群进化的动态约束多目标优化(Qingda Chen , Member, IEEE, Jinliang Ding , Senior Member, …...
Jenkins参数化构建详解(This project is parameterized)
本文详细介绍了Jenkins中不同类型的参数化构建方法,包括字符串、选项、多行文本、布尔值和git分支参数的配置,以及如何使用ActiveChoiceParameter实现动态获取参数选项。通过示例展示了传统方法和声明式pipeline的语法 文章目录 1. Jenkins的参数化构建1…...
Cerebras 推出 CePO,填补推理与规划能力的关键空白
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
广东省食品销售中高级题库及答案
1.有关食品安全标准的说法正确的是(C)。 A.鼓励性标准 B.推荐性标准 C.强制性标准 D.引导性标准 2.食品经营许可证载明的许可事项发生变化的,食品经营者应当在变化后(D)个工作日内向原发证的食品药品监督管理部门申请变更经营许可。 A.3 B.5 C.7 D.10 3.食品销售经营者对食品…...
JAVA基础-深入理解Java内存模型(一)-- 重排序与先行发生原则(happens-before)
深入理解Java内存模型(一)-- 重排序 很棒的一个关于Java内存模型系列文章,首先感谢作者,转载自深入理解java内存模型系列文章 ,为了方便阅读,做了一些内容整合和重排版。 提纲 Java线程之间的通信对程序…...
【Lambda】java之lambda表达式stream流式编程操作集合
java之lambda表达式&stream流式编程操作集合 1 stream流概念1.1 中间操作1.1.1 无状态操作1.1.2 有状态操作 1.2 终端操作1.2.1 非短路操作1.2.2 短路操作 2 steam流的生成2.1 方式一:数组转为stream流2.2 方式二:集合转为steam流2.3 方式三…...
家具购物小程序+php
基于微信小程序的家具购物小程序的设计与实现 摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了基于微信小程序的家具购物小程序的设计与实现的开发全过程。通过分析基于微信小程序的家具购物小程序的设计与实…...
【GIS教程】使用GDAL-Python将tif转为COG并在ArcGIS Js前端加载-附完整代码
目录 一、数据格式 二、COG特点 三、使用GDAL生成COG格式的数据 四、使用ArcGIS Maps SDK for JavaScript加载COG格式数据 一、数据格式 COG(Cloud optimized GeoTIFF)是一种GeoTiff格式的数据。托管在 HTTP 文件服务器上,可以代替geose…...
VB.net进行CAD二次开发(二)与cad交互
开发过程遇到了一个问题:自制窗口与控件与CAD的交互。 启动类,调用非模式窗口 Imports Autodesk.AutoCAD.Runtime Public Class Class1 //CAD启动界面 <CommandMethod("US")> Public Sub UiStart() Dim myfrom As Form1 New…...
【NLP 11、Adam优化器】
祝你先于春天, 翻过此间铮铮山峦 —— 24.12.8 一、Adam优化器的基本概念 定义 Adam(Adaptive Moment Estimation)是一种基于梯度的优化算法,用于更新神经网络等机器学习模型中的参数。它结合了动量法(Momentum&…...
51单片机应用开发(进阶)---串口接收字符命令
实现目标 1、巩固UART知识; 2、掌握串口接收字符数据; 3、具体实现目标:(1)上位机串口助手发送多字符命令,单片机接收命令作相应的处理(如:openled1 即打开LED1;closeled1 即关…...
redis 怎么样删除list
在 Redis 中,可以使用以下方法删除列表或列表中的元素: 1. 删除整个列表 使用 DEL 命令删除一个列表键: DEL mylist这个命令会删除键 mylist 及其值(无论 mylist 是一个列表还是其他类型的键)。 2. 删除列表中的部分…...
【数据结构——内排序】快速排序(头歌实践教学平台习题)【合集】
目录😋 任务描述 测试说明 我的通关代码: 测试结果: 任务描述 本关任务:实现快速排序算法。 测试说明 平台会对你编写的代码进行测试: 测试输入示例: 10 6 8 7 9 0 1 3 2 4 5 (说明:第一行是元素个数&a…...
npm或yarn包配置地址源
三种方法 1.配置.npmrc 文件 在更目录新增.npmrc文件 然后写入需要访问的包的地址 2.直接yarn.lock文件里面修改地址 简单粗暴 3.yarn install 的时候添加参数 设置包的仓库地址 yarn config set registry https://registry.yarnpkg.com 安装:yarn install 注意…...
STUN服务器用于内网NAT的方案
在内网中部署 STUN 服务器的场景通常用于处理多层 NAT 或内网客户端之间的通信需求,尤其是在大企业或学校等复杂网络环境下。通过 STUN 服务器,可以帮助客户端设备检测和适配 NAT 转换规则,进而支持 WebRTC 或其他实时通信技术的正常运行。 …...
Linux 简单命令总结
1. 简单命令 1.1. ls 列出该目录下的所有子目录与文件,后面还可以跟上一些选项 常用选项: ・-a 列出目录下的所有文件,包括以。开头的隐含文件。 ・-d 将目录象文件一样显示,而不是显示其下的文件。如:ls -d 指定目…...
Vue.js组件开发:提升你的前端工程能力
Vue.js 是一个用于构建用户界面的渐进式框架,它允许开发者通过组件化的方式创建可复用且易于管理的代码。在 Vue.js 中开发组件是一个直观且高效的过程,下面我将概述如何创建和使用 Vue 组件,并提供一些最佳实践。 1. 创建基本组件 首先&am…...
使用 Pandas 读取 JSON 数据的五种常见结构解析
文章目录 引言JSON 数据的五种常见结构1. split 结构2. records 结构3. index 结构4. columns 结构5. values 结构 引言 在日常生活中,我们经常与各种数据打交道,无论是从网上购物的订单信息到社交媒体上的动态更新。JSON(JavaScript Object…...
C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
C++ 基础特性深度解析
目录 引言 一、命名空间(namespace) C 中的命名空间 与 C 语言的对比 二、缺省参数 C 中的缺省参数 与 C 语言的对比 三、引用(reference) C 中的引用 与 C 语言的对比 四、inline(内联函数…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
【JVM】Java虚拟机(二)——垃圾回收
目录 一、如何判断对象可以回收 (一)引用计数法 (二)可达性分析算法 二、垃圾回收算法 (一)标记清除 (二)标记整理 (三)复制 (四ÿ…...
Webpack性能优化:构建速度与体积优化策略
一、构建速度优化 1、升级Webpack和Node.js 优化效果:Webpack 4比Webpack 3构建时间降低60%-98%。原因: V8引擎优化(for of替代forEach、Map/Set替代Object)。默认使用更快的md4哈希算法。AST直接从Loa…...
人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent
安全大模型训练计划:基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标:为安全大模型创建高质量、去偏、符合伦理的训练数据集,涵盖安全相关任务(如有害内容检测、隐私保护、道德推理等)。 1.1 数据收集 描…...
