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

news2024/11/24 14:48:10

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.coloradmin.cn/o/2188207.html

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

相关文章

YOLOv11改进 | Conv篇 | YOLOv11引入SAConv模块

1. SAConv介绍 1.1 摘要: 许多现代物体检测器通过使用三思而后行的机制表现出出色的性能。 在本文中,我们在目标检测的主干设计中探索了这种机制。 在宏观层面,我们提出了递归特征金字塔,它将特征金字塔网络的额外反馈连接合并到自下而上的骨干层中。 在微观层面,我们提出…

LabVIEW提高开发效率技巧----属性节点优化

在LabVIEW开发中,优化代码的效率和性能是非常重要的,尤其是在涉及前面板控件的属性节点时。频繁使用属性节点可能会导致程序执行速度的明显下降,特别是在处理大量数据或高频率操作时。下面详细介绍一些在LabVIEW开发中优化属性节点使用的技巧…

Vue3常用API总结

因为这个月的月初给自己定了个小目标,学完Vue3的基本使用,并使用Vue3亲手做一个小项目(稍微透露一下,我制作的是一个小工具,现在已经完成了90%了,这个月月底之前会通过博客的形式向大家展示&…

如何提高游戏本地化的质量使用QE门户网站Logrus IT

高质量的游戏本地化是全球市场成功的关键。这尤其适用于AAA和AA级别的游戏,玩家在这些游戏中投入了大量资金,并期望从中获得完美的游戏体验。尽管公司做出了努力,但传统的质量控制方法并不总是能够防止所有错误和本地化不准确。让我们更详细地…

【深度学习】交叉熵

交叉熵(Cross-Entropy)是信息论中的一个重要概念,也是在机器学习和深度学习中用于分类任务的常见损失函数。它衡量的是两个概率分布之间的差异,特别是模型的预测概率分布与真实分布的差异。 交叉熵最初是从信息论引入的&#xff0…

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

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

【高频SQL基础50题】21-25

我又回来了。 目录 1.删除重复的电子邮箱 2.文章浏览 I 3.上升的温度 4.各赛事的用户注册率 5.超过 5 名学生的课 1.删除重复的电子邮箱 高级字符串检索题。 使用自连接的方式,面对上亿级别数据,效率也可以很高。 # Write your MySQL query st…

【算法】链表:92.反转链表(medium)+双指针

系列专栏 《分治》 《模拟》 《Linux》 目录 1、题目链接 2、题目介绍 3、解法 (双指针) 4、代码 是 206. 反转链表 - 力扣(LeetCode)的类型题,且难度提升,可以先完成206,然后参照206的…

MATLAB工具库:数据统计分析工具MvCAT、MhAST等

MATLAB工具库:数据统计分析工具MvCAT、MhAST等 工具1:Multivariate Copula Analysis Toolbox (MvCAT)MATLAB中运行 工具2:Multi-hazard Scenario Analysis Toolbox (MhAST) 参考 The University of California-软件库-Software 工具1&#xf…

10.3学习

1.循环依赖 循环依赖其实就是循环引用,也就是两个或者两个以上的 Bean 互相持有对方,最终形成闭环。比如A 依赖于B,B又依赖于A Spring中循环依赖场景有: prototype 原型 bean循环依赖 构造器的循环依赖(构造器注入)…

mysql-索引笔记

索引 1、什么是索引 索引是对数据库中数据的一种结构化表示。它像一本书的目录,能够快速定位信息,而无需逐行扫描所有数据。 索引的出现其实就是为了提高数据查询的效率,就像书的目录一样。 2、索引的常见模型 2.1.哈希表 用一个哈希函…

ChatGPT推出Canvas功能

"Canvas" 是 OpenAI 推出的全新界面,专为增强写作和编程协作而设计。它让用户能够在聊天之外更高效地进行编辑、审阅和反馈,提供了内联编辑、代码调试和文档版本控制等功能。目前,"Canvas" 已面向 ChatGPT Plus 和 Team …

Java进销存ERP管理系统源码

文章目录 1.项目介绍2.获取方式 1.项目介绍 主要模块:零售管理、采购管理、销售管理 仓库管理、财务管理、报表查询系统管理等。 支持预付款、收入支出 仓库调拨、组装拆卸、订单等特色功能 拥有库存状况、出入库 统计等报表 同时对角色和权限进行了细致全面控制&#xff0c…

【Spring】@RequestMapping、@RestController和Postman

文章目录 1.RequestMapping 注解介绍2. RequestMapping 使用3. RequestMapping 是 GET 还是 POST 请求?GET 请求POST 请求指定 GET/POST 方法类型 2. Postman 介绍1. 创建请求2. 传参介绍1. 普通传参2. form-data3. x-www-form-urlencoded form 表单,对应…

【深度学习】损失函数

损失函数(Loss Function)是机器学习和深度学习模型中的一个核心概念,它用于衡量模型的预测输出与真实标签之间的差异。通过优化(最小化)损失函数,模型可以不断调整其内部参数,提升预测性能。不同…

通信工程学习:什么是IP网际协议

IP:网际协议 IP网际协议(Internet Protocol,简称IP)是整个TCP/IP协议栈中的核心协议之一,它负责在网络中传送数据包,并提供寻址和路由功能。以下是对IP网际协议的详细解释: 一、对IP网际协议的…

Ubuntu安装Hadoop3.4

1、创建Hadoop用户 sudo adduser hadoop 将Hadoop加进sudo用户组,赋予更高权限: sudo usermod -G sudo hadoop 3、安装JDK(略) 查看JDK安装路径:which java 和 ls -al 3、配置SSH免密登录 在Hadoop分布式集群环境中,各个机器之间的通信通常需要使用SSH的方式进行连…

判断一个队列实例是否为空Queue.empty()

【小白从小学Python、C、Java】 【考研初试复试毕业设计】 【Python基础AI数据分析】 判断一个队列实例是否为空 Queue.empty() [太阳]选择题 根据给定的Python代码,哪个选项是错误的? import queue print("【执行】q queue.Queue()") …

react-问卷星项目(5)

实战 路由 路由设计,网址和页面的关系,就是从业务上分析需要哪些页面哪些页面内容可以抽离,业务流程要有入有出增加页面和Layout模版,模版就是抽离页面公共部分,比如都有顶部或者左侧导航,直接上代码&…