【2024工业图像异常检测文献】UCAD: 使用对比学习提示的无监督连续异常检测方法

news2024/11/24 21:26:51

Unsupervised Continual Anomaly Detection with Contrastively-learned Prompt

1、Background

无监督异常检测(UAD)专注于在没有先验知识或标记实例的情况下识别数据中的不寻常模式或异常值,仅依赖于“正常”数据的内在分布(Chandola, Banerjee, 和 Kumar 2009)。这种方法在工业制造中特别有用,因为获取标记良好的缺陷数据可能既困难又昂贵。

最近关于 UAD 的研究涉及为不同类别训练不同的模型,这在测试阶段不可避免地依赖于类别身份的知识(Liu et al. 2023b)。此外,迫使不同的模型顺序学习也会导致随着类别增加而沉重的计算负担。

一些其他方法专注于训练一个可以处理多个类别的统一模型,例如 UniAD(You et al. 2022)。在实际生产中,训练是顺序进行的,这使得 UniAD 要求所有数据同时训练变得不切实际。

此外,统一模型仍然缺乏在顺序训练期间持续适应频繁产品变更时保留先前学习知识的能力。灾难性遗忘和计算负担阻碍了 UAD 方法在现实世界场景中的应用。

持续学习(CL)以其解决灾难性遗忘问题而闻名,尤其是在由于隐私原因无法使用先前数据时(Li et al. 2023)。

最近关于持续学习的研究可以根据测试阶段是否需要任务身份进行分类。任务感知方法明确使用任务身份指导学习过程并防止任务间的干扰(Aljundi et al. 2018; Kirkpatrick et al. 2017)。然而,在推理过程中获取任务身份并不总是可能的。因此,任务不可知方法是必要的,也更为普遍。

Aljundi, Kelchtermans, 和 Tuytelaars 逐步修改数据分布以适应在线设置中的各种任务。L2P(Wang et al. 2022)动态学习提示作为任务身份。尽管任务不可知 CL 方法在监督任务中有效,但它们在 UAD 中的有效性尚未得到证明。

在工业中获得大规模异常数据是困难的,因为高生产成功率和隐私问题。因此,探索 CL 在 UAD 中的应用至关重要。到目前为止,除了高斯分布估计器(DNE)(Li et al. 2022)之外,没有已知的努力将 CL 纳入 UAD。然而,DNE 仍然依赖于增强(Li et al. 2021)来提供伪监督,并且不适用于异常分割。DNE 可以被认为是一个持续的二元图像分类方法,而不是持续的异常检测(AD)方法。在实际的工业制造中,准确分割异常区域对于异常标准化量化至关重要。因此,迫切需要一种能够同时执行无监督持续 AD 和分割的方法。

为了解决上述问题,我们提出了一个名为 UCAD 的新颖的无监督持续异常检测框架,它可以顺序地使用单个模型学习检测不同类别的异常,如图 1 所示。UCAD 整合了一个持续提示模块(CPM)以在无监督 AD 中启用 CL,以及一个基于结构的对比学习(SCL)模块以提取各种任务之间的更紧凑的特征。CPM 学习了一个“键提示知识”记忆空间,以存储自动选择的任务查询、任务适应提示和不同类别的“正常”知识。给定一张图像,键会自动选择以检索相应的任务提示。基于提示,图像特征被进一步提取,并与其正常知识进行比较以进行异常检测,类似于 PatchCore(Roth et al. 2022)。

然而,CPM 的性能受到限制,因为冻结的骨干(ViT)无法提供跨各种任务的紧凑特征表示。为了克服这一限制,引入了 SCL 以提取更具优势的特征表示,并通过利用 SAM(Kirillov et al. 2023)的通用分割能力来减少域间差距。有了 SCL,同一结构(分割区域)的特征被拉近,与其他结构的特征被推开。因此,提示对比学习以更好地提取不同任务的特征。

在这里插入图片描述

传统分离模型方法与UCAD(Unsupervised Continual Anomaly Detection,无监督持续异常检测)方法之间的比较:

  1. 分离模型方法(a)

    • 在传统的分离模型方法中,每个任务(或类别)都有自己的独立模型。这意味着对于每一个新的异常检测任务,都需要从头开始训练一个新的模型。
    • 这种方法的缺点在于,随着任务数量的增加,需要维护和存储的模型数量也会增加,这会导致计算资源和存储资源的需求大幅上升。
    • 此外,这种方法无法实现知识在不同任务之间的迁移,每个模型只能处理特定任务的数据,无法泛化到其他任务。
  2. UCAD方法(b)

    • 相比之下,UCAD方法使用单一模型来处理所有任务,而不需要知道具体任务的身份。这种方法的核心在于利用持续学习和对比学习技术,使得模型能够在学习新任务的同时保留对旧任务的知识。
    • 在连续的数据流中,UCAD只需要当前任务的数据集进行训练,并且能够将学到的知识应用到之前的任务上。这意味着模型能够持续地适应新的任务,而不会忘记旧任务的知识。
    • 这种方法的优势在于它的灵活性和效率。单一模型可以适应多个任务,减少了模型维护的复杂性和资源消耗。同时,它还能够在新任务上实现更好的泛化能力,因为它能够利用在旧任务上学到的知识。

总的来说,UCAD方法相比于传统分离模型方法的优势,特别是在处理多任务学习、持续学习和无监督异常检测的场景中。UCAD通过单一模型处理所有任务,不仅提高了资源利用效率,还增强了模型的适应性和泛化能力。

2、Method

文献中的Figure 2描述了无监督持续异常检测(UCAD)框架的主要组成部分,包括持续提示模块(CPM)和基于结构的对比学习(SCL)模块,这些模块与SAM(Segment Anything Model)网络集成在一起。

在这里插入图片描述

以下是对UCAD框架的解释:

  1. 持续提示模块(CPM)

    • CPM是UCAD框架的核心,负责建立一个高效的键-提示-知识系统。这个系统能够维护训练数据信息,同时减少内存和计算资源的使用。
    • 在训练阶段,CPM通过使用最远点采样(FPS)方法来选择代表性的特征作为“键”,这些键代表了不同的任务身份。
    • 同时,CPM利用可学习的“提示”来传递任务特定的信息,这些提示被注入到模型中以指导模型对当前任务的学习。
    • “知识”则作为模型学习到的正常样本的表示,用于后续的异常检测。
  2. 基于结构的对比学习(SCL)模块

    • SCL模块利用SAM网络的分割能力来增强特征表示。SAM网络能够为输入图像生成分割图,将图像分割成不同的区域或结构。
    • 通过对比学习,SCL模块拉近同一分割区域(结构)内的特征表示,并将不同区域的特征推开,从而使得特征更具区分性。
    • 这种对比学习方法有助于模型学习到更紧凑和更具代表性的特征,从而提高异常检测的准确性。
  3. 异常检测过程

    • 在异常检测阶段,UCAD框架通过比较当前样本的特征与检索到的特定任务的“知识”来检测异常。
    • 这一过程涉及到特征的提取和比较,其中CPM和SCL模块共同作用,以确保模型能够有效地从当前任务中学习,并保留对之前任务的知识。

总的来说,UCAD框架通过CPM和SCL模块的协同工作,实现了在无监督环境下对连续任务的持续学习和异常检测。CPM负责任务的识别和适应,而SCL模块则通过对比学习增强特征表示,最终实现对异常的准确检测。这种设计使得UCAD能够在处理新的异常检测任务时,不会遗忘之前学到的知识,从而在连续学习场景中表现出色。

pseudo-code

# 导入必要的库
from torchvision import transforms
from torch import nn
from your_model import VisionTransformer, SegmentAnythingModel

# 定义UCAD类
class UCAD:
    def __init__(self):
        self.vit = VisionTransformer()  # 预训练的视觉变换器(ViT)
        self.sam = SegmentAnythingModel()  # Segment Anything Model(SAM)
        self.cpm = ContinualPromptingModule()  # 持续提示模块
        self.scl = StructureBasedContrastiveLearning()  # 结构基对比学习模块

    def train(self, train_loader):
        # 训练UCAD模型
        for data, target in train_loader:
            self.cpm.task_identification(data)  # 任务识别
            self.scl.train(data, self.sam)  # 结构基对比学习训练
            self.cpm.task_adaptation(data)  # 任务适应

    def test(self, test_loader):
        # 测试UCAD模型
        for data in test_loader:
            task_identity = self.cpm.test_time_task_selection(data)  # 测试时任务选择
            anomaly_score = self.cpm.adapt_and_detect(data, task_identity)  # 适应和检测异常
            anomaly_map = self.scl.generate_anomaly_map(data)  # 生成异常图
            return anomaly_score, anomaly_map

# 定义持续提示模块
class ContinualPromptingModule(nn.Module):
    def __init__(self):
        super(ContinualPromptingModule, self).__init__()
        self.keys = {}  # 存储任务键
        self.prompts = {}  # 存储任务提示
        self.knowledge = {}  # 存储任务知识

    def task_identification(self, data):
        # 使用ViT提取特征并进行任务识别
        features = self.vit(data)
        task_key = self.select_task_key(features)
        return task_key

    def task_adaptation(self, data):
        # 任务适应和知识更新
        prompts = self.get_prompts(task_key)
        adapted_features = self.adapt_features(data, prompts)
        self.update_knowledge(adapted_features)

    def test_time_task_selection(self, data):
        # 测试时任务选择
        features = self.vit(data)
        task_key = self.find_closest_key(features)
        return task_key

    def adapt_and_detect(self, data, task_key):
        # 适应和检测异常
        prompts = self.get_prompts(task_key)
        adapted_features = self.adapt_features(data, prompts)
        anomaly_score = self.calculate_anomaly_score(adapted_features)
        return anomaly_score

# 定义基于结构的对比学习模块
class StructureBasedContrastiveLearning(nn.Module):
    def train(self, data, sam):
        # 使用SAM生成分割图并进行对比学习
        segmentation_map = sam(data)
        features = self.extract_features(data)
        self.update_features(features, segmentation_map)

    def generate_anomaly_map(self, data):
        # 生成异常图
        features = self.extract_features(data)
        anomaly_map = self.compare_features(features)
        return anomaly_map

# 实例化UCAD并训练测试
ucad = UCAD()
ucad.train(train_loader)  # 训练UCAD模型
anomaly_score, anomaly_map = ucad.test(test_loader)  # 测试UCAD模型

3、Experiments

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

4、Conclusion

  • 提出用于无监督异常检测和分割的任务不可知持续学习框架 UCAD 方法。
  • UCAD 的新颖性在于学习一个键提示知识记忆空间,以实现自动任务指令、知识转移、无监督异常检测和分割。
  • 提出使用对比学习的提示来改善无监督特征提取,通过利用 SAM 的通用能力来改善各种类别之间的特征提取。

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

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

相关文章

【算法】Floyd多源最短路径算法

目录 一、概念 二、思路 三、代码 一、概念 在前面的学习中,我们已经接触了Dijkstra、Bellman-Ford等单源最短路径算法。但首先我们要知道何为单源最短路径,何为多源最短路径 单源最短路径:从图中选取一点,求这个点到图中其他…

[C++]——哈希(附源码)

目录 ​编辑 ​编辑 一、前言 二、正文 2.1 unorder系列关联式容器 2.1.1 unordered_map 2.1.1.1 unorderer_map的介绍 ①unordered_map的构造 ②unordered_map的容量 ③unordered_map的迭代器 ④unordered_map的元素访问 ⑤unordered_map的查询 ⑥unordered_map的修改操…

使用Ubuntu快速部署MinIO对象存储

想拥有自己的私有云存储,安全可靠又高效?MinIO是你的理想选择!这篇文章将手把手教你如何在Ubuntu 22.04服务器上部署MinIO,并使用Nginx反向代理和Let’s Encrypt证书进行安全加固。 即使你是新手,也能轻松完成&#xf…

Maven 下载配置 详解 我的学习笔记

Maven 下载配置 详解 我的学习笔记 一、Maven 简介二、maven安装配置三、maven基本使用四、idea配置mavenidea配置maven环境maven坐标idea创建maven项目配置Maven-Helper插件 五、依赖管理 一、Maven 简介 Apache Maven 是一个项目管理和构建工具,它基于项目对象模型…

一文带你了解,全国职业院校技能大赛老年护理与保健赛项如何备赛

老年护理与保健,作为2023年全国职业院校技能大赛的新增赛项,紧密贴合党的二十大精神,致力于加速健康与养老产业的蓬勃发展,并深化医养康养结合的服务模式。此赛项不仅承载着立德树人的教育使命,更通过竞赛的引领作用&a…

STM32ZET6-USART使用

一、原理说明 STM32自带通讯接口 通讯目的 通信方式: 全双工:通信时可以双方同时通信。 半双工:通信时同一时间只能一个设备发送数据,其他设备接收。 单工:只能一个设备发送到另一个设备,例如USART只有…

电话语音机器人,是由哪些功能构成?

电话语音机器人是自动电话销售、筛选意向客户的,只要录入好行业话术,导入要拨打的手机号,机器人就可以上岗工作了。 电话语音机器人组成部分: 1、语音识别器,主要作用:识别客户讲话内容,从而做…

理解 WordPress | 第二篇:结构化分析

WordPress 专题致力于从 0 到 1 搞懂、用熟这种可视化建站工具。 第一阶段主要是理解。 第二阶段开始实践个人博客、企业官网、独立站的建设。 如果感兴趣,点个关注吧,防止迷路。 WordPress 的内容和功能结构可以按照层级来划分,这种层次化的…

vue3项目history模式部署404处理,使用 historyApiFallback 中间件支持单页面应用路由

vue3项目history模式部署404处理,使用 historyApiFallback 中间件支持单页面应用路由 在现代的 web 开发中,单页面应用(SPA)变得越来越流行。这类应用通常依赖于客户端路由来提供流畅的用户体验,但在服务器端&#xf…

计算机毕业设计Hadoop+PySpark深度学习游戏推荐系统 游戏可视化 游戏数据分析 游戏爬虫 Scrapy 机器学习 人工智能 大数据毕设

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

PHP电商供应链ERP管理系统小程序源码

🚀电商供应链大揭秘!ERP管理系统如何重塑你的商业版图✨ 🔍 什么是电商供应链ERP管理系统? 电商供应链ERP管理系统是一款基于FastAdminThinkPHP开发的系统。该系统可满足电商企业管理自身进销存,帮助中小型电商企业管…

全参微调与LoRA的区别,及7种LoRA变种方法解析

随着LLM的发展和应用,在LLM的预训练模型基础上做微调,使其适用于自己的业务场景的研究越来越多。与全参数SFT相比LoRA是在冻结LLM本身参数的基础上,在旁路增加两个可学习的矩阵,用于训练和学习,最后推理是LLM输出和可学…

ubuntu工具 -- ubuntu服务器临时没有网络,急需联网下载东西怎么办? 使用手机提供网络

问题 ubuntu服务器配置经常遇到临时需要网络下载文件需求, 通过有线连接又来不及 解决方法 使用手机usb为ubuntu服务器提供网络 先在ubuntu上运行 ifconfig 查看当前的网络接口, 一会看看多了哪个网口 1. 手机端操作 先使用usb数据线将手机连接到服务器上 打开手机的usb共享…

一文快速预览经典深度学习模型(一)——CNN、RNN、LSTM、Transformer、ViT

Hi,大家好,我是半亩花海。本文主要简要并通俗地介绍了几种经典的深度学习模型,如CNN、RNN、LSTM、Transformer、ViT(Vision Transformer)等,便于大家初探深度学习的相关知识,并更好地理解深度学…

【D3.js in Action 3 精译_038】4.2 D3 折线图的绘制方法及曲线插值处理

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第一部分 D3.js 基础知识 第一章 D3.js 简介(已完结) 1.1 何为 D3.js?1.2 D3 生态系统——入门须知1.3 数据可视化最佳实践(上)1.3 数据可…

数据结构(8.7_2)——败者树

多路平衡归并带来的问题 什么是败者树 败者树的构造 败者树的使用 败者树在多路平衡归并中的应用 败者树的实现思路 总结

Web Broker(Web服务应用程序)入门教程(1)

1、介绍 Web Broker 组件(位于工具面板的“Internet”选项卡中)可以帮助您创建与特定统一资源标识符(URI)相关联的事件处理程序。当处理完成后,您可以通过编程方式构建 HTML 或 XML 文档,并将它们传输给客…

Redis高级篇之缓存一致性详细教程

文章目录 0 前言1.缓存双写一致性的理解1.1 缓存按照操作来分 2. 数据库和缓存一致性的几种更新策略2.1 可以停机的情况2.2 我们讨论4种更新策略2.3 解决方案 总结 0 前言 缓存一致性问题在工作中绝对没办法回避的问题,比如:在实际开发过程中&#xff0c…

Vue2进阶之Vue3高级用法

Vue3高级用法 响应式Vue2:Object.definePropertyObject.definePropertythis.$set设置响应式 Vue3:Proxy composition APIVue2 option API和Vue3 compositionAPIreactive和shallowReactivereadonly效果toRefs效果 生命周期main.jsindex.htmlLifeCycle.vue…

Unity3D学习FPS游戏(10)子弹攻击敌人掉血(碰撞检测)

前言:前面最然创造出带有血条的敌人,但子弹打中敌人并没有效果。所以本篇将实现子弹攻击敌人,并让敌人掉血。 子弹攻击敌人掉血 整体思路目标补充知识-碰撞检测 准备工作刚体和碰撞器添加添加刚体后子弹代码优化补充知识-标签系统Tag添加 碰…