深度学习论文: WinCLIP: Zero-/Few-Shot Anomaly Classification and Segmentation

深度学习论文: WinCLIP: Zero-/Few-Shot Anomaly Classification and Segmentation
WinCLIP: Zero-/Few-Shot Anomaly Classification and Segmentation
PDF: https://arxiv.org/pdf/2303.14814.pdf
PyTorch代码: https://github.com/shanglianlm0525/CvPytorch
PyTorch代码: https://github.com/shanglianlm0525/PyTorch-Networks

1 概述

WinCLIP是一种基于CLIP(Contrastive Language-Image Pretraining)模型的方法,用于零样本和少样本的异常分类和分割任务。该方法结合了文本编码器和图像编码器,利用CLIP模型的文本-图像关联能力来实现准确的异常识别和定位。

WinCLIP的核心思想是通过将不同状态和模板转换为文本嵌入,然后与图像编码器生成的图像嵌入进行关联,学习到异常和正常样本之间的关系。为了实现这一目标,WinCLIP引入了参考关联的概念。它将参考关联应用于基于视觉的异常评分图,通过文本引导评分的小样本AS/AC聚合而来。参考关联有助于捕捉异常样本的特征,并实现准确的分类和分割。

在实验中,WinCLIP在多个数据集上进行了评估,包括MVTec AD、CIFAR-10、MNIST等。实验结果显示,WinCLIP在零样本和少样本的异常分类和分割任务上表现出了优秀的性能。它超过了其他先进方法,并且在不同的异常类型和样本数量下都展现出了鲁棒性和泛化能力。

在这里插入图片描述

2 WinCLIP and WinCLIP+

通过CLIP文本编码器将各种状态和模板合成并转换为两个文本嵌入,作为类原型。类原型与WinCLIP中零样本AC/AS的CLIP图像编码器的多尺度特征相关。WinCLIP+将小窗口/中窗口补丁上的参考关联(patch/WindowAssociation)应用于基于视觉的异常评分图,这些异常评分图是为具有文本引导评分的小样本AS/AC聚合的。
在这里插入图片描述

2-1 Language-driven zero-shot AC

论文提出一个一个名为CLIP-AC的框架,以改善基于初始CLIP的零样本分类,并在零样本设置下改进异常分类。

为了更准确地定义对象的两个抽象状态,引入了一个组合提示集合(Compositional Prompt Ensemble),用于生成预定义的(a)每个标签的状态词列表和(b)文本模板的所有组合,而不是自由编写定义。状态词包括大多数对象共享的常见状态,例如正常的“flawless”和异常的“damaged”。此外,我们可以根据先前对缺陷的了解,选择性地添加特定于任务的状态词,例如PCB上的“bad soldering”。此外,我们还为异常任务精心策划了一个模板列表,例如“a photo of a [c] for visual inspection”。通过这种方式,我们能够更好地定义对象的状态,并提供更准确可靠的异常分类。

  • CPE(Contextual Prompt Engineering)与CLIP Prompt Ensemble是不同的。CLIP Prompt Ensemble不解释对象标签(例如“cat”),只通过试错选择模板来增强对象分类,其中包括一些不适合异常任务的模板,例如“a cartoon [c]”。因此,CPE中的文本与CLIP的联合嵌入空间中的图像更加对齐,适用于异常任务。

  • 采用CPE(Compositional Prompt Ensemble)的双类设计,与标准的单类方法相比,是一种新颖的定义异常的方法。由于异常检测是一个开放性问题,因此它具有不适定性。以往的方法仅通过正常图像来建模正常性,将任何与正常性偏离的情况视为异常。然而,这种解决方案很难区分真正的异常和可接受的正常性偏差,例如"scratch on circuit"与"tiny yet acceptable scratch"之间的区别。但是,语言可以用具体的词语来明确定义状态。通过使用CPE,双类设计能够更准确地定义异常情况,并提供更可靠的异常检测结果。

论文使用的 Contextual Prompt Engineering 如下:
在这里插入图片描述

2-2 WinCLIP for zero-shot AS

使用预训练的CLIP模型,并提出了WinCLIP,它可以有效地提取和聚集与语言一致的多尺度空间特征,用于零样本异常分割。

给定CPE的语言引导异常评分模型,提出了用于零样本异常分割的基于窗口的CLIP(WinCLIP)用于零样本异常分割方法,以预测像素级异常。WinCLIP提取具有良好语言对齐和x局部细节的密集视觉特征,然后在空间上应用 a s c o r e 0 ascore_{0} ascore0来获得异常分割图。具体地,给定分辨率为h×w的图像x和图像编码器f,WinCLIP获得d维特征图 F W ∈ R h × w × d F^{W}∈R^{h×w×d} FWRh×w×d的映射,如下所示:

1.生成一组滑动窗口{wij}ij,其中每个窗口 w i j ∈ 0 , 1 h × w w_{ij}∈{0,1}^{h×w} wij0,1h×w是一个二进制掩码,对于(i, j)周围的k×k核是局部活动的。

2.收集每个输出嵌入 F i j W F^{W}_{ij} FijW,根据应用每个 w i j w_{ij} wij后x的有效面积计算,定义为: F i j W : = f ( x ⊙ w i j ) F^{W}_{ij}: =f(x⊙w_{ij}) FijW:=f(xwij),其中⊙是元素乘积(见下图)。
在这里插入图片描述
Harmonic aggregation of windows:
对于每个局部窗口,零样本异常得分 M 0 , i j W M^{W}_{0,ij} M0,ijW是窗口特征 F i j W F^{W}_{ij} FijW与合成提示集成的文本嵌入之间的相似性。该分数被分布到本地窗口的每个像素。然后,在每个像素,聚合来自所有重叠窗口的多个分数,以通过谐波平均改进分割,对分数进行更多加权,以实现预测。
在这里插入图片描述
Multi-scale aggregation:
内核大小k对应于计算WinCLIP方程中每个位置的周围上下文的数量。它控制着分割中局部细节和全局信息之间的平衡。为了捕捉尺寸从小到大的缺陷,我们聚合了多尺度特征的预测。具体而言,我们使用了以下尺度的特征:

  • ( a ) 小尺度:在ViT的补丁尺度中为2×2,对应于像素中的32×32。
  • ( b ) 中尺度:在ViT中为3×3,对应于像素中的48×48。
  • ( c ) 图像尺度特征:由于自注意力机制而捕获图像上下文的ViT类token。

为了聚合这些多尺度特征,我们采用了谐波平均的方法。这种方法可以平衡不同尺度特征之间的重要性,从而获得更全面的预测结果。

2-3 WinCLIP+ with few-normal-shots

对于一个全面的异常分类和分割,文本引导的零样本方法是不够的,因为某些缺陷只能通过视觉参考而不仅仅是文本来定义。为了更准确地定义和识别异常,我们提出了WinCLIP的扩展:WinCLIP+,通过合并K个正常参考图像 D : = ( x i , − ) i = 1 K D:={(x_{i},−)}^{K}_{i=1} D:=(xi)i=1K。WinCLIP+结合了文本引导和基于视觉的方法的互补预测,以实现更好的异常分类和分割。

在这里插入图片描述
首先引入了一个关键模块,称为参考关联模块,用于合并给定的参考图像。该模块可以简单地存储和检索基于余弦相似性的记忆特征R。通过将查询图像提取的特征F(例如,patch-level2)与这样的模块结合,我们可以进行异常分割的预测M。预测结果M是一个h×w的矩阵,其中每个元素的值在0到1之间。这种预测结果可以提供关于图像中异常区域的概率估计,值越接近1表示越可能是异常区域。
在这里插入图片描述
在小样本的情况下,我们从三个不同的特征构建了单独的reference memories:(a) 小尺度特征FW的WinCLIP特征,(b) 中等尺度特征的WinCLIP特征,以及© 具有全局上下文的倒数第二个特征FP。即 RWs、RWm和RP。然后,对给定查询进行了多尺度预测并进一步平均得到查询的异常分割
在这里插入图片描述

此外,为了进行异常分类,结合 M W M^{W} MW的最大值和WinCLIP零样本分类得分。这两个分数具有互补的信息,特别是(a)一个来自小样本参考的空间特征,以及(b)另一个来自通过语言检索的CLIP知识:
在这里插入图片描述

3 Experiments

Zero-/few-shot anomaly classification
在这里插入图片描述

Zero-/few-shot anomaly segmentation
在这里插入图片描述

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

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

相关文章

java使用swing制作桌面图形应用的实例教程

本篇文章主要讲解,java编程语言通过swing制作桌面图形应用的实例教程,通过一个简单的个人信息提交表单界面,让你了解swing的布局管理、窗口图标设置、编译和运行以及窗口菜单的设置。 日期:2023年8月25日 实际效果 弹出新窗口帮助…

一种分解多种信号模式非线性线性调频的方法研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

Azure应用程序网关

文章目录 什么是应用程序网关实战演练创建虚拟网络创建虚拟机创建应用程序网关测试搭建结果 什么是应用程序网关 Azure应用程序网关是一种托管服务,用于提供安全、可缩放的 Web 应用程序前端点的应用程序传送控制和保护。它可以通过 SSL 终止、cookie 基于会话持久…

uniapp 安卓平台签名证书(.keystore)生成

安装JRE环境 下载jre安装包:https://www.oracle.com/java/technologies/downloads/#java8安装jre安装包时,记录安装目录(例:C:\Program Files\Java\jdk-20)打开命令行(cmd),将JRE安装路径添加到系统环境变量 d: se…

使用vlc在线播放rtsp视频url

1. 2. 3. 工具链接: https://download.csdn.net/download/qq_43560721/88249440

数据分析案例-汽车客户信息数据可视化分析(文末送书)

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

学习开发振弦采集模块的注意事项

学习开发振弦采集模块的注意事项 (三河凡科科技/飞讯教学)振弦采集模块是一种用来实时采集和处理振弦信号的电子设备,在工业、航空、医疗等领域都有广泛应用。学习开发振弦采集模块需要注意以下几点: 一、硬件选择 首先需要选择…

word文档中输入“打钩”的4种方法

我们利用Word来制作一些填写单、待办表、计划表类的文档时,都会输入一些特殊符号,比如方框内“打钩”的勾选符号,那么这个符号应该怎么输入呢? 接下来,我就给你们介绍几种简单实用的方法,其中第三种是小编…

Spark项目Java和Scala混合打包编译

文章目录 项目结构Pom完整文件编译查看 实际开发用有时候引用自己写的一些java工具类,但是整个项目是scala开发的spark程序,在项目打包时需要考虑到java和scala混合在一起编译。 今天看到之前很久之前写的一些打包编译文章,发现很多地方不太对…

【软件测试面试题】网页崩溃的原因是什么?如何排查?

网页崩溃的原因 1. 代码错误 网页中存在错误或不完善的代码可能导致崩溃。例如,语法错误、逻辑错误、变量未定义等。这些错误可能会导致浏览器无法正确解析网页,从而导致崩溃。 2. 资源加载问题 网页中引用的资源(如CSS文件、JavaScript文…

【linux】2 make/Makefile和gitee

文章目录 一、Linux项目自动化构建工具-make/Makefile1.1 背景1.2 实例代码1.3 原理1.4 项目清理 二、linux下第一个小程序-进度条2.1 行缓冲区2.2 进度条 三、git以及gitee总结 ヾ(๑╹◡╹)ノ" 人总要为过去的懒惰而付出代价ヾ(๑╹◡╹)ノ" 一…

【点击新增一个下拉框 与前一个内容一样 但不能选同一个值】

点击新增一个下拉框 与前一个内容一样 但不能选同一个值 主要是看下拉选择el-option的disabled,注意不要混淆 <el-form label-width"120px" :model"form" ref"form" style"color: #fff"><template v-for"(trapolicy, i…

生成地图展示【Python思路】

# 1.导包 import json from pyecharts.charts import Map #导入关于编写地图的包 from pyechart.options import * #全局设置# 2.得到地图对象 map Map()# 3.打开事先准备好的JSON数据文件 f open("D:/Typora 记事本/notebook/Python/Exercise_data/疫情.txt",&…

2023CCF图形学启明星计划夏令营感想记录

这篇就是纯日记了&#xff0c;想记录一下参加这个夏令营的感想&#xff0c;中间的一些过程&#xff0c;毕竟这对我来说算是一段难忘的经历。 一、了解到的渠道 我个人是比较喜欢图形渲染的&#xff0c;之前也学过GAMES的课程&#xff0c;然后偶然的一天&#xff0c;GAMES101里…

TypeScript初体验

1.安装编译TS工具包 npm i -g typescript 2. 查看版本号 tsc -v 3.创建ts文件 说明&#xff1a;创建一个index.ts文件 4.TS编译为JS tsc index.ts 5.执行JS代码 node index.js 6.简化TS的步骤 6.1安装 npm i -g ts-node 6.2执行 ts-node index.ts

redis 7高级篇1 redis的单线程与多线程

一 redis单线程与多线程 1.1 redis单线程&多线程 1.redis的单线程 redis单线程主要是指Redis的网络IO和键值对读写是由一个线程来完成的&#xff0c;Redis在处理客户端的请求时包括获取 (socket 读)、解析、执行、内容返回 (socket 写) 等都由一个顺序串行的主线程处理…

数据分享|R语言PCA主成分、lasso、岭回归降维分析近年来各国土地面积变化影响...

全文链接&#xff1a;http://tecdat.cn/?p31445 机器学习在环境监测领域的应用&#xff0c;着眼于探索全球范围内的环境演化规律&#xff0c;人类与自然生态之间的关系以及环境变化对人类生存的影响&#xff08;点击文末“阅读原文”获取完整代码数据&#xff09;。 课题着眼于…

秒杀系统的业务流程以及优化方案(实现异步秒杀)

先看基本的业务流程 那么我们可以看到整个流程都是一个线程来完成的&#xff0c;这样的话耗时还是很长的&#xff0c;那么可不可以采用多线程去实现呢&#xff1f; 首先我们要思考怎么对业务进行拆分&#xff0c;可以想象一个我们去饭店点餐&#xff0c;会有前台接待&#xff…

Docker构建镜像

Docker根据Dockerfile文件构建镜像 在实际生产中&#xff0c;常常使用Dockerfile构建企业级生产环境镜像,然后再部署在我们的生产环境中&#xff0c;本文将从从零开始介绍Dockerfile如何使用&#xff0c;构建镜像。 Dockerhub官网地址&#xff1a;https://registry.hub.docke…

Pyqt5-开源工具分解功能(配置文件+快捷写入)

开源第五篇,配置文件及参数配置,先来看个图: 上述是自动化电池监测的简图。会根据json文件中的数据从而自动写入数据。 如何自动写入数据 从GIF中可以看到,选中的输入的标签都是QLineEdit,而QLineEdit的写入文本方法是.setText(str),注意这里是写入的文本是text,字符串。…