【2022工业3D异常检测文献】AST: 基于归一化流的双射性产生不对称学生-教师异常检测方法

Asymmetric Student-Teacher Networks for Industrial Anomaly Detection

1、Background

所谓的学生-教师网络,首先,对教师进行训练,以学习语义嵌入的辅助性训练任务;其次,训练学生以匹配教师的输出。主要目的是让学生只能匹配正常数据上的教师输出,因为它仅在正常数据上进行训练。在测试时使用学生和教师的输出之间的距离作为异常指标。一般情况下,这个距离对于有缺陷的示例比无缺陷的示例要大。

然而,由于使用了具有相似架构的常规(非单射)神经网络,因此学生和教师都倾向于对训练分布之外的输入进行不期望的泛化,从而给出不期望的低异常分数。如果学生和教师都使用具有一个隐藏层的相同神经网络,异常数据的输出仍然相似。相比之下,如果使用具有3个隐藏层的MLP作为学生,则异常的输出会发散。通常,由于常规神经网络缺少单射性,不能保证训练分布之外的输入会引起两者输出的足够大的变化。与归一化流相比,常规网络不能保证对训练分布之外的输入提供训练分布之外的输出。

为此,使用不对称的学生-教师网络(AST):一个双射归一化流[34]充当教师,而一个常规的顺序模型充当学生。通过这种方式,教师保证对由异常引起的输入变化敏感。此外,使用不同的架构,从而使用不同的可学习函数集,强制对训练分布之外的样本产生远距离输出的效果。作为教师的辅助性训练任务,通过最大似然训练将图像特征和/或深度图的分布转换为正态分布的过程,这等同于密度估计。这种优化通过使用似然作为异常分数:低的似然表示正常应该是异常的指标。然而,即使完美的密度估计器也不能保证异常检测。例如,仅仅重新参数化数据就会改变样本的似然。此外,不稳定的训练导致错误估计的似然。

使用归一化流本身进行异常检测的优势在于,可以补偿可能的似然估计错误:如果错误地将低的正常似然分配给正常数据,则学生可以预测这个输出,从而仍然产生小的异常分数。如果错误地将高的正常似然分配给异常数据,则学生无法预测这个输出,再次产生高异常分数。通过这种方式,结合了学生-教师网络和具有归一化流的密度估计的好处,通过位置编码以及使用3D图像遮罩前景进一步增强了检测。

supplement

  • 单射性网络(Injective Network)
    • 定义:在数学中,如果对于定义域中的所有不同元素 x 和 y,函数 f 的输出也不同,即 f(x) ≠ f(y),则称函数 f 是单射的。在神经网络中,单射性意味着网络对不同的输入 x 产生不同的输出。然而,单射性并不保证网络能够逆转,即从输出推导出唯一的输入。
    • 特点:单射性网络确保不同的输入映射到不同的输出,这对于某些任务(如某些类型的分类)是重要的。但是,它们不保证可以从输出唯一地确定输入,这限制了它们在需要精确逆过程的应用中的使用。
  • 双射性网络(Bijective Network)
    • 定义:在数学中,如果一个函数既是单射的又是满射的(Surjective),则称该函数是双射的。满射意味着对于每一个可能的输出值,都存在至少一个输入使得函数输出该值。 在神经网络中,双射性意味着网络不仅对不同的输入产生不同的输出,而且每个输出都可以唯一地追溯到一个输入。
    • 特点:双射性网络不仅可以确保不同的输入映射到不同的输出,还可以从输出唯一确定输入。这种性质在需要精确逆问题的场合非常有用,例如在图像处理中恢复原始图像,或者在时间序列预测中精确地反向预测。
  • 应用和例子
    • 归一化流(Normalizing Flows):这是一类特殊的生成模型,设计为双射性,使得它们能够精确地估计输入数据的密度。归一化流通过一系列可逆的变换来实现这一点,这些变换允许模型从简单的分布(如高斯分布)转换到复杂的数据分布,同时保持概率密度的计算能力。
    • 自编码器:通常不是双射性的,因为它们旨在通过编码器压缩数据,并通过解码器重建数据。自编码器的输出可能对应多个输入,因此不具备双射性。

2、Method

教师网络(Teacher Network):

  1. 输入:教师网络接收图像特征和/或深度图作为输入。这些输入数据可能来自于常规的RGB图像或者3D扫描图像。
  2. 位置编码(Positional Encoding):输入数据会通过一个位置编码层,这一层给输入数据添加位置信息。位置编码通常是必要的,因为归一化流需要理解数据中的空间结构(例如,图像中像素的相对位置)。
  3. 归一化流(Normalizing Flow):教师网络由归一化流构成,它是一个通过一系列可逆转换来实现数据分布映射的神经网络。
  4. 负对数似然损失(Negative Log Likelihood Loss):教师网络的目标是最小化负对数似然损失,这是概率模型中常用的损失函数,用于模型参数的优化。其目的是使得经过归一化流转换后的数据尽可能接近正态分布。
  5. 掩码(Masking):在3D数据中,只关注前景对象,忽略背景。为此,使用从3D数据生成的前景图(foreground map)来掩蔽损失函数,确保在训练过程中只考虑前景部分。

学生网络(Student Network):

  1. 输入:与教师网络相同,学生网络也接收图像特征和/或深度图作为输入,同样经过位置编码。
  2. 训练目标:学生网络的训练目标是尽可能匹配教师网络的输出。这是通过最小化两者输出之间的距离来实现的。
  3. 掩码距离(Masked Distance):与教师网络类似,学生网络在计算距离时也使用掩码,确保只考虑前景部分。
  4. 最小化距离:学生网络通过最小化与教师网络输出之间的(掩码)距离来进行训练。这意味着,学生网络学习在无缺陷的图像数据上模仿教师网络的行为。

在这里插入图片描述

  • 模型训练目标
    • 教师网络:被训练以将输入数据(图像特征和/或深度图)通过一系列可逆转换映射到一个简单的分布,通常是高斯分布。
    • 学生网络:被训练以模仿教师网络的输出,但仅针对无缺陷的训练样本。
  • 教师网络
    • 归一化流:使用基于 Real-NVP 的归一化流,它由多个耦合块组成,每个块通过仿射变换处理数据。
    • 可逆转换:每个耦合块将输入分割成两部分,对其中一部分进行变换,同时保持另一部分不变,确保整个过程是可逆的。
    • 优化目标:最小化负对数似然损失,使得输入数据经过变换后尽可能接近高斯分布。
  • 学生网络
    • 前馈网络:使用常规的全卷积网络,包含多个残差块,每个块由卷积层、批量归一化和激活函数组成。
    • 训练策略:学生网络仅使用无缺陷的样本进行训练,目标是最小化其输出与教师网络输出之间的距离。
  • 异常检测流程
    • 输入处理:输入样本(无论是正常还是异常)被同时送入教师网络和学生网络。
    • 教师网络输出:教师网络处理输入样本并输出变换后的数据。
    • 学生网络输出:学生网络也处理相同的输入样本,并尝试输出与教师网络相似的结果。
    • 计算距离:计算学生网络和教师网络输出之间的距离。这个距离被用作异常评分的依据。
    • 异常判断:如果输出距离大于某个阈值,则认为样本可能是异常的。
  • 关键技术点
    • 双射性:归一化流的双射性确保了数据可以被精确地映射回其原始状态,这是进行有效密度估计的关键。
    • 不对称性:学生网络和教师网络的结构差异导致学生网络在处理异常数据时无法准确模仿教师网络的输出,从而在正常和异常样本之间产生显著的距离差异。
    • 位置编码:使用正弦位置编码为归一化流提供空间位置信息,有助于更好地捕捉和利用输入数据的空间结构。
  • 优势
    • 鲁棒性:该方法对教师网络可能的不准确似然估计具有鲁棒性,因为学生网络的输出提供了额外的验证。
    • 性能:通过利用学生-教师网络架构的不对称性和输出距离,该方法在异常检测任务中取得了优异的性能。

pseudo-code

# 定义教师网络(基于归一化流)
class TeacherNetwork:def __init__(self):# 初始化归一化流架构self.flow = RealNVP()self.positional_encoding = PositionalEncoding()def forward(self, x):# 应用位置编码x_encoded = self.positional_encoding(x)# 归一化流转换z = self.flow(x_encoded)# 计算负对数似然损失neg_log_likelihood = -self.compute_nll(z)return z, neg_log_likelihood# 定义学生网络(基于常规卷积网络)
class StudentNetwork:def __init__(self):# 初始化卷积网络架构self.conv_net = ConvNet()def forward(self, x):# 直接通过卷积网络x_encoded = self.conv_net(x)return x_encoded# 定义训练流程
def train(teacher_network, student_network, train_loader):optimizer_teacher = Adam()optimizer_student = Adam()for x_train in train_loader:# 教师网络前向传播z, nll_loss = teacher_network.forward(x_train)# 学生网络前向传播x_student = student_network.forward(x_train)# 计算学生和教师输出的距离损失distance_loss = compute_distance_loss(x_student, z)# 教师网络优化(最小化负对数似然)optimizer_teacher.zero_grad()nll_loss.backward()optimizer_teacher.step()# 学生网络优化(最小化距离损失)optimizer_student.zero_grad()distance_loss.backward()optimizer_student.step()# 定义测试/异常检测流程
def detect_anomalies(teacher_network, student_network, test_loader, threshold):for x_test in test_loader:# 教师网络前向传播z = teacher_network.forward(x_test)# 学生网络前向传播x_student = student_network.forward(x_test)# 计算异常分数(学生和教师输出的距离)anomaly_score = compute_distance(x_student, z)# 阈值判断异常if anomaly_score > threshold:flag_anomaly(x_test)else:flag_normal(x_test)# 主函数
def main():teacher_net = TeacherNetwork()student_net = StudentNetwork()train_loader = load_training_data()test_loader = load_test_data()train(teacher_net, student_net, train_loader)threshold = define_threshold()detect_anomalies(teacher_net, student_net, test_loader, threshold)if __name__ == "__main__":main()

3、Experiments

🐂🐎。。。

在这里插入图片描述

在这里插入图片描述

4、Conclusion

提出了不对称学生-教师异常检测方法AST,在异常检测的上下文中,使用双射性网络(如归一化流)作为教师模型可以帮助学生网络学习到更复杂的数据表示,同时确保从输出到输入的可追溯性。

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

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

相关文章

SpringBoot日志打印实践

背景 在项目当中,我们经常需要打印一些日志埋点信息,这些日志埋点信息,在后续软件的运维、稳定性建设中发挥了巨大的作用: 问题追踪:通过埋点日志中的关键信息,帮助定位系统异常原因系统监控:…

移动硬盘传输中断后无法识别:问题解析与数据恢复策略

一、移动硬盘传输中断后的无法识别现象 在日常的数据传输过程中,移动硬盘作为便携式的存储介质,扮演着举足轻重的角色。然而,当传输过程被意外中断,且移动硬盘随后无法被系统识别时,这无疑会给用户带来极大的困扰。你…

Stable Diffusion绘画 | 插件-Deforum:动态视频生成(上篇)

Deforum 与 AnimateDiff 不太一样, AnimateDiff 是生成丝滑变化视频的,而 Deforum 的丝滑程度远远没有 AnimateDiff 好。 它是根据对比前面一帧的画面,然后不断生成新的相似图片,来组合成一个完整的视频。 Deforum 的优点在于可…

Pikachu-Sql Inject-宽字节注入

基本概念 宽字节是相对于ascII这样单字节而言的;像 GB2312、GBK、GB18030、BIG5、Shift_JIS 等这些都是常说的宽字节,实际上只有两字节 GBK 是一种多字符的编码,通常来说,一个 gbk 编码汉字,占用2个字节。一个…

【一文理解】conda install pip install 区别

大部分情况下,conda install & pip install 二者安装的package都可以正常work,但是混装多种package后容易版本冲突,出现各种报错。 目录 检查机制 支持语言 库的位置 环境隔离 编译情况 检查机制 conda有严格的检查机制&#xff0c…

【C++】模拟实现红黑树

🦄个人主页:修修修也 🎏所属专栏:实战项目集 ⚙️操作环境:Visual Studio 2022 目录 一.了解项目功能 二.逐步实现项目功能模块及其逻辑详解 📌实现RBTreeNode类模板 🎏构造RBTreeNode类成员变量 🎏实现RBTreeNode类构…

图解C#高级教程(二):事件

在现实生活当中,有一些事情发生时,会连带另一些事情的发生。例如,当某国的总统发生换届时,不同党派会表现出不同的行为。两者构成了“因果”关系,因为发生了A,所以发生了B。在编程语言当中,具有…

Android问题笔记五十:构建错误-AAPT2 aapt2-7.0.2-7396180-windows Daemon

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分…

Visual Studio 字体与主题推荐

个人推荐,仅供参考: 主题:One Monokai VS Theme 链接:One Monokai VS Theme - Visual Studio Marketplacehttps://marketplace.visualstudio.com/items?itemNameazemoh.onemonokai 效果: 字体:JetBrain…

SpringBoot项目请求不中断动态更新代码

在开发中,有时候不停机动态更新代码热部署是一项至关重要的功能,它可以在请求不中断的情况下下更新代码。这种方式不仅提高了开发效率,还能加速测试和调试过程。本文将详细介绍如何在 Spring Boot 项目在Linux系统中实现热部署,特…

《业务三板斧:定目标、抓过程、拿结果》读书笔记1

这个书是24年新书,来自阿里系的人的作品,还可以。今天先看前沿部分的精彩部分: 我们在服务企业的过程中,发现了一个常见的管理现象:管理者自 己承担了团队里重要的项目,把风险和压力都集中在自己身上。因 此…

报刊订阅系统小程序的设计

管理员账户功能包括:系统首页,个人中心,用户管理,报刊类型管理,报刊信息管理,报刊订阅管理,订阅发送管理,系统管理 微信端账号功能包括:系统首页,报刊信息&a…

<<迷雾>> 第7章 会变魔术的触发器(1)--连着两个按键开关的逻辑电路 示例电路

info::操作说明 鼠标单击开关切换开合状态 A 能使灯点亮并保持; B 则点亮的灯熄灭. 注: 此处使用的是 按钮开关, 松开鼠标后开关会自己断开, 类似于手机和电脑上的电源按钮 因系统原因, 此类开关与普通开关在外观上并无差别. primary::在线交互操作链接 https://cc.xiaogd.net/…

【Android】获取备案所需的公钥以及签名MD5值

目录 重要前提 获取签名MD5值 获取公钥 重要前提 生成jks文件以及gradle配置应用该文件。具体步骤请参考我这篇文章:【Android】配置Gradle打包apk的环境_generate signed bundle or apk-CSDN博客 你只需要从头看到该文章的配置build.gradle(app&…

HTML流光爱心

文章目录 序号目录1HTML满屏跳动的爱心(可写字)2HTML五彩缤纷的爱心3HTML满屏漂浮爱心4HTML情人节快乐5HTML蓝色爱心射线6HTML跳动的爱心(简易版)7HTML粒子爱心8HTML蓝色动态爱心9HTML跳动的爱心(双心版)1…

回归预测 | Matlab基于POA-SVR鹈鹕算法优化支持向量机的数据多输入单输出回归预测

回归预测 | Matlab基于POA-SVR鹈鹕算法优化支持向量机的数据多输入单输出回归预测 目录 回归预测 | Matlab基于POA-SVR鹈鹕算法优化支持向量机的数据多输入单输出回归预测预测效果基本描述程序设计参考资料 预测效果 基本描述 1.Matlab基于POA-SVR鹈鹕算法优化支持向量机的数据…

检查jar冲突,查找存在相同class的jar

写在前面 本文看下如何查找jar冲突,即查找哪些jar包中存在相同的class。如果是存在相同jar的不同版本,基本一眼就能看出来,然后结合maven的依赖关系将其剔除掉即可,但是当你遇到了有人手动拷贝某些class到jar包中导致冲突的情况时…

wpf实现新用户页面引导

第一步 第二部 部分代码: private void show(int xh, FrameworkElement fe, string con, Visibility vis Visibility.Visible) {Point point fe.TransformToAncestor(Window.GetWindow(fe)).Transform(new Point(0, 0));//获取控件坐标点RectangleGeometry rg new Rectangl…

FP7209: 用于紫外线消毒灯的 升压LED恒流驱动芯片

现在社会对于居家消毒也越发重视起来。而居家消毒除了75%浓度酒精及各类消毒液外,利用紫外线灯给衣物表面、房间消毒也是一种很好的选择。FP7209 定位于低压线性恒流驱动,精度高、外围电路简单、使用方便且可靠性高,更可广泛应用于商业照明系…

鸿蒙harmonyos next flutter通信之BasicMessageChannel获取app版本号

本文将通过BasicMessageChannel获取app版本号,以此来演练BasicMessageChannel用法。 建立channel flutter代码: //建立通道 BasicMessageChannel basicMessageChannel BasicMessageChannel("com.xmg.basicMessageChannel",StringCodec());…