当前位置: 首页 > news >正文

Adversarial Machine Learning(对抗机器学习)

之前把机器学习(Machine Learning)的安全问题简单记录了一下,这里有深入研究了一些具体的概念,这里记录一下方便以后查阅。

Adversarial Machine Learning(对抗机器学习)

  • Adversarial Examples 相关内容
    • Evading Machine Learning
    • Adversarial Examples
      • Adversarial Examples 的特点
      • Adversarial Examples 的形式化定义
      • Adversarial Examples 的生成方法
      • Adversarial Examples 的防御方法
      • Non-targeted Adversarial Examples
    • 为什么会有 Adversarial Examples
    • 攻击方式的分类
      • Gradient-based attacks
      • Confidence score attacks
      • Hard label attacks
      • Surrogate model attacks
      • Brute-force attacks
    • 如何防御 Adversarial Examples
      • Formal Methods
      • Empirical Defenses
        • Adversarial training
        • Gradient masking
        • Input modification
        • Detection
        • Extra (NULL) Class
  • Adversarial Attacks 和 Adversarial Defenses
    • 对抗攻击(Adversarial Attacks)
      • Adversarial attacks 的目标
      • Adversarial attacks 的攻击方法
      • 对抗样本(Adversarial Examples)
      • Adversarial attacks 的影响
    • 对抗防御(Adversarial Defenses)
      • 对抗训练(Adversarial Training)
      • 输入预处理(Input Preprocessing)
      • 模型正则化(Model Regularization)
      • 输入转换(Input Transformation)
      • 模型架构的鲁棒性设计
      • 使用对抗样本的检测方法(Detection)
  • Randomized Neural Networks
    • Randomized neural networks 的关键特性
    • Randomized neural networks 的常见类型
      • Extreme Learning Machines (ELMs)
      • Random Vector Functional Link (RVFL)
      • Stochastic Neural Networks (SNNs)
      • Dropout & Randomized Activation
      • Randomized neural networks 的理论基础
  • 参考资料

Adversarial Examples 相关内容

机器学习技术的发展令人兴奋。然而,就像任何新技术或发明一样,机器学习不仅带来了新的惊人功能,而且不幸的是,也带来了新的漏洞。

Evading Machine Learning

对抗式 ML 领域的领军人物之一巴蒂斯塔-比吉奥(Battista Biggio)在一篇论文中指出,**对抗式机器学习(Adversarial ML)**领域最早可以追溯到 2004 年。当时,人们在垃圾邮件过滤的背景下对对抗性实例进行了研究,结果表明线性分类器很容易被垃圾邮件内容中一些精心设计的变化所欺骗。

完整时间表:
在这里插入图片描述

对抗样本(adversarial examples) 的 “新颖性 ”其实是在深度学习中发现的。2013 年,谷歌人工智能公司的克里斯蒂安-塞格迪(Christian Szegedy)正在研究神经网络如何 “思考”,却发现了一个所有神经网络似乎都具备的有趣特性–容易被微小扰动所迷惑。鉴于深度学习已经变得如此重要, adversarial example 和 Adversarial ML 领域最终成为了焦点。

下面是一些例子:

图片:用对抗眼镜欺骗人脸检测。
在这里插入图片描述

视频:DEFCON 上的隐形 T 恤。

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

在这里插入图片描述

音频:语音到文本的转录。

在这里插入图片描述
语言:情感分析和文本关联。

在这里插入图片描述

Adversarial Examples

通过对输入数据进行精心设计的微小扰动,生成的特殊样本。这些扰动在对人类观察者来说通常不可察觉,但会导致机器学习模型做出错误或意外的预测结果。

在这里插入图片描述

Adversarial Examples 的特点

  1. 精心设计的扰动(Adversarial Perturbations)

    • 对抗样本并不是随机产生的,而是通过某种算法(如梯度攻击方法)有意生成的。
    • 这些扰动的目标是改变模型的决策边界,使其产生错误输出。
  2. 对人类而言不可见

    • 人类观察者通常无法分辨正常样本与对抗样本之间的差别。
    • 例如,一张图片的对抗样本可能只改变了像素的很小一部分,肉眼看不出差异,但深度学习模型却被误导。
  3. 目标模型依赖性

    • 对抗样本通常针对特定的模型生成,称为白盒攻击(White-Box Attack),即攻击者完全了解目标模型。
    • 黑盒攻击(Black-Box Attack)中,即使对目标模型不了解,攻击仍可能有效(通过迁移性特征)。

Adversarial Examples 的形式化定义

给定一个分类模型 f ( x ) f(x) f(x),原始输入 x x x,目标类别 y y y,对抗样本 x ′ x' x 满足以下条件:

  1. 相似性:对抗样本 x ′ x' x 与原始输入 x x x 的差异很小,可以通过某种度量(如 ∥ x − x ′ ∥ p \|x - x'\|_p xxp)衡量。
  2. 误导性:模型预测结果发生变化,即 f ( x ′ ) ≠ f ( x ) f(x') \neq f(x) f(x)=f(x)

例如:

  • 对于图像分类任务,输入 x x x 是一张狗的图片,模型预测为“狗”。
  • 添加了对抗扰动后的 x ′ x' x 仍然看起来像狗,但模型预测为“猫”。

Adversarial Examples 的生成方法

一些常见的对抗样本生成算法包括:

  1. FGSM(Fast Gradient Sign Method)
    • 使用目标模型的梯度信息,快速生成能够最大化误差的微小扰动。
  2. PGD(Projected Gradient Descent)
    • 多步优化的版本,通过多次迭代精确调整扰动。
  3. DeepFool
    • 尝试找到最小的扰动,使样本跨过模型的决策边界。
  4. C&W(Carlini and Wagner Attack)
    • 利用优化目标函数生成更强的对抗样本。

Adversarial Examples 的防御方法

  1. 对抗训练
    • 在训练过程中加入对抗样本,使模型学习到对抗扰动的模式。
  2. 输入预处理
    • 对输入数据进行平滑、裁剪或其他变换,以减少对抗扰动的影响。
  3. 正则化技术
    • 引入鲁棒性损失函数,提高模型对噪声的免疫力。
  4. 模型架构优化
    • 设计新的网络结构,使模型更加稳健。

Non-targeted Adversarial Examples

上面是一个常见的 targeted adversarial example,人眼无法检测到图像的变化。而 non-targeted adversarial examples 则是我们不用太在意对抗示例对人眼是否有意义,它对人眼来说可能只是随机噪音。

在这里插入图片描述

为什么会有 Adversarial Examples

目前存在多种假设:

  • 第一个也是最原始的假说来自 Szegedy 自己的论文,试图解释 adversarial examples,他们认为 adversarial examples 的存在是由于流形(manifold )中存在低概率的 “口袋(pockets)”(即太多非线性)以及网络正则化不良

  • 一种相反的理论,该理论由 Goodfellow 首创,他认为现代机器学习,尤其是深度学习系统中的线性度太高导致了 adversarial examples 的出现。古德费洛认为,像 ReLU 和 Sigmoid 这样的激活函数在中间基本上都是直线(恰好我们喜欢在中间保留梯度,以防止它们爆炸或消失)。因此,在神经网络中,你会看到大量的线性函数,它们相互延续输入,方向一致。如果你在某些输入上添加微小的扰动(这里和那里的几个像素),这些扰动就会在网络的另一端累积成巨大的差异,然后它就会吐出胡言乱语。

  • 第三种也可能是目前最普遍采用的假设是倾斜边界(tilted boundary)。简而言之,作者认为,由于模型永远无法完美拟合数据(否则测试集的准确率就会始终保持在 100%),因此在分类器的边界和采样数据的实际子阈值之间总会存在一些不利的输入。他们还根据经验推翻了前两种方法。

  • 麻省理工学院最近发表的一篇论文认为,对抗性示例并不是一个错误,而是神经网络观察世界的一个特征。我们人类局限于三维空间,无法将噪声模式区分开来,但这并不意味着这些噪声模式不是好的特征。我们的眼睛只是糟糕的传感器。因此,我们真正面对的是一台比我们自己更复杂的模式识别机器–与其把我们不理解的模式称为 “adversarial examples”,不如接受这个世界比我们看到的要复杂得多。如果整篇论文太长,我强烈推荐这篇 11 分钟的博客摘要。

攻击方式的分类

攻击者对目标系统(或其 “能力”)的了解非常重要。他们对您的模型及其构建方式了解得越多,就越容易对其发起攻击。

在 Calypso,将规避攻击(evasion attacks)分为五类:

  1. 使用梯度的攻击
  2. 使用置信度的攻击
  3. 使用硬标签的攻击
  4. 使用代理模型的攻击
  5. 暴力攻击

Gradient-based attacks

基于梯度的攻击(Gradient-based attacks) 顾名思义需要访问模型的梯度,因此是一种白盒攻击。这些攻击无疑是最强大的,因为攻击者可以利用他们对模型思考方式(梯度)的详细了解,从数学上优化攻击。

这也是攻击加固模型最有效的技术。事实上,研究表明,如果攻击者可以访问模型的梯度,他们就总能制作出一组新的 adversarial examples 来欺骗模型。这就是为什么 adversarial examples 如此重要的原因–抛开隐蔽性的安全性不谈,要防御对抗示例其实非常困难。

Confidence score attacks

置信度得分攻击(Confidence score attacks) 使用输出的分类置信度来估计模型的梯度,然后执行与上述基于梯度的攻击类似的智能优化。这种方法不需要攻击者了解模型的任何信息,因此属于黑盒攻击。

Hard label attacks

硬标签攻击(Hard label attacks) 只依赖模型输出的标签(“猫”、“狗”、“热狗”),不需要置信度分数。这让攻击变得更加愚蠢,但也可以说更加现实(你知道有多少公共端点会输出分类分数?) 这类攻击中最强大的仍然是边界攻击。

Surrogate model attacks

代用模型攻击(Surrogate model attacks) 与基于梯度的攻击非常相似,只是需要额外的步骤。如果对手无法访问模型的内部结构,但仍想发动 WhiteBox 攻击,他们可以尝试首先在自己的机器上重建目标的模型。他们有几种选择:

  • 如果目标模型可以作为一个预测器(oracle)来使用,攻击者可以通过反复查询端点和观察输入输出对来学习它(逆向工程 )。
  • 如果目标模型应用于标准分类任务(如人脸检测)–攻击者很可能只需猜测模型的架构和训练数据,并以此为基础构建一个副本。
  • 如果攻击者根本不掌握任何信息,由于我们前面讨论过的可转移性,他们可以简单地使用任何现成的图像分类器,并生成不完美但功能正常的对抗示例

Brute-force attacks

最后是 “暴力 ”攻击(brute-force attacks)。这些攻击完全不使用优化来生成对抗示例,而是采用简单的方法,例如:

  • 随机旋转/平移图像
  • 应用常见的扰动
  • 添加大 SD 值的高斯噪声

如何防御 Adversarial Examples

Formal Methods

让我们从 形式化方法(formal methods) 开始,因为它们更容易讨论。在芯片设计或航空航天与国防等行业工作过的人,对形式化方法一定不会陌生。对于其他人来说,形式化方法是一种数学技术,用于保证软件/硬件系统的鲁棒性。
在大多数软件中,如果设计或构建错误,可能会导致一些停机时间和一些愤怒的客户评论,但可能不会造成人员伤亡。但在某些行业,这种缺陷是不可接受的。你不可能在制造了 100 万个芯片后才发现芯片的某些部分存在缺陷,你也不可能把一架飞机送上天空,除非你用数学方法验证了每个部件都能按预期工作。

形式化方法的工作方式非常简单,就是尝试每一种可能的情况,并观察其结果如何。在规避攻击领域,这意味着在一定的扰动半径内,尝试生成每一种可能的对抗实例。举个例子,假设你有一张只有两个灰度像素的图像,比方说 180 和 80。然后,假设你决定每个方向的扰动范围为 3。这样就有 (3+1+3)² 或 49 种组合可供选择–如果你想正式验证这些组合都不具有对抗性,就必须将每种组合都放入你的模型中,看看另一端会出现什么。

在这里插入图片描述

一张 2 个像素的无色图像就有 49 种组合。那么一张 1000 x 1000 像素的彩色图像,每个方向的扰动范围都是 3 呢?这需要检查 ( 3 + 1 + 3 ) ( 3 ∗ 1000 ∗ 1000 ) (3+1+3)^{(3*1000*1000)} (3+1+3)(310001000) 种组合(EXCEL 拒绝生成数字)!

形式化方法它们并不便宜,而且从计算角度来看往往完全难以解决。事实上,就神经网络而言,当今最先进的形式化方法技术无法验证超过几层深度的网络。因此,就目前而言,这是一个值得实现但难以实现的愿望。

Empirical Defenses

经验防御(empirical defenses),顾名思义,就是依靠实验来证明防御的有效性。例如,你可能会对一个模型进行两次攻击–首先是一个正常的、未设防的版本,然后是一个加固的版本–并观察每个版本的易骗程度(希望加固的模型表现得更好)。

因此,formal methods 试图计算每一种可能的情况,并在计算过程中验证是否存在 adversarial examples,而 empirical methods 则采取 “你看到它有效,为什么还要计算 ”的方法。

下面我们就来介绍几种比较流行的方法:

  1. Adversarial training
  2. Gradient masking
  3. Input modification
  4. Detection
  5. Extra class
Adversarial training

对抗训练(Adversarial training)–当今最受关注的防御方法,也可以说是最有效的防御方法。在对抗训练过程中,防御者使用训练池中的对抗样本对模型进行再训练,但标注的是正确的标签。这可以教会模型忽略噪声,只从 “强大 ”的特征中学习。

对抗训练的问题在于,它只能使模型抵御用于制作训练池中初始样本的相同攻击。因此,如果有人使用不同的算法发起优化攻击,或发起自适应攻击(即对已防御模型发起白盒攻击),他们就能重新欺骗分类器,就像没有防御一样。

你可能会认为,你可以一遍又一遍地使用新伪造的对抗性示例来重新训练模型,但到了一定程度,你已经在训练集中插入了太多的虚假数据,以至于模型学习到的边界基本上变得毫无用处。

在这里插入图片描述
也就是说,如果目标只是让攻击者更难绕过分类器,那么对抗训练就是一个不错的选择。

Gradient masking

梯度掩蔽(gradient masking),这基本上是一种非防御手段。有一段时间,对抗性机器学习社区认为,由于需要梯度来计算对模型的强大攻击,因此隐藏梯度应该可以解决问题,但很快就被证明是错误的。

梯度掩蔽不能作为防御策略的原因是因为对抗样本的可转移性。即使您成功隐藏了模型的梯度,攻击者仍然可以构建代理,攻击它,然后传输示例。

Input modification

当输入在传递给模型之前以某种方式“清理”以消除对抗性噪声时,就会发生输入修改(input modification)。示例包括各种降噪解决方案(自动编码器、高级代表性降噪器)、颜色位深度缩减、平滑、重组 GAN、JPEG 压缩、注视点、像素偏转、通用基函数变换等等。

Detection

一些 检测(detection) 方法与输入修改密切相关——因为一旦输入被清理,它的预测就可以与原始预测进行比较,如果两者相距甚远,则输入可能已被篡改。这里有几个例子。

还一种方式。例如,在这里,他们实际上训练了一个单独的检测网络,其唯一的工作是确定输入是否是对抗性的。

一般来说,输入修改和检测方法很棒,因为它们可以应用于已经训练好的模型,并且不需要数据科学家重新训练模型。

Extra (NULL) Class

最后,还有额外的(NULL)类方法。这个想法很简单。分类器是根据非常特殊的数据分布进行训练的,根据定义,分类器在超出该分布范围时将毫无头绪。因此,与其在分类器显然不知道标签是什么的情况下强迫它猜测标签,不如给它放弃的选择。这就是 NULL 类所实现的功能(论文)。

Adversarial Attacks 和 Adversarial Defenses

对抗攻击(Adversarial Attacks)

对抗攻击是指恶意攻击者通过对输入数据进行精心设计的扰动,误导机器学习模型产生错误预测或决策的过程。这些扰动通常是微小的,不容易被人类察觉,但对于深度学习模型来说,它们可能会导致严重的错误。

对抗攻击通常基于以下几种方式:

Adversarial attacks 的目标

  • 误分类(Misclassification):目标是使模型做出错误的预测。
  • 目标攻击(Targeted Attack):攻击者希望模型输出特定的错误类别。
  • 非目标攻击(Untargeted Attack):攻击者只希望模型输出错误类别,而不关心是哪个类别。

Adversarial attacks 的攻击方法

对抗攻击可以分为白盒攻击(White-box Attack)和黑盒攻击(Black-box Attack)两种主要类型。

  • 白盒攻击(White-box Attack)

    • 攻击者知道目标模型的所有信息,包括模型架构、权重参数等。
    • 攻击者通常会利用梯度信息来生成对抗样本。
    • 常见的白盒攻击方法有:
      • FGSM (Fast Gradient Sign Method):利用目标模型的梯度信息,生成对抗样本。
      • PGD (Projected Gradient Descent):多次迭代的改进版,生成更强的对抗样本。
      • C&W Attack (Carlini & Wagner):通过优化目标函数来生成最小扰动的对抗样本。
  • 黑盒攻击(Black-box Attack)

    • 攻击者不知晓目标模型的具体结构和参数。
    • 攻击者通过观察模型的输入输出(例如,通过API)来推测模型行为并生成对抗样本。
    • 黑盒攻击的方式包括:
      • 转移攻击(Transferability Attack):在一个模型上生成对抗样本并将其应用于另一个模型(即使目标模型不同)。
      • 生成对抗网络(GAN):使用生成模型来创建对抗样本,通常也能迁移到其他模型。

对抗样本(Adversarial Examples)

对抗样本是通过对原始数据进行精心设计的小扰动生成的。这些扰动被设计为:

  • 对人类观察者不可察觉;
  • 对模型却能产生误导作用。

例如:

  • 一张猫的图片可能经过轻微的调整后仍然是猫,但深度学习模型却把它误识别为“狗”。
  • 一段正常的语音输入可能被扰动,使得语音识别系统误听为完全不同的指令。

Adversarial attacks 的影响

  • 安全性威胁:对抗攻击可能使得机器学习系统变得不可靠,尤其是在关键领域(如自动驾驶、医疗诊断)中。
  • 模型泛化能力差:对抗样本揭示了模型的脆弱性,表明模型在应对现实世界中的多样化数据时可能表现不稳定。

对抗防御(Adversarial Defenses)

对抗防御是指一系列技术,用于提高模型的鲁棒性,使其能够抵御对抗攻击,减少对抗样本的影响。以下是一些常见的对抗防御方法:

对抗训练(Adversarial Training)

  • 核心思想:将对抗样本添加到训练数据中,强制模型学习如何正确处理这些被攻击的样本。
  • 方法
    • 在训练过程中生成对抗样本,并将其与原始样本一起输入模型。
    • 目标是让模型在训练时学习到鲁棒的特征,能够识别和应对扰动。
  • 优点
    • 显著提高模型对抗攻击的鲁棒性。
  • 缺点
    • 训练时间长,计算资源消耗大。
    • 可能对正常样本的准确度造成一定影响。

输入预处理(Input Preprocessing)

  • 核心思想:通过对输入数据进行预处理,减少对抗扰动的影响。
  • 方法
    • 去噪(Denoising):去除输入中的噪声或扰动。
    • 裁剪(Clipping):将输入数据限制在某个特定范围内,防止过大的扰动。
    • 平滑化(Smoothing):平滑输入数据,减少对抗扰动的影响。
  • 优点
    • 可以在不改变模型的情况下提高模型的鲁棒性。
  • 缺点
    • 有时会降低模型对原始输入的准确性。

模型正则化(Model Regularization)

  • 核心思想:通过添加正则化项,增加模型的复杂度限制,从而增强其对抗鲁棒性。
  • 方法
    • 梯度惩罚(Gradient Penalty):惩罚模型梯度的过大波动,以防止过拟合对抗样本。
    • 网络结构的鲁棒性:设计更加复杂的神经网络结构,使其对微小扰动不敏感。
  • 优点
    • 提高了模型在不同输入下的稳定性。
  • 缺点
    • 可能导致训练过程更加复杂,并且无法完全防止对抗样本的生成。

输入转换(Input Transformation)

  • 核心思想:通过对输入进行某种变换,扰动会被减少或消除。
  • 方法
    • 图像转换:如旋转、缩放、裁剪等图像变换。
    • 加密(Encryption):对输入数据进行加密处理,使得攻击者无法有效生成对抗样本。
  • 优点
    • 在实际部署中简单有效。
  • 缺点
    • 可能降低模型的效率和性能。

模型架构的鲁棒性设计

  • 核心思想:设计网络架构,使其对抗扰动具有天然的鲁棒性。
  • 方法
    • 采用更深或更复杂的网络架构,提高模型对输入扰动的免疫力。
    • 使用正则化技术、卷积层(在图像处理中)等方法提高模型的泛化能力。
  • 优点
    • 提升模型整体性能,增强鲁棒性。
  • 缺点
    • 架构复杂性增加,可能导致计算成本增加。

使用对抗样本的检测方法(Detection)

  • 核心思想:利用专门的检测器来识别是否有对抗样本存在。
  • 方法
    • 异常检测:监测输入是否与正常输入数据有显著差异。
    • 模型行为分析:分析模型输出的稳定性,检查是否存在异常预测。

Randomized Neural Networks

Randomized Neural Networks (随机化神经网络) 是一种利用随机化策略设计的神经网络模型。它们的特点是部分或全部网络的参数是随机初始化的,并在训练过程中保持固定,或者以随机方式参与计算。这种方法广泛用于减少计算复杂性、提升泛化能力,以及探索神经网络的鲁棒性。

Randomized neural networks 的关键特性

  1. 随机性(Randomization)

    • 权重随机化:随机初始化权重,并在训练过程中保持不变,或者仅对部分层进行优化。
    • 结构随机化:通过随机选择神经元或连接方式,生成多样化的网络结构。
    • 输入或噪声随机化:在训练或推理过程中,向输入或中间层添加随机噪声以增强鲁棒性。
  2. 固定性

    • 在某些随机化神经网络中,随机权重是固定的,这意味着无需优化这些参数。这种方法有助于降低训练复杂性。
  3. 快速计算

    • 因为部分参数无需优化,计算和存储需求显著减少,适用于资源受限的环境。

Randomized neural networks 的常见类型

以下是随机化神经网络的一些典型实现:

Extreme Learning Machines (ELMs)

  • 这是随机化神经网络的经典示例。
  • 核心思想
    • 隐藏层的权重随机初始化并固定。
    • 仅优化输出层权重(通常通过线性回归求解)。
  • 优点
    • 训练速度极快。
    • 简单高效,适用于小规模数据集。
  • 缺点
    • 对随机权重敏感,泛化能力可能受限。

Random Vector Functional Link (RVFL)

  • 是对传统神经网络的扩展。
  • 核心思想
    • 在网络中添加随机生成的特征(通过随机化权重获得)。
    • 通过连接这些随机特征和原始特征提高表达能力。

Stochastic Neural Networks (SNNs)

  • 在每个神经元或连接中引入随机性。
  • 应用场景
    • 提高鲁棒性和模型的不确定性量化。
    • 在生成模型中,比如生成对抗网络(GANs)。

Dropout & Randomized Activation

  • Dropout 是一种常见的随机化技术,用于训练过程中随机丢弃部分神经元。
  • 随机化激活函数选择可以增加模型的多样性。

Randomized neural networks 的理论基础

  1. 随机特征的理论支持

    • 在高维空间中,随机映射可以生成良好的特征表示。
    • 核函数理论(Kernel Theory)表明,随机权重生成的隐层表示可以近似核映射。
  2. 泛化能力

    • 随机化策略通过增加模型的多样性,通常有助于提升模型的泛化能力。
  3. 鲁棒性

    • 随机化神经网络在对抗攻击和噪声处理方面往往表现较好,因为它们对输入扰动的敏感性降低。

参考资料

About Adversarial Examples

Evasion attacks on Machine Learning (or “Adversarial Examples”)

Tricking Neural Networks: Create your own Adversarial Examples

什么是对抗样本、对抗攻击(详解)

相关文章:

Adversarial Machine Learning(对抗机器学习)

之前把机器学习(Machine Learning)的安全问题简单记录了一下,这里有深入研究了一些具体的概念,这里记录一下方便以后查阅。 Adversarial Machine Learning(对抗机器学习) Adversarial Examples 相关内容Eva…...

EleutherAI/pythia-70m

EleutherAI/pythia-70m” 是由 EleutherAI 开发的一个小型开源语言模型,它是 Pythia Scaling Suite 系列中参数量最小的模型,拥有大约 7000 万个参数。这个模型主要旨在促进对语言模型可解释性的研究; Pythia Scaling Suite是为促进可解释性…...

【C#】C#打印当前时间以及TimeSpan()介绍

1. C#打印当前时间 string currentDate DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");Console.WriteLine(currentDate);2. TimeSpan()介绍 TimeSpan(long ticks)的单位是100ns //500ms new TimeSpan(10*1000*500);参考: C#-TimeSpan-计算时间差...

典型常见的基于知识蒸馏的目标检测方法总结二

来源:https://github.com/LutingWang/awesome-knowledge-distillation-for-object-detection收录的方法 NeurIPS 2017:Learning Efficient Object Detection Models with Knowledge Distillation CVPR 2017:Mimicking Very Efficient Networ…...

设计一个监控摄像头物联网IOT(webRTC、音视频、文件存储)

前言: 设计一个完整的 监控摄像头物联网 IoT 平台 涉及 视频直播和点播、WebRTC 和 文件存储模块,可以分为以下几个主要部分:摄像头设备、服务端处理、Web 前端、视频流存储和回放。以下是结合这些技术的一个具体完整流程设计,涵盖…...

C# OpenCV机器视觉:凸包检测

在一个看似平常却又暗藏玄机的午后,阿强正悠闲地坐在实验室里,翘着二郎腿,哼着小曲儿,美滋滋地品尝着手中那杯热气腾腾的咖啡,仿佛整个世界都与他无关。突然,实验室的门 “砰” 的一声被撞开,小…...

yii2 手动添加 phpoffice\phpexcel

1.下载地址:https://github.com/PHPOffice/PHPExcel 2.解压并修改文件名为phpexcel 在yii项目的vendor目录下创建一个文件夹命名为phpoffice 把phpexcel目录放到phpoffic文件夹下 查看vendor\phpoffice\phpexcel目录下会看到这些文件 3.到vendor\composer目录下…...

Apifox 12月更新|接口的测试覆盖情况、测试场景支持修改记录、迭代分支能力升级、自定义项目角色权限、接口可评论

Apifox 新版本上线啦!!! 在快速迭代的开发流程中,接口测试工具的强大功能往往决定了项目的效率和质量。而 Apifox 在 12 月的更新中,再次引领潮流,推出了一系列重磅功能!测试覆盖情况分析、场景…...

“库存管理软件的用户体验”:界面与交互设计

3.1可行性分析 开发者在进行开发系统之前,都需要进行可行性分析,保证该系统能够被成功开发出来。 3.1.1技术可行性 开发该库存管理软件所采用的技术是vue和MYSQL数据库。计算机专业的学生在学校期间已经比较系统的学习了很多编程方面的知识,同…...

Mysql大数据量表分页查询性能优化

一、模拟场景 1、产品表t_product,数据量500万+ 2、未做任何优化前,cout查询时间大约4秒;LIMIT offset, count 时,offset 值较大时查询时间越久。 count查询 SELECT COUNT(*) AS total FROM t_product WHERE deleted = 0 AND tenant_id = 1 分页查询 SELECT * FROM t_…...

Linux基础--1.1 什么是 Linux 操作系统

Linux 的起源与定义 Linux 是一种开源的操作系统,由 Linus Torvalds 于 1991 年首次发布。它基于 UNIX 操作系统,并以自由和开放为核心理念。Linux 的代码可以由任何人查看、修改并发布,这是它与许多专有操作系统(如 Windows 和 …...

数电实验期末作业——基于FPGA的数字时钟设计

1. 概述 本系统主要完成数字电子钟的以下功能: 1.计时功能(24小时) 2.闹钟功能(设置闹钟以及到时播放音乐) 3.校时功能 4.其他简单功能(清零、输入频率选择(1hz、500hz、5khz)、…...

hdfs命令(三)- hdfs 管理命令(三)- hdfs dfsadmin命令

文章目录 前言一、hdfs分布式文件系统管理命令1. 介绍2. 语法及解释3. 命令3.1 生成HDFS集群的状态报告3.1.1 语法及解释3.1.2 示例 3.2 重新加载配置文件并更新NameNode中的节点列表3.3 刷新指定DataNode上的NameNode信息3.3.1 语法 3.4 获取并显示指定DataNode的信息3.4.1 语…...

TCP off-path exploits(又一个弄巧成拙的例子)

承接前面几篇文章的观点,本文用一个安全攻击的例子说明为了解决一个伤害很低的低概率问题,会引入多么大的麻烦,这次是可怕的被攻击 (⊙o⊙)。 TCP 端口号只有 16bit,序列号只有 32bit,这意味着在强大攻击算力面前&…...

Docker【初识Docker】

目录 为什么会出现Docker这门技术喃? 应用开发和部署的困境 容器技术的先兆 Docker 的出现:简化容器化 Docker 技术的关键创新: Docker 的广泛应用和变革 什么是 Docker? Docker的历史 早期背景:容器化和虚拟化…...

开机存活脚本

vim datastadard_alive.sh #!/bin/bashPORT18086 # 替换为你想要检查的端口号 dt$(date %Y-%m-%d)# 使用netstat检查端口是否存在 if netstat -tuln | grep -q ":$PORT"; thenecho "$dt Port $PORT is in use" > /opt/datastadard/logs/alive.log# 如…...

【elementplus】中文模式

设置中文 <el-date-picker v-model“userAddKey” type“daterange” style“width: 240px” start-placeholder“Start Date” end-placeholder“End Date” change“handleUserAddChange” /> 引入&#xff1a; import zhCn from “element-plus/es/locale/lang/zh-cn”…...

【Docker命令】如何使用`docker exec`在容器内执行命令

大家好&#xff0c;今天我们来聊聊Docker容器管理中的一个非常有用的命令&#xff1a;docker exec。在日常工作中&#xff0c;我们经常需要在运行中的Docker容器内执行各种命令&#xff0c;docker exec正是帮助我们实现这一需求的利器。下面我将通过一个简单的例子&#xff0c;…...

FPGA的DMA应用——pcileech

硬件通过pcie总线&#xff0c;访存本机的内存&#xff0c;并进行修改&#xff0c;可以进行很多操作。 学习视频&#xff1a;乱讲DMA及TLP 1-pcileech项目简介和自定义模块介绍_哔哩哔哩_bilibili vivado2024.1的下载文章链接和地址&#xff1a;AMD-Xilinx Vivado™ 2024.1 现…...

前后端数据交互

一、后端部分 1.创建Spring Boot项目&#xff1a;在IDEA中创建一个Spring Boot项目&#xff0c;引入必要的依赖。 2.编写Controller层&#xff1a;在Spring Boot项目中创建Controller&#xff0c;用于处理前端的请求和响应数据。 RestController RequestMapping("/demo/s…...

将现有Web 网页封装为macOS应用

文章目录 方式一&#xff1a;Unite for macOS方式二&#xff1a;Web2Desk方式三&#xff1a;Nativefier方式四&#xff1a;Flutter Flutter WebView Plugin总结 方式一&#xff1a;Unite for macOS Unite 是一款专为 macOS 设计的工具&#xff0c;可以将任意 Web 页面快速封装…...

代码随想录Day52 101. 孤岛的总面积,102. 沉没孤岛,103. 水流问题,104.建造最大岛屿。

1.孤岛的总面积 卡码网&#xff1a;101. 孤岛的总面积(opens new window) 题目描述 给定一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的矩阵&#xff0c;岛屿指的是由水平或垂直方向上相邻的陆地单元格组成的区域&#xff0c;且完全被水域单元格…...

Python毕业设计选题:基于Python的社区爱心养老管理系统设计与实现_django

开发语言&#xff1a;Python框架&#xff1a;djangoPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 管理员登录 管理员功能界面 用户管理 身体健康界面 公共书籍界面 借阅信息界面 归还…...

逆袭之路(11)——python网络爬虫:原理、应用、风险与应对策略

困厄铸剑心&#xff0c;逆袭展锋芒。 寒苦凝壮志&#xff0c;腾跃绘华章。 我要逆袭。 目录 一、引言 二、网络爬虫的基本原理 &#xff08;一&#xff09;网络请求与响应 &#xff08;二&#xff09;网页解析 &#xff08;三&#xff09;爬行策略 三、网络爬虫的应用领…...

【Rust自学】7.3. 路径(Path)Pt.2:访问父级模块、pub关键字在结构体和枚举类型上的使用

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 7.3.1. super 我们可以通过在路径开头使用super来访问父级模块路径中的内容&#xff0c;就像使用..语法启动文件系统路径。例如&#xff…...

wangEditor富文本插件在vue项目中使用和媒体上传的实现

wangEditor是前端一个比较流行的简洁易用&#xff0c;功能强大的前端富文本编辑器&#xff0c;支持 JS Vue React&#xff0c;提供了很多丰富的功能&#xff0c;下面手把手教你实现wangWditor富文本插件在vue项目中配置&#xff0c;保存、图片上传等功能。无脑ctrlc即可 基本功…...

FFmpeg 的常用API

FFmpeg 的常用API 附录&#xff1a;FFmpeg库介绍 库介绍libavcodec音视频编解码核心库编码 (avcodec_send_frame, avcodec_receive_packet)。解码 (avcodec_send_packet, avcodec_receive_frame)。libavformat提供了音视频流的解析和封装功能&#xff0c;多种多媒体封装格式&…...

【软件】教务系统成绩提交工具使用步骤

【软件】教务系统成绩提交工具使用步骤 零、快速开始 安装 与大多数软件一样&#xff0c;安装步骤很简单&#xff0c;一直点击“下一步”即可快速完成安装&#xff0c;安装完成后&#xff0c;在桌面会有一个软件图标&#xff0c;双击即可打开软件主界面。 导入成绩到Excel中…...

es快速扫描

介绍 Elasticsearch简称es&#xff0c;一款开源的分布式全文检索引擎 可组建一套上百台的服务器集群&#xff0c;处理PB级别数据 可满足近实时的存储和检索 倒排索引 跟正排索引相对&#xff0c;正排索引是根据id进行索引&#xff0c;所以查询效率非常高&#xff0c;但是模糊…...

埃斯顿机器人程序模版案例,欢迎指点

埃斯顿机器人程序模版案例&#xff0c;欢迎指点...

解锁成长密码:探寻刻意练习之道

刻意练习&#xff0c;真有那么神&#xff1f; 在生活中&#xff0c;你是否有过这样的困惑&#xff1a;每天苦练英语口语&#xff0c;可一到交流时还是支支吾吾&#xff1b;埋头苦学吉他&#xff0c;却总是卡在几个和弦转换上&#xff1b;工作多年&#xff0c;业务能力却似乎陷入…...

对外发PDF设置打开次数

在线 Host PDF 文件并对链接进行限制——保障文件安全的最佳解决方案 在数字化办公和远程协作日益普及的今天&#xff0c;如何安全高效地分享 PDF 文件成为许多用户关注的重点。MaiPDF 作为一款功能强大的在线工具&#xff0c;不仅支持在线 host PDF 文件&#xff0c;还提供多…...

【Linux命令】su、sudo、sudo su、sudo -i、sudo -l的用法和区别

su 命令 su (Switch User 切换用户)&#xff0c;允许用户切换到另一个用户的身份&#xff0c;默认情况下是切换到 root 用户。 默认行为&#xff1a;如果只运行 su&#xff0c;则系统会要求输入 root 用户的密码来切换到 root 用户&#xff0c;获取管理员权限。 切换到其他用…...

leetcode hot 100搜索回溯

39. 组合总和 已解答 中等 相关标签 相关企业 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可以按 任意顺序 返回这些组合。 candi…...

记录-->为2025添砖java的第二天

如何在java中创建自己的方法呢&#xff0c;我认为它和在C语言c里面写函数就没啥区别&#xff0c;(⊙﹏⊙)&#xff0c;可能有一点点就是说public static int add(int a,int b){}就是得和main方法里面的状态一致。 import java.util.Scanner; public class Math3 {public stati…...

uniapp小程序实现弹幕不重叠

uniapp小程序实现弹幕不重叠 1、在父组件中引入弹幕组件 <template><!-- 弹幕 --><barrage ref"barrage" class"barrage-content" reloadDanmu"reloadDanmu"></barrage> </template> <script>import barr…...

拼多多纠偏,能否实现买卖平权?

科技新知 原创作者丨江蓠 编辑丨蕨影 当曾将仅退款、运费险作为标配的电商平台们开始听到商家诉求&#xff0c;有意优化营商环境&#xff0c;作为“仅退款”服务发起者的拼多多也坐不住了。 在推出一揽子减免计划讨好中小商家之后&#xff0c;拼多多近期被传正在内测精选用户…...

【Leetcode】3159. 查询数组中元素的出现位置

文章目录 题目思路代码复杂度分析时间复杂度空间复杂度 结果总结 题目 题目链接&#x1f517; 给你一个整数数组 nums &#xff0c;一个整数数组 queries 和一个整数 x 。 对于每个查询 q u e r i e s [ i ] queries[i] queries[i] &#xff0c;你需要找到 n u m s nums nu…...

PHP语言laravel框架中基于Redis的异步队列使用实践与原理

在 Laravel 中&#xff0c;基于 Redis 的异步队列是通过 Laravel 的队列系统与 Redis 服务结合来实现的。这种队列机制允许你将任务推送到队列中&#xff0c;并由后台工作进程异步处理这些任务。这样&#xff0c;你就可以将耗时的操作&#xff08;如发送邮件、处理视频、数据同…...

Element-plus自动导入

安装 npm i element-plus 自动引入 1. 安装两个插件 npm install -D unplugin-vue-components unplugin-auto-import2. 配置插件 vue3项目修改vite.config.js&#xff0c;把两个插件添加入即可&#xff0c;注意:不是覆盖原有配置 Vite // vite.config.js import { define…...

贪心算法(常见贪心模型)

常见贪心模型 简单排序模型 最小化战斗力差距 题目分析&#xff1a; #include <bits/stdc.h> using namespace std;const int N 1e5 10;int n; int a[N];int main() {// 请在此输入您的代码cin >> n;for (int i 1;i < n;i) cin >> a[i];sort(a1,a1n);…...

碰一碰发视频后端源码技术开发详解,支持OEM

一、引言 碰一碰发视频作为一种新颖的交互方式&#xff0c;在前端为用户带来便捷体验的同时&#xff0c;后端技术起着至关重要的支撑作用。后端负责管理视频资源、处理 NFC 标签信息与视频的关联逻辑、用户数据的存储与分析以及与前端的高效通信&#xff0c;确保整个系统稳定、…...

Python vs PHP:哪种语言更适合网页抓取

本文将比较 Python 和 PHP&#xff0c;以帮助读者确定哪种语言更适合他们的需求。文章将探讨两种语言的优点和缺点&#xff0c;并根据读者的经验水平分析哪种语言可能更容易上手。接下来&#xff0c;文章将深入探讨哪种语言在抓取网页数据方面更胜一筹。 简而言之&#xff0c;…...

SpringBoot 新特性

优质博文&#xff1a;IT-BLOG-CN 2.1.0新特性最低支持jdk8,支持tomcat9 对响应式编程的支持&#xff0c;spring-boot-starter-webflux starter POM可以快速开始使用Spring WebFlux&#xff0c;它由嵌入式Netty服务器支持 1.5.8 2.1.0/2.7.0/3.0.0 Configuration propertie…...

NAT 技术如何解决 IP 地址短缺问题?

NAT 技术如何解决 IP 地址短缺问题&#xff1f; 前言 这是我在这个网站整理的笔记,有错误的地方请指出&#xff0c;关注我&#xff0c;接下来还会持续更新。 作者&#xff1a;神的孩子都在歌唱 随着互联网的普及和发展&#xff0c;IP 地址的需求量迅速增加。尤其是 IPv4 地址&…...

微积分复习(微分方程)

1,一阶微分方程 可分离的微分方程: 可以把x和y分列等号两边,然后求积分可以解决 齐次方程和准齐次方程 要求是 :yf(y/x),也就是没有单独的x项,我们可以通过设ty/x来统一变量方便我们运算 准齐次方程就是常数项不统一,我们可以将Xxa,Yyb来消灭常数项进而转化为齐次形式…...

动态规划子序列问题系列一>等差序列划分II

题目&#xff1a; 解析&#xff1a; 1.状态表示&#xff1a; 2.状态转移方程&#xff1a; 这里注意有个优化 3.初始化&#xff1a; 4.填表顺序&#xff1a; 5.返回值&#xff1a; 返回dp表总和 代码&#xff1a; public int numberOfArithmeticSlices(int[] nums) {in…...

【连续学习之SSL算法】2018年论文Selfless sequential learning

1 介绍 年份&#xff1a;2018 期刊&#xff1a; arXiv preprint Aljundi R, Rohrbach M, Tuytelaars T. Selfless sequential learning[J]. arXiv preprint arXiv:1806.05421, 2018. 本文提出了一种名为SLNID&#xff08;Sparse coding through Local Neural Inhibition and…...

【FastAPI】中间件

【FastAPI】中间件 一、概述二、作用2.1 日志记录与监控2.2 身份验证与授权2.3 CORS&#xff08;跨域资源共享&#xff09;2.4 Gzip压缩2.5 会话管理2.6 自定义功能2.7 执行顺序 三、 总结四、相关链接 一、概述 FastAPI的中间件提供了一种强大的机制&#xff0c;允许开发者在…...

文档大师:打造一站式 Word 报告解决方案1

前言 在政府、医院、银行、财务以及销售等领域&#xff0c;常常需要创建各种报告文件来展开工作汇报&#xff0c;譬如季度销售报告、年度总结报告、体检报告和保险合同等。在没有报表工具支持之前&#xff0c;这类报告主要通过 Word 制作&#xff0c;费时费力且难以维护&#…...