当前位置: 首页 > news >正文

微调 AnomalyCLIP——基于对象无关提示学习与全局 - 局部优化的零样本异常检测框架性能验证

概述

零样本异常检测(Zero-Shot Anomaly Detection, ZSAD)是计算机视觉领域的关键任务,尤其适用于标记异常样本稀缺或不可得的实际场景(如新型工业缺陷检测、罕见疾病诊断)。传统视觉语言模型(如CLIP)在ZSAD中表现受限,因其核心设计目标是基于对象语义的分类,而非捕捉异常特征——这种定位偏差导致其在未见过的领域(如从工业检测迁移到医疗影像)泛化能力薄弱,因为不同领域的异常与已知对象标签往往无直接关联。

AnomalyCLIP 通过三项核心创新填补了这一空白:

  • 对象无关的提示学习(摆脱对特定对象类别的依赖);
  • 对角突出注意力图(DPAM)优化局部视觉特征;
  • 全局-局部上下文联合优化。

它在保留CLIP跨模态对齐优势的同时,针对性调整模型行为,使其能适配用于制造业、医疗保健、公共安全等多领域的异常检测任务。

动机和挑战

ZSAD要求在无目标领域样本的前提下检测未知异常,核心挑战包括:

  • 领域差异:异常表现形式跨领域而异(如金属裂纹 vs MRI肿瘤、织物污渍 vs 皮肤病变);
  • 语义偏差:训练用于识别“猫”“汽车”的模型无法天然理解“缺陷”“病变”等抽象异常概念;
  • 细粒度检测:多数异常具有尺寸小、特征微妙的特点(如微电子芯片的微划痕),且与已知对象类别无关联;
  • 数据稀缺性:有监督异常检测依赖像素级掩码或标签,但现实场景中这类标注成本极高(如医疗影像的专家标注)。

AnomalyCLIP通过将学习目标从“对象语义”转向“通用正常/异常模式”,直接应对上述挑战。

为什么仅使用CLIP是不够的?

CLIP在基于类别提示(如“一张狗的照片”)的图像-文本对齐任务中表现卓越,但在ZSAD中存在固有局限:

  • 严重依赖具体类名,无法处理“异常”这类无固定对象关联的概念;
  • 其特征嵌入侧重“对象存在性”,而非“质量完整性”或“异常特征”;
  • 注意力机制倾向于聚焦主要视觉标记(如主体对象),易忽略微小异常区域(如产品边缘的细微划痕)。

什么是AnomalyCLIP?

AnomalyCLIP是专为零样本异常检测设计的框架,通过对CLIP的针对性改造实现跨领域泛化,核心改进包括:

  • 对象无关提示(如“一个损坏的对象”)替代类别特定提示;
  • 通过多层标记调优优化文本嵌入,增强对“正常/异常”抽象语义的理解;
  • 引入对角突出注意力图(DPAM) 改进视觉注意力分布,聚焦细粒度异常;
  • 采用全局-局部上下文优化联合训练,兼顾图像级分类与像素级定位。

最终实现一个泛化能力极强的系统,可从工业检测图像无缝扩展到医学影像扫描,且推理高效(单次前向传播)。

特征描述
对象无关提示学习学习通用的“正常”和“异常”提示,不依赖特定对象类别语义(如无需“螺丝的裂纹”,仅需“损坏的对象”)。
文本空间优化在CLIP文本编码器的前9层插入可学习提示标记,实现深度语义优化,使模型在网络深层理解“正常/异常”概念。
DPAM(对角突出注意力图)替换标准自注意力为更均匀的模式,通过值-值(V-V)注意力突出对角区域特征,增强对微小异常的捕捉。
全局-局部上下文优化结合图像级(全局)和像素级(局部)损失,同时优化异常分类与定位能力。
单次前向传播无需额外解码器或手工设计提示,推理效率高,适用于实时检测场景。

AnomalyCLIP的架构概述

在这里插入图片描述

AnomalyCLIP的架构仅对CLIP进行了微小但战略性的修改,核心模块包括:

对象无关提示模板

  • 摒弃特定对象提示(如“一张带有裂纹的螺丝的照片”),定义两个通用模板:
    • g_n:“一个正常的对象”
    • g_a:“一个损坏的对象”
  • 这些提示与具体对象名称解耦,使其在跨领域(如从电子元件到人体器官)中保持通用性。

重要性:脱离对象类别的束缚后,模型可专注学习“正常”与“异常”的视觉语义共性(如结构完整性、纹理一致性),而非依赖特定对象的外观特征。

文本提示优化

  • 提示标记并非固定文本,而是在CLIP文本编码器的前9层中插入可学习的向量标记,这些标记在训练中动态更新。
  • 实现“深度语义优化”:使模型不仅在表层理解提示,更在网络深层处理中融入“正常/异常”的抽象语义,增强提示的信息丰富度。

在这里插入图片描述
不同文本提示策略的异常定位图比较:对象无关提示的定位精度显著高于类别绑定提示

使用DPAM增强局部视觉空间

CLIP的视觉编码器天然倾向于关注主要对象标记,易忽略局部异常。DPAM通过替换标准自注意力机制,生成更均匀的注意力模式,具体策略如下:

注意力类型描述
Q-Q查询到查询的注意力,促进水平方向特征扩展(适用于大面积异常)。
K-K键到键的注意力,增强垂直方向焦点(适用于长条状异常)。
V-V值到值的注意力,突出对角区域特征(AnomalyCLIP默认设置),专门捕捉微小、孤立的异常(如点蚀、微出血)。
  • V-V注意力帮助模型从主要对象标记中“挣脱”,聚焦小而关键的异常特征(如划痕、早期病变);
  • 通过对角分布的注意力模式,提升对细粒度特征的敏感度。

全局-局部上下文优化

为训练AnomalyCLIP,作者设计双损失策略,同时监督视觉与文本特征在图像级补丁级的对齐。

全局损失(图像级)

  • 目标:将整个图像分类为“正常”或“异常”。
  • 计算方式:基于全局图像嵌入与g_n/g_a提示嵌入的余弦相似度,采用交叉熵损失优化。
  • 作用:确保模型具备整体异常判断能力。

局部损失(像素级)

  • 目标:精确定位异常发生的位置。
  • 计算方式:利用分割掩码,在图像补丁(patch)级别计算特征相似度,结合Focal损失(缓解类别不平衡,因异常像素通常占比低)和Dice损失(优化分割边界精度)。
  • 作用:指导模型学习像素级异常特征,提升定位精度。

组合优势

  • 全局损失保障整体分类准确性
  • 局部损失提升细粒度分割能力
  • 这种“全局-局部联合优化”使模型同时具备“是否异常”的判断能力和“异常在哪里”的定位能力。
组件作用
全局损失(图像级)通过交叉熵损失使全局图像特征与“正常/异常”提示对齐,优化分类。
局部损失(像素级)结合Focal和Dice损失,使补丁级特征与提示对齐,优化分割。

训练和推理

训练细节

  • 数据集:使用辅助异常检测数据集(如工业领域的MVTec AD、医疗领域的ColonDB);
  • 优化对象:仅微调提示标记、DPAM层和对齐损失函数,CLIP的视觉/文本编码器保持冻结(保留其预训练的跨模态泛化能力);
  • 训练目标:最小化全局损失与局部损失的加权和。

推理流程

  • 图像级异常判断:计算全局图像特征与g_n/g_a的余弦相似度,输出异常概率(异常分数);
  • 像素级异常定位
    1. 从视觉编码器中间层提取补丁特征;
    2. 计算每个补丁与g_n/g_a的相似度(s_n/s_a);
    3. 对相似度图取平均并应用高斯平滑,生成最终异常图。
输出描述
异常分数基于图像与“异常”提示的相似度,范围[0,1],值越高表示异常可能性越大。
异常图像素级预测热力图,高亮显示异常区域(值越高表示该位置为异常的概率越大)。

AnomalyCLIP的实验设置

评估数据集

覆盖工业、医疗两大核心领域,包含多种挑战场景(表面纹理、器官病变等):

领域使用的数据集
工业MVTec AD(工业零件缺陷)、VisA(零售商品缺陷)、MPDD(金属表面缺陷)、BTAD(轴承缺陷)、SDD(太阳能板缺陷)、DAGM(合成纹理缺陷)、DTD-Synthetic(材料纹理缺陷)
医疗ISIC(皮肤病变)、CVC-ClinicDB(结肠镜异常)、CVC-ColonDB(结肠息肉)、Kvasir(胃肠道病变)、Endo(内窥镜异常)、TN3K(甲状腺结节)、HeadCT(头部CT异常)、BrainMRI(脑MRI病变)、Br35H(脑 hemorrhage)、COVID-19(肺部CT异常)

评估指标

采用异常检测领域标准指标:

指标描述
AUROC受试者工作特征曲线下面积,衡量模型区分正常/异常的整体能力(值越高越好,上限100%)。
AP平均精度,基于精确率-召回率曲线,评估分类任务的稳健性。
AUPRO区域重叠下的平均精度,专为分割任务设计,衡量异常定位的准确性。

对比模型

与主流零样本异常检测模型对比:CLIP(基础模型)、CLIP-AC(CLIP适配版)、WinCLIP(窗口化CLIP)、CoOp(提示调优方法)、VAND(视觉异常检测专用模型)。

核心结论:AnomalyCLIP在几乎所有数据集和指标上均达到最先进水平(SOTA),尤其在跨领域泛化任务中优势显著。

消融研究

通过控制变量实验验证各模块的必要性:

模块性能分析

模块作用结果
DPAM(T₁)优化局部视觉语义,增强对微小异常的注意力。单独使用时,AUPRO(分割指标)平均提升3.2%,证明其对定位的关键作用。
提示学习(T₂)学习“正常/异常”的通用语义,摆脱对象依赖。跨领域任务中AUROC平均提升4.7%,是泛化能力的核心来源。
文本调优(T₃)多层优化文本嵌入,深化语义理解。同时提升分类(AUROC+2.1%)和分割(AUPRO+1.8%),因语义清晰度提升。

上下文优化对比

损失设置结果
仅全局图像级AUROC达89.3%(良好),但AUPRO仅52.1%(定位弱)。
仅局部AUPRO达61.5%(分割好),但图像级AUROC降至78.6%(分类弱)。
全局-局部综合性能最优:AUROC 92.5%,AUPRO 65.3%,验证联合优化的必要性。

DPAM策略对比

策略观察结果
Q-Q(CLIPqq)图像级AUROC 88.7%(分类好),但AUPRO 53.2%(分割弱)。
K-K(CLIPkk)平衡但平庸:AUROC 87.5%,AUPRO 58.1%。
V-V(默认)最佳整体性能:AUROC 92.5%,AUPRO 65.3%,且在各数据集上表现稳定。

跨领域泛化能力

AnomalyCLIP的核心优势之一是跨领域迁移能力,实验验证如下:

从工业→医疗的迁移

  • 仅在工业数据集(如MVTec AD)上训练的AnomalyCLIP,可直接应用于未见过的医疗领域;
  • 在ISIC(皮肤病变)、COVID-19(肺部CT)、BrainMRI(脑病变)等数据集上,显著优于WinCLIP和VAND(平均AUROC提升5%-8%)。

医学领域内微调

  • 在ColonDB(结肠数据)上微调后,HeadCT和BrainMRI的AUPRO分别提升6.3%和5.7%(因器官官结构相似);
  • 但在视觉差异大的领域(如ColonDB→ISIC皮肤图像),性能提升有限(AUPRO仅提升1.2%),说明领域相似性对泛化有影响。

核心结论

  • 即使仅在工业数据上训练,仍能在跨领域任务中表现出色(证明需目标领域数据);
  • 相似领域(如结肠→胃肠)微调时,性能提升显著;
  • 在视觉差异极大的领域(如工业→皮肤),性能略有下降,但仍优于基线模型。

性能增益:对象无关 vs 对象感知提示

对比对象无关提示(如“损坏的对象”)与对象感知提示(如“损坏的螺丝”)的性能差异:

数据集图像 AUROC 增益像素 AUROC 增益AUPRO 增益
MVTec AD+0.5+0.2+0.2
VisA+0.6+0.3+0.5
MPDD+4.4+3.3+1.8
BTAD+0.9+0.4+1.8

增益原因:对象语义与异常特征并非总是对齐(如“螺丝”的语义不包含“裂纹”的视觉特征),去除类标签后,模型可专注于“视觉不规则性”(如纹理突变、结构断裂),从而提升泛化能力。

在TN3K数据集上的评估

以TN3K(甲状腺结节分割数据集)为例,展示AnomalyCLIP的零样本能力与微调效果。

关于TN3K数据集

TN3K是像素级医学异常检测数据集,专注于甲状腺结节分割,提供详细的像素级分割掩码,支持同时评估“检测”和“定位”性能。与仅提供分类标签的数据集(如COVID-19)不同,其像素级标注使其成为评估分割能力的理想基准。

在这里插入图片描述
图4. TN3K数据集的超声图像样本和分割掩码:左为原始图像,右为异常区域(甲状腺结节)掩码

评估将重点使用像素级指标(AUPRO、像素级AUROC),更贴合分割任务需求。

实验设计

分两阶段评估领域适应与微调效果:

  1. 零样本评估

    • 使用预训练AnomalyCLIP检查点(不微调TN3K);
    • 测试集:TN3K;
    • 预训练来源:MVTec AD(工业)、VisA(工业)。
  2. TN3K微调

    • 用TN3K的分割掩码训练AnomalyCLIP;
    • 在TN3K测试集上评估,对比微调前后性能。

实验环境与配置

仓库设置
git clone https://github.com/zqhang/AnomalyCLIP.git
环境配置

原始仓库依赖项较旧,建议:

  • 基于Python ≥3.10创建conda环境;
  • 安装更新后的依赖:
    pip install ftfy regex tabulate torch torchvision torchaudio pillow numpy scipy scikit-image matplotlib
    

集成TN3K的文件修改

为支持TN3K,需修改仓库中以下文件(可通过官方教程下载修改后版本):

  • train.py:适配TN3K数据加载与训练逻辑;
  • test.py/test.sh:添加TN3K评估入口;
  • metrics.py:确保像素级指标计算适配;
  • generate_dataset_json/tn3k.py:生成TN3K的数据集结构JSON。

运行步骤

  1. 生成数据集JSON

    cd generate_dataset_json
    python tn3k.py  # 脚本会自动解析TN3K目录结构并生成JSON
    

    核心代码(tn3k.py):

    if __name__ == '__main__':runner = ClinicDBSolver(root='/path/to/AnomalyCLIP/Thyroid_Dataset/tn3k')runner.run()  # 生成包含训练/测试划分、掩码路径的JSON
    
  2. 零样本评估

    bash test_before_fine_tuning.sh  # 加载MVTec/VisA预训练权重
    
  3. 微调AnomalyCLIP

    bash train.sh  # 用TN3K数据微调,权重保存至checkpoints/singlescale_tn3k
    
  4. 微调后评估

    bash test_after_fine_tuning.sh  # 加载TN3K微调权重评估
    

实验结果

零样本评估(预训练权重)
  • MVTec AD检查点

    25-07-01 17:06:40.674 - INFO: Logging test...
    25-07-01 17:07:04.293 - INFO:
    | objects   |   pixel_auroc |   pixel_aupro |
    |:----------|--------------:|--------------:|
    | thyroid   |           63.5 |           46.8 |
    | mean      |           63.5 |           46.8 |
    
  • VisA检查点

    25-07-01 17:07:08.398 - INFO: Logging test...
    25-07-01 17:07:32.191 - INFO:
    | objects   |   pixel_auroc |   pixel_aupro |
    |:----------|--------------:|--------------:|
    | thyroid   |           63.4 |           39.8 |
    | mean      |           63.4 |           39.8 |
    
微调后评估(TN3K权重)
25-07-01 17:14:28.583 - INFO: Logging test...
25-07-01 17:14:51.843 - INFO:
| objects   |   pixel_auroc |   pixel_aupro |
|:----------|--------------:|--------------:|
| thyroid   |           83.2 |           54.9 |
| mean      |           83.2 |           54.9 |

结果分析

配置像素 AUROC像素 AUPRO
零样本(MVTec AD)63.546.8
零样本(VisA)63.439.8
在 TN3K 上微调83.254.9
官方论文(AnomalyCLIP)79.247.0
  • 零样本性能:工业预训练模型在甲状腺数据上表现中等(AUROC≈63%),证明跨领域泛化的可能性,但存在领域差距;
  • 微调增益:TN3K微调后AUROC提升20%,AUPRO提升8.1%,说明模型能快速适配特定领域;
  • 优于官方结果:微调后性能超过论文基准(AUROC 83.2% vs 79.2%),可能源于更新的依赖库(如PyTorch后端优化)和更稳定的GPU训练环境。

相关工作

AnomalyCLIP在设计上优于或补充了现有模型:

  • 与CLIP-AD、ZOC、ACR对比
    这些方法需目标领域特定调优(如ZOC的类别锚定),且仅支持图像级分类;AnomalyCLIP无需领域适配,同时提供分类与分割。

  • 与WinCLIP、VAND对比
    WinCLIP通过滑动窗口增强局部特征,但依赖对象语义;VAND使用投影学习弱化了文本语义对齐;AnomalyCLIP仅用两个通用提示,通过DPAM和联合损失实现更优性能。

  • 与DenseCLIP、CoOp对比
    DenseCLIP专注于密集特征对齐,但未针对异常检测优化;CoOp的提示调优局限于类别语义;AnomalyCLIP的对象无关提示和全局-局部优化更适配异常检测场景。

总结

AnomalyCLIP通过对象无关提示学习、DPAM局部视觉优化和全局-局部联合训练,解决了传统视觉语言模型在零样本异常检测中的泛化难题。其核心优势在于:

  1. 摆脱对象类别依赖,学习“正常/异常”的通用视觉语义;
  2. 高效的跨领域迁移能力,从工业到医疗无需目标领域数据;
  3. 同时支持异常分类与定位,适用于实际检测场景。

未来可进一步探索更细粒度的提示设计(如“轻微损坏”“严重损坏”)和跨模态数据增强,以提升极端罕见异常的检测能力。

http://www.lryc.cn/news/623685.html

相关文章:

  • 迅速掌握Git通用指令
  • 7 索引的监控
  • 编程算法实例-整数分解质因数
  • Mac(五)自定义鼠标滚轮方向 LinearMouse
  • 又一家茑屋书店即将歇业,精品书店的未来在哪里?
  • Bee1.17.25更新Bug,完善功能.不支持NOSQL,分库分表Sharding(2.X版有)
  • Spark03-RDD02-常用的Action算子
  • YOLO12 改进、魔改|频域自注意力求解器FSAS,通过频域高效计算自注意力,在降低时间与空间复杂度的同时保留关键特征信息,提升遮挡、小目标检测
  • PostgreSQL——用户管理
  • 【IDEA】设置Debug调试时调试器不进入特定类(Spring框架、Mybatis框架)
  • Day3--滑动窗口与双指针--2461. 长度为 K 子数组中的最大和,1423. 可获得的最大点数,1052. 爱生气的书店老板
  • 【算法】模拟专题
  • JavaScript性能优化实战(三):DOM操作性能优化
  • openEuler等Linux系统中如何复制移动硬盘的数据
  • 【Luogu】每日一题——Day20. P4366 [Code+#4] 最短路 (图论)
  • 计算机网络 Session 劫持 原理和防御措施
  • 【Luogu】每日一题——Day21. P3556 [POI 2013] MOR-Tales of seafaring (图论)
  • 裸机框架:按键模组
  • 深度学习之优化器
  • 概率论基础教程第4章 随机变量(一)
  • 《Cocos游戏开发入门一本通》第四章
  • 李宏毅NLP-11-语音合成
  • 神经网络中的梯度概念
  • 显式编程(Explicit Programming)
  • c++--文件头注释/doxygen
  • 系统学习算法 专题十七 栈
  • C++ 特殊类设计与单例模式解析
  • 编译器生成的合成访问方法(Synthetic Accessor Method)
  • Python训练营打卡Day35-复习日
  • Spring Framework :IoC 容器的原理与实践