深度学习论文: 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.mzph.cn/news/49437.shtml

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

相关文章

软件机器人助力交通运输局数据录入,实现高效管理

随着科技的迅速发展,许多传统的行业正在寻求通过科技创新优化工作流程、提升效率。在这样的大背景下,交通运输部门也开始注重引入科技手段改善工作流程。博为小帮软件机器人正逐步改变着交通运输局的工作方式。 软件机器人:交通管理的利器 博…

Spring事务和事务传播机制(2)

前言🍭 ❤️❤️❤️SSM专栏更新中,各位大佬觉得写得不错,支持一下,感谢了!❤️❤️❤️ Spring Spring MVC MyBatis_冷兮雪的博客-CSDN博客 在Spring框架中,事务管理是一种用于维护数据库操作的一致性和…

分布数据并行计算(单机多卡)训练记录

首先,我们先把我们的pytorch版本提升到2.0.1,这样会防止很多不必要的报错(但这样的坏处就是我们没有办法使用nvidia-apex进行加速了,除非等到版本的更新 DistributedSampler 我们使用分布数据采样器来保证我们的每个进程(每一块…

3.redis数据结构之List

List-列表类型:L&R 列表类型:有序、可重复 Arraylist和linkedlist的区别 Arraylist是使用数组来存储数据,特点:查询快、增删慢 Linkedlist是使用双向链表存储数据,特点:增删快、查询慢,但是查询链表两端…

设计模式——接口隔离原则

文章目录 基本介绍应用实例应传统方法的问题和使用接口隔离原则改进 基本介绍 客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口上先看一张图: 类 A 通过接口 Interface1 依赖类 B,类 C 通过接口 Interface1 依赖类 D&…

数据结构,查找算法(二分,分块,哈希)

一、查找算法 1、二分查找:(前提条件: 必须有序的序列) #include <stdio.h> //二分查找 value代表的是被查找的值 int findByHalf(int *p, int n, int value) {int low = 0;//low低int high = n-1;//high高int middle;//用来保存中间位置的下标while(low <= high…

通用vue项目应对定制化时该如何组件化

分析页面-页面组件化 之前写了一个项目&#xff0c;大屏页面是通用页面但是遇到个别用户想要定制化&#xff0c;但是主页如果去做判断显得太过臃肿&#xff0c;后续也无法判断&#xff0c;由于公司不想维护多套代码&#xff0c;于是就考虑抽离成组件&#xff01;直接看代码&…

electron的使用和操作

文章目录 先创建一个基本的electron应用electron生命周期事件单个窗体事件创建窗体时所携带的一些属性 先创建一个基本的electron应用 先安装 npm install --save-dev electron然后在package.json里面创建如下内容 {"name": "my-electron-app","ve…

shell脚本语句(画矩形、三角形、乘法表和小游戏)(#^.^#)

目录 一、语句 一、条件语句 一、以用户为例演示 一、显示当前登录系统的用户信息 二、显示有多少个用户 二、单分支if 一、输入脚本 二、验证结果 三、双分支if 一、输入脚本 二、验证结果 四、多分支if 一、输入脚本 二、验证 二、循环语句 一、shell版本的循环…

vue的图片懒加载

安装&#xff1a; vueuse 插件 npm i vueuse/core 搜索&#xff1a; useIntersectionObserver 方法 import { ref } from vue import { useIntersectionObserver } from vueuse/coreexport default {setup() {const target ref(null)const targetIsVisible ref(false…

c语言关键字_ _align()和_ _packed的使用以及字节对齐原理

c语言中__align()关键字的作用与内存对齐的原理 1、什么是字节对齐 字节对齐(Byte Alignment)是计算机内存中的一种存储优化技术,用于确保数据在内存中的存储位置满足特定的硬件要求,以提高内存访问的效率。在现代计算机体系结构中,许多处理器要求数据以特定的方式对齐,…

k8s集群中service的域名解析、pod的域名解析

前言 在k8s集群中&#xff0c;service和pod都可以通过域名的形式进行相互通信&#xff0c;换句话说&#xff0c;在k8s集群内&#xff0c;通过service和pod的域名&#xff0c;可以直接访问内部应用&#xff0c;不必在通过service ip地址进行通信&#xff0c;一般的&#xff0c;…

空调企业只干空调,卡萨帝却干了业主想不到的事

作者 | 曾响铃 文 | 响铃说 今年入夏以来&#xff0c;随着气温的不断攀升&#xff0c;空调已经成为生活、工作中的“绝对刚需”。由此而来的则是空调产品的销量大增。 但也有不少消费者表示&#xff0c;随着产品功能的越发相似&#xff0c;价格趋同&#xff0c;使空调变得越…

类的加载过程二:Linking

1、验证&#xff08;Verify&#xff09; 目的在于确保Class文件的字节流中包含信息符合当前虚拟机要求&#xff0c;保证被加载类的正确性&#xff0c;不会危害虚拟机自身安全。主要包括四种验证&#xff0c;文件格式验证&#xff0c;元数据验证&#xff0c;字节码验证&#xff…

Postman 如何进行参数化

前言 Postman作为一款接口测试工具&#xff0c;受到了非常多的开发工程师的拥护。 那么做为测试&#xff0c;了解Postman这款工具就成了必要的了。 这篇文章就是为了解决Postman怎么进行参数化的。 全局变量 全局变量是将这个变量设置成整个程序的都可以用&#xff0c;不用去…

装箱和拆箱

1. 概念 装箱 将值类型转换成等价的引用类型 装箱的步骤 拆箱 将一个已装箱的引用类型转换为值类型&#xff0c;拆箱操作需要声明拆箱后转换的类型 拆箱的步骤 1&#xff09;获取已装箱的对象的地址 2&#xff09;将值从堆上的对象中复制到堆栈上的值变量中 2. 总结 装箱和拆箱…

数组指针、函数指针、指针数组、函数 指针数组、指针函数详细总结

1.数组指针概念和应用 首先数组指针应该是一个数组&#xff0c;它的定义如下&#xff1a; 数组指针&#xff0c;指的是数组名的指针&#xff0c;即数组首元素地址的指针。即是指向数组的指针。例&#xff1a;int (*p)[10]; p即为指向数组的指针&#xff0c;又称数组指针。 数…

Microsoft Visual Studio + Qt插件编程出现错误error MSB4184问题

文章目录 报错解决 报错 C:\Users\Administrator\AppData\Local\QtMsBuild\qt_globals.targets(786,7): error MSB4184: 无法计算表达式“[System.IO.File]::ReadAllText(C:\Users\Administrator\AppData\Local\QtMsBuild\qt.natvis.xml)”。 未能找到文件“C:\Users\Administ…

C语言:指针(超深度讲解)

目录 指针&#xff1a; 学习目标&#xff1a; 指针可以理解为&#xff1a; 字符指针&#xff1a; 定义&#xff1a;字符指针 char*。 字符指针的使用&#xff1a; 练习&#xff1a; 指针数组&#xff1a; 概念&#xff1a;指针数组是一个存放指针的数组。 实现模拟二维…

NetApp EF 系列全闪存阵列 EF600 和 EF300 ——经济实惠、性能极高的全闪存存储系统、 适用于各种混合型企业工作负载

NetApp EF 系列全闪存阵列 EF600 和 EF300 ——经济实惠、性能极高的全闪存存储系统、 适用于各种混合型企业工作负载 功能强大且经济实惠的性能 NetApp EF600 全闪存阵列专为需要最高性能的工作负载而设计。NetApp EF300 阵列专为大数据分析和数据库等混合工作负载环境而设计…