异常检测论文1

news2025/1/18 19:06:17

本文仅作为个人阅读文献,做笔记记录。
<>

\usepackage[dvipsnames]{xcolor}

一、摘要部分:

我们发现,现有的数据集偏向于局部结构异常,如划痕、凹痕或污染。特别是,它们缺乏违反逻辑约束形式的异常,例如,允许的对象出现在无效位置。
这篇文章贡献了新的异常检测数据集用于检测局部的结构异常和全局的逻辑异常。

提出一种种新的算法:在结构和逻辑异常的联合检测方面优于现有技术。该技术由局部和全局网络分支组成。第一个分支检查与输入图像中的空间位置无关的受限区域,并且主要负责检测全新的局部结构。第二个分支学习通过瓶颈的训练数据的全局一致性表示,该瓶颈能够检测到违反长范围依赖关系的情况,该长范围依赖关系是许多逻辑异常的关键特征。

二、概念介绍

那么什么是结构异常,什么是逻辑异常呢?
以下图为例:
在这里插入图片描述
图中,最左边是无异常的ok图,中间出现颜色变化的,这种就是属于结构异常,最右边的是颜色、形状这些都没变化,变化的是小黑圆圈的数量。

现有的大量最先进的无监督异常检测方法都是通过提取预训练网络的局部特征分布来进行建模的。
这些异常检测方法擅长检测MVTec Logical Costraints Anomaly Detection(MVTec LOCO AD) 数据集上的颜色等局部特征。但是这些方法天然地会受限于特征描述符的感受野之内的信息,这就让它难以检测那些违反长范围依赖的异常。
感受野本身由于是局部描述,因此不足以理解图像中的长范围长距离关系依赖!

由于一些VAEs或者GANs的方法具备捕捉整张图像的信息的潜在能力,因此他们可以潜在地检测出上图中最右边多出一个圆圈这种异常。但是这些方法会倾向于产生一些模糊和不准确的重构(这就会导致增加误检),当然这些方法通常会在检测逻辑异常上会优于上面提到的局部特征方法。

三、动机以及文章贡献
基于以上,论文中将异常分为了结构异常和逻辑异常,并且说明了现存方法在两种类型的异常的不同表现。
文中将结构异常定义为:出现在局部限制区域中并且在无异常数据中不存在的新视觉结构。如:颜色变化

文中将逻辑异常定义为:违反了数据中的底层逻辑约束,并且可能需要一种方法来捕获长范围长距离依赖性。例如,电路接线错误、小瓶液位变化或缺少基本组件。

文章贡献点:
(1)引入一个同时覆盖结构和逻辑异常的无监督的新数据集用于评估无监督定位算法。
它包含 5 个不同对象类别的 3644 张图像,灵感来自现实世界的工业检测场景。 结构异常表现为制造产品中的划痕、凹痕或污染。 逻辑异常违反了底层约束,例如,一个允许的对象出现在一个无效的位置,或者一个必要的对象根本不存在。

(2)为了比较我们数据集上不同方法的性能,需要合适的性能度量。 文中发现常用指标不能直接用于评估方法检测逻辑异常的能力。 为此,文章引入了一个性能指标,它采用不同的模式,考虑到数据集中存在的缺陷。 此性能度量是对无监督异常检测的既定度量的概括。

(3)
提出了一种新的方法来对异常进行无监督的像素精确定位。 与现有方法相比,它改进了结构和逻辑异常联合检测的结果。 该方法由一个局部分支和一个全局分支组成,以上分支分别负责检测结构和逻辑异常,受最近成功使用预训练网络的局部特征进行异常检测的启发,我们的局部分支包含一个匹配此类局部描述符的回归网络。 提出方法的全局分支旨在通过一个瓶颈学习训练数据的全局一致性表示来克服捕获输入图像的整个上下文的困难。 在推理过程中,两个分支中的回归错误表明存在异常。 针对最先进方法的广泛评估显示了我们的方法在检测逻辑异常以及两种异常类型的组合定位方面的优越性。

三、方法技术

文献中除了提出MVTec LOCO AD数据集,还提出了GCAD (Global Context Anomaly Detection)方法,
该方法可以同时检测结构异常和逻辑异常。
在这里插入图片描述

一个全局特征编码器 E g l o E _ {glo} Eglo是由预训练的局部特征编码器 E l o c E _ {loc} Eloc进行训练的得到的( E g l o E _ {glo} Eglo通过一个瓶颈层来捕获无异常训练数据的全局上下文)。

E g l o E _ {glo} Eglo R g l o R _ {glo} Rglo的联合训练,通过低维瓶颈促进高维特征的精准匹配。

3.1 Local Model Branch:
局部模型分支。该分支主要受到最近成功的异常分割方法的推动,该方法从预训练的 CNN 中提取的局部特征的分布进行建模。 这类方法在已建立的异常定位基准上实现了最先进的性能,其中大多数异常符合我们对结构异常的定义。
文中模型的这个分支是基于学生-教师方法的。 由于此方法计算图像中的局部受限区域的异常分数,而与其在输入图像中的空间位置无关,因此我们将此分支称为模型的局部分支。

它由一个编码器网络 E l o c E _ {loc} Eloc组成,该网络在从 ImageNet 数据集裁剪的大量图像块上进行了预训练。 在预训练期间,鼓励 E l o c E _ {loc} Eloc通过从预训练分类网络中进行知识蒸馏来提取局部图像块的表达描述符。本文是将在ImageNet上训练的ResNet-18分类器蒸馏成一个稠密块特征描述符网络(通过快速稠密特征提取技术)。 E l o c E _ {loc} Eloc的网络架构和以及ImageNet 上的预训练协议的详细描述可以在原始的 Student-Teacher 论文中找到。

注意:预训练完成后,当优化文中提出的异常检测模型的时候固定 E l o c E _ {loc} Eloc的权重。用公式表达即:
在每个像素位置上, E l o c E _ {loc} Eloc都生成一个 d l o c d _ {loc} dloc维的一个特征描述子。即
E l o c ( I ) ∈ R w × h × d l o c E _ {loc}(I)\in\mathbb{R}^{w\times h\times d _ {loc}} Eloc(I)Rw×h×dloc.
每一个特征都描述了一个局部的原图输入影像的 p × p p\times p p×p区域的图像块。

局部分支还包含回归网络 R l o c R _ {loc} Rloc,其用随机权重初始化并被训练以匹配 E l o c E _ {loc} Eloc在无异常训练数据上的输出。它输出一个形状与 E l o c E _ {loc} Eloc生成的形状相同的特征图,即: R l o c ( I ) ∈ R w × h × d l o c R _ {loc}(I)\in\mathbb{R}^{w\times h\times d _ {loc}} Rloc(I)Rw×h×dloc.我们使用具有跳跃连接的高容量网络来完成此任务,并最小化Frobenius范数的平方:

L l o c ( I ) L _ {loc}(I) Lloc(I) = ∥ \lVert E l o c ( I ) E _ {loc}(I) Eloc(I) - R l o c ( I ) R _ {loc}(I) Rloc(I) ∥ \rVert F 2 {_ {F}^2} F2.

如果在推理过程中,图像包含在训练过程中未观察到的新的局部结构,并且这些结构落入预训练的特征提取器的感受野内,则 E l o c E _ {loc} Eloc将产生 R l o c R _ {loc} Rloc不熟悉的新的局部特征描述符。这会导致很大的回归误差。因此,我们期望我们模型的局部分支在检测结构异常方面表现良好。

3.2 Global Model Branch:
E l o c E _ {loc} Eloc只检查大小为 p × p p\times p p×p像素大小的有限感受野,特别地, E l o c E _ {loc} Eloc是不编码提取的训练特征的位置组成。因此,我们的局部分支天生地就不适合检测那些违背具备长范围长距离依赖关系的异常,这个长距离依赖关系是许多逻辑异常的特征,例如输入图像中目标丢失或者目标额外增多。为了解决这个问题,论文中就在模型中增加了第二个分支用来分析整幅图像的全局上下文。因此,我们将这个新分支称为全局分支。它的设计灵感来自图1中的观察结果,即将输入数据压缩到低维瓶颈的方法具有捕获逻辑约束的能力,并且无法重新生成违反逻辑约束的输入图像。

论文中全局分支由两个网络 E g l o E _ {glo} Eglo R g l o R _ {glo} Rglo组成。 E l o g E _ {log} Elog是一个编码器网络,它在每个像素位置产生维度为 d g l o d _ {glo} dglo的描述符, E g l o ( I ) ∈ R w × h × d g l o E _ {glo}(I)\in\mathbb{R}^{w\times h\times d _ {glo}} Eglo(I)Rw×h×dglo.

与自动编码器类似,鼓励 E g l o E _ {glo} Eglo生成与训练数据全局一致的特征图。为此, E g l o E _ {glo} Eglo在g维的低维瓶颈上进行编码。与自动编码器相反, E g l o E _ {glo} Eglo不会重建输入图像。它是通过将局部特征编码器 E l o c E _ {loc} Eloc的知识来蒸馏提取到全局分支来进行训练!
为了让 E g l o E _ {glo} Eglo的特征描述符与 E l o c E _ {loc} Eloc的输出层维度相匹配,我们引入一个上采样网络 U U U,它执行一系列 1 × 1 1\times1 1×1的卷积。对于训练,我们最小化:

L k d ( I ) L _ {kd}(I) Lkd(I) = ∥ \lVert E l o c ( I ) E _ {loc}(I) Eloc(I) - U ( E g l o ( I ) ) U(E _ {glo}(I)) U(Eglo(I)) ∥ \rVert F 2 {_ {F}^2} F2.

原则上,可以通过将 E l o c E _ {loc} Eloc的特征直接与 U ο E g l o U\omicron E _ {glo} UοEglo的特征进行比较来进行计算异常分数。然而,我们的消融实验研究表明由于 E g l o E _ {glo} Eglo的低维度的瓶颈层,所以高维度的且详细的 E l o c E _ {loc} Eloc特征图只能由 E g l o E _ {glo} Eglo来近似复现生成。直接进行比较的话,由于不正确的特征重构,将会导致在异常图中出现许多误检。为了避免这个问题,全局分支的第二个网络 R g l o R _ {glo} Rglo被训练为使用损失项来匹配 E g l o E _ {glo} Eglo的输出,使用的损失项为:

L g l o ( I ) L _ {glo}(I) Lglo(I) = ∥ \lVert E g l o ( I ) E _ {glo}(I) Eglo(I) - R g l o ( I ) R _ {glo}(I) Rglo(I) ∥ \rVert F 2 {_ {F}^2} F2.

其中 R g l o R _ {glo} Rglo旨在将局部图像区域精确地变换为相应的特征向量,而不考虑训练数据的潜在逻辑约束。为了实现这一点, R g l o R _ {glo} Rglo不包含任何瓶颈层,并且被设计为带有跳跃连接的高容量网络。

备注:高容量网络可以理解为:网络中的神经单元数非常多,层数越多,神经网络的拟合能力越强。但是训练速度,难度越大,越容易产生过拟合。其中网络容量可以认为与网络的可训练参数成正比,也可以理解为高容量的网络就是参数量很大的网络! \color{Red}{备注:高容量网络可以理解为:网络中的神经单元数非常多,层数越多,神经网络的拟合能力越强。但是训练速度,难度越大,越容易产生过拟合。其中网络容量可以认为与网络的可训练参数成正比,也可以理解为高容量的网络就是参数量很大的网络!} 备注:高容量网络可以理解为:网络中的神经单元数非常多,层数越多,神经网络的拟合能力越强。但是训练速度,难度越大,越容易产生过拟合。其中网络容量可以认为与网络的可训练参数成正比,也可以理解为高容量的网络就是参数量很大的网络!

E g l o E _ {glo} Eglo R g l o R _ {glo} Rglo之间结构的差异在我们的方法中是非常重要的。 R g l o R _ {glo} Rglo的高容量使得它可以准确地重构 E g l o E _ {glo} Eglo的特征,这点与 E g l o E _ {glo} Eglo U ο E g l o U\omicron E _ {glo} UοEglo之间的重构误差进行比较可以减少误检的数量。跳跃连接使得 R g l o R _ {glo} Rglo能够在不捕获训练数据的全局上下文的情况下解决回归任务。因此,对于违反全局约束的异常测试图像, E g l o E _ {glo} Eglo R g l o R _ {glo} Rglo的输出不同。这点可以获取(需要分析长范围(长距离)依赖关系的)逻辑异常的定位。

3.3 Combination of the Two Branches:

我们端到端地使用单个损失项的累加所得的和训练整个模型,整个单个损失项是分别通过被匹配的特征的深度来进行的归一化,即:

L ( I ) L (I) L(I) = 1 d l o c L k d ( I ) \frac{1}{d _ {loc}}L _ {kd}(I) dloc1Lkd(I) + 1 d g l o L g l o ( I ) \frac{1}{d _ {glo}}L _ {glo}(I) dglo1Lglo(I) + 1 d l o c L l o c ( I ) \frac{1}{d _ {loc}}L _ {loc}(I) dloc1Lloc(I) .

由于 L k d L _ {kd} Lkd L g l o L _ {glo} Lglo的联合优化,这个全局特征编码器被鼓励去学习训练数据的有意义的描述符,并同时输出可以被特征回归网络容易匹配的表示。在学习的特征空间中计算残差有助于通过低维瓶颈对更高维度的特征进行精确匹配。

3.4 Scoring Functions for Anomaly Localization

在推理过程中,可以通过将图像编码器网络的特征与相对应的回归网络的特征进行比较来计算测试图像 J ∈ R w × h × n J\in\mathbb{R}^{w\times h\times n} JRw×h×n的逐像素异常的分数,即分别通过以下计算:

A l o c A _ {loc} Aloc = ∥ \lVert E l o c ( J ) E _ {loc}(J) Eloc(J) - R l o c ( J ) R _ {loc}(J) Rloc(J) ∥ \rVert 2 {^2} 2 ∈ R w × h \in\mathbb{R}^{w\times h} Rw×h.
A g l o A _ {glo} Aglo = ∥ \lVert E g l o ( J ) E _ {glo}(J) Eglo(J) - R g l o ( J ) R _ {glo}(J) Rglo(J) ∥ \rVert 2 {^2} 2 ∈ R w × h \in\mathbb{R}^{w\times h} Rw×h.

这儿,范数取在各自的特征维度( d l o c d _ {loc} dloc d g l o d _ {glo} dglo)上。回归误差大表示有异常的像素。 A l o c A _ {loc} Aloc主要负责检测结构异常的, A g l o A _ {glo} Aglo主要负责检测网络的逻辑异常的。

由于 E g l o E _ {glo} Eglo R g l o R _ {glo} Rglo网络的权重都是被随机初始化的,因此不存在对于两个网络在结构异常上表现不同这种训练动机。论文中的实验表明:全局分支确实是主要负责检测逻辑异常,然而局部分支在检测结构异常上表现得更好。

为了得到整个模型得异常图,我们在训练后计算验证集中所有图像 I I I A l o c ( I ) A _ {loc}(I) Aloc(I) A g l o ( I ) A _ {glo}(I) Aglo(I)
我们然后分别计算所有图片的结果分数的均值 μ l o c \mu _ {loc} μloc μ g l o \mu _ {glo} μglo以及标准差 σ l o c \sigma _{loc} σloc σ g l o \sigma _{glo} σglo

在推理阶段,我们归一化单独的异常分数图并且定义这个组合异常分数图,如下:

A A A = A l o c − μ l o c σ l o c \frac{A _ {loc} - \mu _ {loc}}{\sigma _ {loc}} σlocAlocμloc + A g l o − μ g l o σ g l o \frac{A _ {glo} - \mu _ {glo}}{\sigma _ {glo}} σgloAgloμglo.

注意我们数据集中的验证集仅仅包含无异常的影像。这里,我们使用相对应的异常图像仅仅是为了去调节两个分支的异常分数的尺度值。

3.5 Anomaly Detection on Multiple Scales

对于 E l o c {E _ {loc}} Eloc的感受野大小 p p p的选择,这个是对于异常定位的性能是有非常大的影响的,特别地是当异常对象的尺寸变化非常大的时候。为了更少地依赖感受野大小的特殊选择,我们在多个感受野大小 p p p下训练了多个模型。
然后通过计算这些模型对应的异常分数图的逐像素的平均值来将这些模型的异常分数图进行结合。

p p p是所有评估的感受野的集合,且 A ( p ) A^{(p)} A(p)是从具有 p ∈ P p\in P pP大小感受野模型所获得的异常图。
不同感受野对应的异常分数图是通过计算 1 [ p ] Σ p ∈ P A ( p ) \frac{1}{[p]}{\Sigma} _ {p\in P}A^{(p)} [p]1ΣpPA(p) .

四、全局特征编码器 E g l o E_ {glo} Eglo的网络结构

在这里插入图片描述

E g l o E_ {glo} Eglo输出的 d g l o d_ {glo} dglo特征通过一个上采样网络 U U U转换为 d l o c d_ {loc} dloc特征。这个上采样网络 U U U是由3个带有非线性激活函数的 1 × 1 1\times1 1×1卷积组成。
上采样网络 U U U的输出与与预训练网络 E l o c E_ {loc} Eloc给出的描述符相匹配。最后,两个回归网络 R l o c R_ {loc} Rloc R g l o R_ {glo} Rglo有一个与U-Net相似的结构。

这个与U-Net相似的结构我们使用了一个可公开访问的实现( https://github.com/jvanvugt/pytorch-unet.),其中包括五个下采样块、五个上采样块和一个大小为16×16×1024的瓶颈。

在训练之前,我们对预训练的网络 E l o c E_ {loc} Eloc的特征进行归一化。对于每个 d l o c d_ {loc} dloc特征维度,我们计算训练数据集上所有描述符的平均值和标准差。然后我们更新 E l o c E_ {loc} Eloc的最后一层的权重参数去输出归一化后的特征。

在头50轮次训练,我们仅仅训练全局特征编码器 E g l o E_ {glo} Eglo、上采样网络 U U U和局部回归网络 R l o c R_ {loc} Rloc;在剩下的450轮次训练中,优化全局回归网络 R g l o R_ {glo} Rglo

五、局部特征编码器 E l o c E_ {loc} Eloc的网络结构

使用的网络架构和训练配置与(Bergmann, P., Fauser, M., Sattlegger, D., & Steger, C. (2020). Uninformed students: Student–teacher anomaly detection with discriminative latent embeddings. In 2020 IEEE/CVF Conference on
Computer Vision and Pattern Recognition (CVPR), pp 4182–4191.)
是一样的。

未完待续。。。。

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

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

相关文章

【redis】Stream、String 超详细介绍

文章目录 一、Stream1.1 写入数据XADD条目 ID 的格式 1.2 获取数据XRANGE 和 XREVRANGEXREAD 监听新条目非阻塞形式阻塞形式 1.3 消费者组XGROUP 创建消费者组XREADGROUP 通过消费者组消费XACK 确认消息消费者组示例 1.4 XPENDING 和 XCLAIM 认领 其他消费者 的待处理消息XPEND…

(2022,MaskedGAN)掩蔽的生成对抗网络是数据高效生成学习者

Masked Generative Adversarial Networks are Data-Efficient Generation Learners 公众号&#xff1a;EDPJ 目录 0. 摘要 1. 简介 2. 相关工作 3. 方法 3.1 任务定义 3.2 掩蔽的生成对抗网络 3.3 理论见解 4. 实验 4.1 在 CIFAR-10、CIFAR-100 和 ImageNet 上使用…

算法基础学习笔记——④前缀和\差分\双指针\位运算

✨博主&#xff1a;命运之光 ✨专栏&#xff1a;算法基础学习 目录 ✨前缀和 ✨一维前缀和 &#x1f353;一维前缀和模板&#xff1a; ✨二维前缀和 &#x1f353;二位前缀和模板&#xff1a; 前言&#xff1a;算法学习笔记记录日常分享&#xff0c;需要的看哈O(∩_∩)O&a…

Python二级编程:分词去重

一、原题 参考编程模板&#xff0c;完善代码&#xff0c;实现以下功能。‪‪‪‪‪‫‫‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪‪‫ 利用 jieba 库实现中文分词。对分词后的列表进行去重处理&#xff0c;然后将分词结果中字符数大于等于 3 的词语&…

大话手游原始服务端搭建教程Centos

大话手游原始服务端搭建教程Centos 大家好&#xff0c;我是艾西&#xff0c;今天给大家分享一款回合制的ARPG大话手游搭建教程。游戏场景、精美的画面以及多元的人物做的非常棒。在游戏中可以穿越神话世界&#xff0c;同时也可以结交好友&#xff0c;加入团队&#xff0c;共同…

按键的单击、双击、连续按、短按和长按实现思路

概念区分 看到好多教程说了这些概念&#xff0c;有的说单击就是短按&#xff0c;连续按就是长按等等。 其实&#xff0c;仔细想想&#xff0c;这几个概念是有一些区别的。 假如一个按键&#xff0c;没按下时是高电平&#xff0c;按下时是低电平&#xff0c;以此来理解这些概念。…

JVM—Class类文件结构详解

Class类文件的结构 要了解Class文件的结构首先得了解Class文件所采用的数据类型&#xff1a; Class文件格式采用一种类似C语言结构体的伪结构来存储数据&#xff0c;这种伪结构只有两种数据结构&#xff0c;即无符号数和表&#xff0c;解析Class文件全是以这两个数据结构为基础…

【数据结构】什么是堆,如何使用无序数组生成一个堆?

文章目录 一、堆的概念及其介绍二、如何使用无序序列构建一个堆&#xff1f;三、C语言实现堆的基本操作结构体创建与销毁获取堆顶数据与个数及堆的判空堆的插入与删除 源代码分享 一、堆的概念及其介绍 堆(Heap)是计算机科学中一类特殊的数据结构的统称&#xff0c;堆通常是一…

LEETCODE 每日一题 1093.大样本统计

题目描述 前往leetcode1093题 我们对 0 到 255 之间的整数进行采样&#xff0c;并将结果存储在数组 count 中&#xff1a;count[k] 就是整数 k 在样本中出现的次数。 计算以下统计数据: minimum &#xff1a;样本中的最小元素。 maximum &#xff1a;样品中的最大元素。 mean &…

【Log】About these two years

文章目录 第一篇博客&#xff1f;成长收获的季节Future 第一篇博客&#xff1f; 第一次在CSDN发布博客&#xff0c;是当初我学习嵌入式的时候&#xff0c;那个时候我们做了一个大创&#xff0c;其中使用到了激光雷达&#xff0c;然后我就负责激光雷达部分代码的编写和设计&…

AI-新手玩转RKNN

关于RKNN RKNN 是Rockchip npu 平台使用的模型类型&#xff0c;以.rknn后缀结尾的模型文件。Rockchip 提供了完整了模型转换 Python 工具&#xff0c;方便用户将自主研发的算法模型转换成 RKNN 模型&#xff0c;同时 Rockchip 也提供了C/C和Python API 接口。 #mermaid-svg-M7l…

电子器件系列37:SD卡座(Push-Push和Push-Pull)

SD卡座是目前最通用的数据存储卡座、记忆卡座。在各种通讯数码产品、安防产品、带储存类产品等设备上都有所应用。有着性价比高、存储容量大、使用便捷、通用性以及安全性强等特点。自弹式SD卡座的卡槽底部会设有一个小直径、小线径的弹簧或一种切口式弹片。当装入SD卡时&#…

Kafka如何保证数据高可靠

这节课给大家分享一下Kafka的数据高可靠。为什么要讲这个&#xff1f;因为Kafka它本身不是一个金融级别数据可靠的分布式消息系统。 虽然说它存储到某个topic里的数据会先拆分多个partition&#xff0c;这体现了分治的一个思想。每一个partition在最终存储的时候会保存多个副本…

117.【微信小程序】

微信小程序 (一)、微信小程序概括1.微信小程序简介(1).小程序与普通网页开发的区别 2.注册微信小程序账号(1).注册小程序账号(2).获取小程序的AppID 3.安装微信开发者工具(1).微信开发者工具的简介:(2).微信开发者工具的下载 4.创建第一个小程序(1).创建小程序步骤(2).开发者工…

域横向移动-传递攻击atschtasks

横向移动就是拿下对方一台主机后&#xff0c;以拿下的那台主机作为跳板&#xff0c;对内网的其他主机再进行后渗透&#xff0c;拿到其他内网主机的权限的过程。叫做横向移动。横向移动的主要目的就是扩大战果。 传递攻击主要建立在明文和hash值获取基础上进行攻击。 at和scht…

Typora改变字体颜色

方法一&#xff1a;下载AutoHotkey并创建快捷键的方法&#xff08;推荐&#xff09; 第一步&#xff1a;在官网&#xff08;https://www.autohotkey.com/&#xff09;下载 AutoHotkey并傻瓜式安装&#xff0c;安装在任意盘符下均可&#xff1b; 第二步&#xff1a;在安装目录…

STM32F4_I2C(从机EEPROM/MPU-6050)协议详解

目录 1. I2C是什么 2. I2C物理层介绍 3. I2C协议层介绍 3.1 I2C基本读写过程 3.1.1 通讯复合格式 3.2 通讯的起始和停止信号 3.3 数据有效性 3.4 地址及数据方向 3.5 响应 4. STM32的I2C特性及架构 4.1 I2C架构剖析 5. I2C通讯过程 5.1 主发送器 5.2 主接收器 6…

Windows文件自动备份——“使用文件历史记录进行备份”

一、背景 因为有一些重要的文件需要经常改动&#xff0c;同时也有“找到某文件某历史版本”的需求&#xff0c;但考虑到时常手动备份比较麻烦&#xff0c;就想到了使用Windows自带的文件备份功能——“使用文件历史记录进行备份”来帮助进行文件的备份和版本管理。 二、环境 1…

一个测试开发人员在字节的7年,太真实了...

测试这条路是坎坷的&#xff0c;我自己深有体会。 我们的起点低&#xff0c;基础差。 测试这个职位也很尴尬&#xff0c;很少有公司会有针对性的对测试人员做成长规划&#xff0c;也很少有公司会那么重视测试人员&#xff0c; 也许进了像 BATJ 这样的大厂会好一点。 但是大多数…

nacos2.2.1搭建

springboot 3.0集成nacos2.2.1内容可评论区Q我 搭建环境&#xff1a; Java版本&#xff1a;11.0.18 系统&#xff1a;window7 数据库&#xff1a;mysql8.0.29 第一步&#xff0c;下载nacos&#xff0c;下载地址&#xff1a; https://github.com/alibaba/nacos/releases/d…