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

embedded/2024/12/22 13:53:32/

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.ppmy.cn/embedded/125567.html

相关文章

学习文档三

超过 long 整型的数据应该如何表示? 基本数值类型都有一个表达范围,如果超过这个范围就会有数值溢出的风险。 在 Java 中,64 位 long 整型是最大的整数类型。 long l Long.MAX_VALUE; System.out.println(l 1); // -9223372036854775808 System.ou…

渐进蒸馏和v-prediction

渐进蒸馏和v-prediction TL;DR:比较早期的用蒸馏的思想来做扩散模型采样加速的方法,通过渐进地对预训练的扩散模型进行蒸馏,学生模型一步学习教师模型两步的去噪结果,不断降低采样步数。并提出一种新的参数化形式 v \mathbf{v} …

设计模式之原型模式(通俗易懂--代码辅助理解【Java版】)

文章目录 设计模式概述1、原型模式2、原型模式的使用场景3、优点4、缺点5、主要角色6、代码示例7、总结题外话关于使用序列化实现深拷贝 设计模式概述 创建型模式:工厂方法、抽象方法、建造者、原型、单例。 结构型模式有:适配器、桥接、组合、装饰器、…

kubelet 运行机制、功能 全面分析

Kubelet 在Kubernetes集群中,在每个Node(又称为Minion)上都会启动一个Kubelet服务进程。该进程用于处理Master下发到本节点的任务,管理Pod及Pod中的容器。每个Kubelet进程都会在API Server上注册节点自身的信息,定期向…

微信搜一搜又升级啦!

据“微信派”微信公号10月8日消息,微信搜一搜上线“搜索直达”功能,相关话题登上微博热搜。网友表示这个更新可以省去翻设置功能的步骤,更直接、快速地解决问题。 搜“拍一拍设置” 搜“深夜模式设置” 搜“来电铃声设置” 搜“关怀模式”设置…

王道408考研数据结构-图-第六章

6.1 图的基本概念 6.1.1 图的定义 图G由顶点集V和边集 E组成,记为G(V,E),其中 V(G)表示图G中顶点的有限非空集;E(G)表示图G中顶点之间的关系(边)集合。若V{v?,v?,…,vn},则用|M表示图G中顶第6章 点的个数,E{(u,v) | uεV,vεV},用|E|表示图…

SQL自学:什么是SQL的聚集函数,如何利用它们汇总表的数据

在 SQL(Structured Query Language,结构化查询语言)中,聚集函数也称为聚合函数,是对一组值进行计算并返回单一值的函数。 一、常见的聚集函数及功能 1. AVG():用于计算某一列的平均值。 例如,…

自动驾驶汽车横向控制方法研究综述

【摘要】 为实现精确、稳定的横向控制,提高车辆自主行驶的安全性和保障乘坐舒适性,综述了近年来自动驾驶汽车横向控制方法的最新进展,包括经典控制方法和基于深度学习的方法,讨论了各类方法的性能特点及在应用中的优缺点&#xff…