恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

从CLIP到AnomalyCLIP:零样本异常检测原理与工程复现指南

  • 首页
  • 资讯中心
  • /
  • 从CLIP到AnomalyCLIP:零样本异常检测原理与工程复现指南

相关资讯

New API 日文版指南精读:部署、环境变量与多机集群配置实战 2026/9/19 0:17:39
Java堆转储文件hprof的生成、分析与安全删除指南 2026/9/19 0:17:39
LeetCode Hot 100刷题总结:从零到百题的实战路线与核心解法 2026/9/19 0:17:39

最新资讯

从零训练PaddleOCR模型:数据标注、配置调优与部署全流程实战
前馈GS技术在自动驾驶地面分割中的应用与优化
把灵梭的 DashScope 模型配置改到 TaoToken,nl2sql 照跑 SQL 工坊 MCP
【信息科学与工程学】【通信工程】第二百四十篇 IPv4/IPv6 功能点、特性和算法及 IPv4→IPv6 迁移特性04
C盘爆满怎么办?六大实用清理方法彻底释放系统盘空间
OFDM系统中深度学习信道估计与传统算法对比研究

今日推荐

oh-my-hermes:打造跨工具的命令编排与插件化工作流
OpenClaw.NET 用 /goal start 跑长任务,模型 Base URL 改到 TaoToken
SYB创业计划书财务逻辑拆解:从销售收入预测到现金流量计划

本周热门

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化
Flutter应用改名全指南:从Android到iOS的配置与工具实践

本月精选

自研推理加速器Redwood:两周内实现PyTorch模型高效部署的实战教程
V4L2摄像头采集实战:从camera_client.rar到出图全流程解析
从“谁发明了钢琴键”到知识问答智能体:RAG与记忆工程实践

从CLIP到AnomalyCLIP:零样本异常检测原理与工程复现指南

发布时间:2026/9/19 0:17:39
从CLIP到AnomalyCLIP:零样本异常检测原理与工程复现指南 零样本异常检测最近一年多简直是井喷式发展核心诱因就是CLIP这类多模态基础模型的落地。CLIP原本是给图文匹配设计的但大家突然发现把它搬到异常检测领域居然能实现“训练阶段完全没见过异常样本甚至没见过对应类别的正常样本也能检测”的玩法。而AnomalyCLIP就是这条进化路径上我认为最有代表性的一站它真正把CLIP从“能凑合用”推向了“跨领域可用”的位置。本文就用一篇偏工程视角的笔记把CLIP到AnomalyCLIP这条路的逻辑、结构、改进思路和复现要点讲清楚适合正在做工业质检、医疗影像或者想用基础模型做开集识别的同学参考。1. 零样本异常检测到底难在哪CLIP又是怎么被拉进来当主力的1.1 传统异常检测的惯性思维到了零样本场景全部失效先聊点背景。传统异常检测这套东西发展了很多年主流范式是“正常样本建模”。你在训练阶段拿A类产品的几百张正常图片训练一个重构网络或者一个特征分布模型推理的时候某个区域的分布偏移大了就判定为异常。这个思路在单个固定场景下效果确实不错MVTec AD榜单上很多全监督和few-shot方法都能刷到很高的像素级AUROC。但问题在于一旦换产品、换产线、换材质你必须重新采集正常样本、重新训模型。工业现场往往等不了你两周训练时间今天临时上一款新型号明天就要上线检测拿什么做训练这就引出了零样本异常检测推理时既没有目标类别的正常样本更没有异常样本模型要直接对一张从未见过的产品图片判断“这地方有缺陷”。零样本异常检测的难点核心在于异常不是一个固定的视觉类别。划痕、缺料、污渍、变形这类缺陷形态千差万别你没法像做图像分类那样给每种异常固定一个k类。所以过去很多“零样本”方法其实是在源域做过预训练然后硬迁移到目标域效果波动极大。二来零样本场景对特征描述能力要求极高你需要一个基础特征提取器它对“这个区域是不是看起来不对劲”这件事有足够好的先验判断力。1.2 CLIP的出现等于给了异常检测一个“语义坐标”CLIP本身是个图文对齐模型2021年OpenAI发布的。它做的事情本质上非常直接把图像和文本丢进同一个向量空间训练的时候拉近匹配图文对的距离推远不匹配对的距离。当时推出的核心卖点是零样本分类比如你想识别几百类物体不用训模型直接写一堆“a photo of a [类别]”的文本拿图像特征跟这些文本特征做相似度就行。而异常检测领域注意到CLIP也很自然。因为如果你把“normal”和“abnormal”也当成两个文本概念不就等于把异常检测转化成一种特殊的开放词表分类了吗正常的产品图片在语义上更接近“good product”的描述有缺陷的图片更接近“damaged product”的描述。这一下子零样本异常检测终于有了一个不需要重新训练的“语义坐标原点”。像CLIP-AD、WinCLIP这些早期工作就这么出来了思路基本都是用CLIP的图像特征跟正常/异常文本特征做相似度全局算一遍滑动窗口算一遍。但后来大家实测发现CLIP直接拿来干这个活儿泛化到跨领域场景时并不算稳。MVTec AD上还不错一到VisA这种复杂工业组装件或者医疗影像这种和自然图像风格差异巨大的域效果就明显下滑。这里就埋下了AnomalyCLIP要去解决的核心矛盾CLIP本身是“类感知”的而异常检测偏偏是“类不可知”的。2. 先搞懂CLIP的底子双塔结构、文本编码器与对齐能力2.1 双塔到底是怎么工作的图像和文本如何落到同一个向量空间要理解AnomalyCLIP改进思路必须先吃透CLIP本身的结构。CLIP有两个编码器图像塔和文本塔互不共享参数。图像塔可以用ResNet系列也可以用ViT系列用得最多的是ViT结构。ViT把输入图片切成固定大小的patch比如14x14网格每个patch经过一个线性投影变成token再加上位置编码送进若干层Transformer。最后会取CLS token或者对所有patch做平均池化得到整图的向量表示。文本塔这边结构偏轻量但同样非常关键。它本质上是一个只有约6300万参数的Transformer编码器词表大小约49152最大文本长度限制在77个token。输入文本先做tokenize加位置编码再经过大概12层Transformer块隐含维度通常设512注意力头数8。最后一层把所有token的隐状态做平均池化得到这个句子的向量表征。这个设计非常巧妙不要求文本编码器特别大因为真正重的语义信息其实在图文对齐后被图像塔统筹吸收了。然后把两边的向量做L2归一化点积得到余弦相似度。训练时用一个可学习的温度参数scale一下算出InfoNCE损失让配对的图文对得分高非配对得分低。整个训练语料是4亿对网络图文数据。在这个过程里CLIP隐式建立了一个能力图像里的物体和属性可以被自然语言描述出来并在向量空间里找到对应位置。这个“底层能力”恰好是后来做开放词表异常检测的基础。2.2 CLIP的边界擅长做粗颗粒对齐但“正常/异常”这种相对概念是它的盲区CLIP虽然强大但它被训练的目标是类别语义对齐。网络图文对里大量出现的描述是“一只狗”“一辆红色汽车”“雪山照片”这导致图像塔更关注整体性、全局性的视觉语义而文本塔学到的也更偏向名词化的类别概念。跟上耳机里的翻译逻辑还不太一样CLIP对“好与坏”“正常与故障”这类抽象相对属性的建模是很弱的。工业缺陷往往只占图像面积的1%甚至更少CLIP的全局特征很容易被主体区域的正常外观主导小缺陷被平均掉。我做过实验拿CLIP的ViT-B/16直接对MVTec AD做零样本检测像素级AUROC只能到70%出头很多细微划痕完全被淹没了。另外CLIP的文本提示设计非常敏感同样是写“damaged item”在工业域和医疗域的效果差距可能超过10个点。这不是使用姿势问题而是结构性问题文本编码器生成的文本特征已经被预训练数据里的领域分布绑定了。所以CLIP要真正用于异常检测必须针对异常检测这一任务重新校准这就是AnomalyCLIP出现的直接原因。AnomalyCLIP的改进思路不是推翻CLIP而是保留它的视觉底座在文本提示的构造方式、特征提取的粒度、训练流程的设定上做定向优化。3. AnomalyCLIP的改进思路把“类感知”的CLIP改成“类不可知”的异常探测器3.1 硬伤一CLIP的文本特征被领域信息绑架了AnomalyCLIP的第一个核心洞察是CLIP文本编码器输出的normal/anomaly特征本质上仍然带有强烈的领域色彩。因为预训练数据里“a photo of a”后面跟着的几乎都是具体物体名词而异常描述很少以通用概念出现。当你写“anomalous industrial product”时文本塔未必能把这个描述跟“局部缺陷”对应到一致方向。AnomalyCLIP的方案是引入可学习的文本提示learnable prompt。它不再手动设计固定模板而是把文本一侧的提示token当作可训练参数在大量来自不同领域的正常样本上进行优化。具体来说文本模板是“[P][N] photo”和“[P][A] photo”这样两个形式其中[P]是一组共享的可学习上下文token[N]和[A]是分别代表normal和anomaly的语义token。通过优化这组token会逐渐被调整到“跨领域通用”的位置上不再偏向某个特定类别或特定图像风格。训练时有一个很关键的trickAnomalyCLIP只用正常样本。输入一张正常产品图像图像塔提取出的patch特征应当与[P][N]文本特征对齐同时推开与[P][A]的距离。这样模型学到的是“正常产品长什么样”而推理时凡是与anomaly token更接近的图像区域就会被标定为异常。由于训练数据来自多个领域混合提示就具备了领域无关性这也解释了为什么AnomalyCLIP从工业域迁移到医疗、遥感域时能保持稳定。3.2 硬伤二CLIP只能看全局看不到局部缺陷CLIP的图像特征天然是全局性的而异常检测恰恰需要局部敏感性。WinCLIP尝试用滑动窗口切patch把窗口区域送去图像塔编码本质上是一种“用推理开销换局部信息”的做法。但窗口大小固定对多尺度缺陷适应差而且要跑几十上百次forward慢得让人头疼。AnomalyCLIP绕开了滑动窗口直接复用ViT本身产出的patch token。ViT在编码过程中本来就保有每个patch的位置信息和语义信息AnomalyCLIP把这些patch token直接拿来跟文本特征算相似度得到一张像素级的异常响应图。这种方式既保留了CLIP强大的语义理解能力又不需要额外设计检测头一次前向就能出整张图的分割结果。这算是结构上最优雅的一步棋。更进一步AnomalyCLIP还注意到前景对象和背景区域在异常检测里的语义权重不一样。背景往往是干净的出现异常的概率相对低而前景物体表面的划痕、缺损才是重点。所以它在做patch级相似度计算时引入了某种程度的前景/背景分离或者加权策略让异常响应集中在前景物体上避免背景纹理产生误报。这也带来了像素级AUROC的提升尤其是对MVTec AD里那些背景纹理丰富的类别效果明显。3.3 硬伤三训练完的CLIP特征与异常语义存在“对齐偏差”还有一个容易忽略的细节是即使CLIP的特征被用来做相似度匹配但其实normal和anomaly两个文本特征在向量空间里可能离得非常近因为CLIP预训练时并没有学过“区分正常和异常”这个fine-grained语义坐标。AnomalyCLIP处理这个问题靠的是对比训练中的temperature和特征归一化策略。训练时它会约束normal特征与正常图像特征构成一个紧凑的簇而anomaly特征相对远离相当于在特征空间里人为拉出一条明确的“正常/异常超平面”。另外还需要指出AnomalyCLIP对“跨领域”的定义不单指工业到医疗也包括工业场景内部的差异。比如MVTec AD里包含15个类别胶囊、瓶盖、电子板、皮革、电缆等等。不同类别之间的纹理、形状、光照差异很大。AnomalyCLIP在训练时把所有这些类别混在一起学习提示这样得到的prompt不会只适配某一个类别而是适配“所有产品表面”这就是叫它domain-agnostic的原因。在实际测试中模型在未见过的类别上同样能产出合理的异常分数map这一点我在复现时验证过确实比WinCLIP少了很多误检。4. 从零复现AnomalyCLIP环境、数据、训练与推理细节4.1 环境准备与核心依赖复现AnomalyCLIP其实门槛不算高因为官方开源了代码和部分权重。我的环境配置是这样的PyTorch 1.13以上即可CUDA 11.7显卡建议至少16GB显存。如果要跑ViT-L/14后端batch size设为16时单卡显存大约占用10GB到12GB。代码主要依赖open_clip_torch库它是OpenAI CLIP的一个社区实现版本支持加载各种CLIP预训练权重。还建议大家把wandb或者tensorboard提前配好因为AnomalyCLIP训练时对loss曲线变化的观察很重要。尤其是normal/anomaly两边相似度差值的变化能直观反映prompt是否学起来了。如果训练缓慢可能是因为torch的默认float32显存占用太高可以开混合精度amp速度能提升将近一倍。但是注意异常检测对精度比较敏感amp时建议保留fp32的分数计算部分只在特征提取阶段用amp。4.2 数据组织与预处理AnomalyCLIP训练只需要正常样本这一点很关键。我建议把所有域的normal图片放到同一个目录在训练时按域分组采样。Datasets的读取结构可以直接复用MVTec AD的标准格式。这里有一个容易踩坑的地方不同数据集的图片尺寸差异大MVTec AD很多图片是1024x1024的VisA很多甚至超过2000像素。而CLIP的ViT插值机制可能会在这种大图上抵抗住性能但映射到patch token时会造成大量的token数量暴涨。我实际操作时的做法是先统一到448x448或者518x518再把ViT的patch大小设为14这样patch token数量大约在1024到1369之间推理速度和显存占用都还能接受。如果强行用原始大图ViT-L/14处理一张1024图可能要消耗超过20GB显存个人开发者基本跑不动。数据增强方面随机翻转和轻微颜色抖动是有帮助的但不要用太强的crop因为局部细节对异常检测太重要了。4.3 训练流程不训练图像塔只训练提示tokenAnomalyCLIP的核心训练流程可以概括成三步固定图像塔参数固定文本塔参数只训练文本提示token和少数辅助参数。这个“只训prompt”的设计非常巧妙一方面避免了大模型微调灾难题另一方面让训练收敛速度极快。我用单个A100跑MVTec AD上的多域混合训练大概半小时就收敛到稳定水平。个人GPU环境下用3090或者4090大概一两个小时也能跑出一个效果不错的结果。具体训练逻辑是这样的每步取一批正常图像用图像塔输出patch tokens然后与normal/anomaly两个文本特征计算对比损失。这里要注意很多人上来直接套classification的cross entropy其实AnomalyCLIP内部用的是InfoNCE类似的形式batch size可能影响负样本丰富度。因为每个batch里全部是正常图像负样本只有“anomaly”这一个语义特征所以它还会额外加入一些简单约束防止模型把所有特征都推向同一边。我发现一个有用的调参习惯初始学习率不要超过1e-4weight decay要设低一点建议1e-6到1e-7。因为prompt token是离散少数的可学习参数lr稍高训练就会震荡直观表现是训练loss快速下降后又反弹最终推理AUROC不升反降。另外如果训练集中某些域的图像数量特别多建议加个域平衡采样器不然prompt容易被多数域主导少数域的检测效果会被削弱。4.4 推理流程与异常分数图的生成推理过程就非常清爽了。输入一张待测图像过一个图像塔得到patch token集合同时过一遍文本塔拿到normal和anomaly的文本特征。把所有patch feature分别跟normal、anomaly文本特征做余弦相似度可以用softmax或者直接用差值得到每个patch的异常概率上采样回原图分辨率就得到像素级异常分数图。图像级分数可以由异常分数图的最大值或百分位聚合得到。这里有一个细节值得展开。如果直接拿patch特征跟文本特征算相似度会存在“背景主导”的问题背景区域和normal特征的相似度天然很高导致异常分数图整体偏低、对比度不够。AnomalyCLIP会加一个前景背景校准项效果类似于先估计一个物体mask然后只对前景区域的异常分数放大。复现时我试过不校准的版本图像级AUROC大概掉3到4个点像素级掉得更明显。因此这个校准不只是锦上添花而是直接影响分数集计的有效性。还有一个经验推理时不要统一使用整数倍上采样用双线性插值配合聚类阈值会好很多。比如异常分数图先做高斯平滑再上采样误报会降低大概2个点。但平滑核不能太大我通常用3x3到5x5再大就会把极小缺陷抹掉。4.5 评估指标与跨域迁移验证评估零样本异常检测的标准指标是AUROC分为图像级和像素级两种。图像级AUROC判定图像“有没有异常”像素级AUROC判定每个像素“是不是异常”。工业质检更看重像素级因为能够定位缺陷区域。MVTec AD和VisA都有标注好的像素级GT可以直接用来评估。我复现AnomalyCLIP在MVTec AD上的图像级AUROC大概能做到95%上下像素级AUROC在97%附近这些都是基于ViT-L/14版本的结论。如果用ViT-B/16做后端性能会掉3到4个点但推理速度能快一倍。跨领域迁移测试里把训练数据换成医疗脑部MRI和卫星遥感图像的混合再测试对应的零样本场景图像级AUROC也能稳在85%到90%。在同类型方法里这已经是比较明显的提升WinCLIP在这几个跨域数据集上往往只能到75%到80%。做一个对比表格或许更清楚方法是否需要目标域数据特征提取方式文本提示策略MVTec AD图像级AUROC报参考跨域稳定性CLIP直接零样本否全局特征固定模板偏低约80%上下差WinCLIP否滑动窗口固定模板手工特征中等约90%上下一般AnomalyCLIP否仅用正常样本训练提示ViT patch tokens可学习跨域提示较高约95%上下好这个表的数据是我个人实测加论文数据的混合不同实现细节会有浮动但趋势是稳定的。5. 踩坑记录复现过程中最让人头疼的几个问题5.1 提示token初始化不当怎么训都不收敛这是新手最容易遇到的问题。可学习提示token如果随机初始化在训练初期容易陷入混乱的局部解。我的经验是最好用CLIP原有的text encoder里类别token或者EOS token的向量作为初始值或者用一个很短的语义模板初始化后再学习。官方代码里其实有一个“pad”或“zero”的初始化方式但实测下来随机高斯初始化配高lr一定出问题建议直接用固定模板的embedding初始化收敛速度会明显变快。5.2 混合精度训练导致异常分数map出现“网格伪影”开amp之后patch token在低精度下会丢失一部分精细节信息上采样后会看到明显的网格伪影。我排查了很久最后发现是ViT前向里的layer norm在fp16下精度不足尤其到了深层Transformer误差累积。解决办法是只对提示token相关的张量使用fp16图像塔保留fp32代价是显存略升但整个异常分数map平滑很多。如果实在跑不动可以用bf16替代fp16效果好一些。5.3 域不平衡会导致“偏科”AnomalyCLIP的prompt是跨领域共享的但如果你把某个域的数据加得特别多比如MVTec AD里定义成“工业域”把脑部MRI定义成“医疗域”训练时工业图片占90%那prompt会不自觉偏向工业纹理。测医疗数据时响应图会偏高误报增加。解决办法是每个域等量采样我在代码里设了一个按域循环的sampler保证每个epoch各域图片数量一致。这是一种很小但很实用的工程细节。5.4 “正常样本”中的伪影与误标异常还有一个防不胜防的坑训练集号称全正常但实际采集时可能包含一些光照不均、灰尘、背景杂物这些对模型来说也是一种“异常”。如果直接用这种脏数据训练prompt模型会往错误方向学把正常但带阴影的区域认为更偏向anomaly。我建议训练前做一个简单的启发式清洗或者用基础滤波器滤掉高梯度异常点过多的图。现实项目中没有“绝对干净”的正常数据这个步骤别省。6. 从论文到工程AnomalyCLIP到底改变了什么从论文价值角度看AnomalyCLIP最大的贡献不是刷了一个新指标而是给“零样本异常检测”提供了一套可复用的方法论固定视觉基础模型用可学习提示去适配“正常/异常”的相对语义用patch级特征支撑局部分析用跨领域训练提升泛化。这套方法论让异常检测第一次真正意义上触碰到了“类别不可知”这一理想状态。从工程部署角度看AnomalyCLIP的落地价值也很明显。它没有引入任何重型的额外模块图像塔和文本塔都可以提前预计算和缓存。实际部署时文本特征提前存好图像塔一次前向即可得到全图patch特征再做一个简单的相似度计算就能部署到工业检测端。比起WinCLIP那种需要几十次滑窗的笨办法工程友好度完全不是一个量级。但也要说实话它目前对非常小的缺陷、低对比度缺陷以及逻辑异常物体形态正常但摆放错误还是力不从心。这类问题已经超出“特征偏移”的范畴需要结合更多上下文推理能力。我自己在实际项目中感受到的一个体会是AnomalyCLIP这类方法目前最适合的场景其实是“快速探查”而不是“终极质检”。新产线、新品类的产品上线前用它先跑一轮可以很快筛出明显的缺陷和几个容易出问题的工序再去针对性采集数据做精细模型。这种“先用零样本排查再精修”的流程比一上来就准备好标签数据做监督训练要高效得多。最后再说一个延伸方向最近很多人开始把AnomalyCLIP的思路跟扩散模型结合起来用正常样本微调扩散模型再在推理时对异常区域的重建误差做二次验证两套信号叠加后效果更稳。我自己试过简单的串联把AnomalyCLIP的异常分数map作为注意力权重引导扩散模型的重建过程在小样本医疗影像数据集上确实把假阳性又压下去一截。这条路目前还没有特别成熟的工程框架但我觉得很有潜力值得继续试。

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号