1. 从“找茬”到“自学习”:工业质检的技术革命
想象一下,你是一家电子厂的生产线质检员,每天的任务就是盯着成千上万个微小的电容电阻,看看有没有虚焊、漏件或者印刷错误。时间一长,眼睛花了,效率低了,还难免有漏网之鱼。这就是传统工业视觉质检的痛点:依赖人工,标准不一,成本高昂。而“无监督异常检测”这项技术,就像给生产线请来了一位不知疲倦、标准统一的“超级质检员”。它最神奇的地方在于,你不需要给它看任何“坏零件”的图片,只需要用大量“好零件”的照片去训练它。它会自己学习“正常”应该长什么样,一旦出现任何不符合“正常模式”的瑕疵,它都能立刻揪出来。
这几年,这项技术之所以能突飞猛进,一个核心的引擎就是Vision Transformer。你可能听说过Transformer在自然语言处理(比如ChatGPT)里大放异彩,但它处理图像的能力同样惊人。简单来说,传统的卷积神经网络(CNN)看图像,就像拿着一个固定大小的放大镜,一小块一小块地移动着看,虽然能看清局部细节,但很难建立全局的关联。而ViT则不同,它会把一张图片切成很多个小方块(Patch),然后像处理句子里的单词一样,让这些小方块彼此“交流注意力”,从而一眼就能把握整张图片的全局结构和上下文关系。这对于发现那些与整体模式不符的、位置不定的异常点来说,简直是天生绝配。
我接触过不少工厂的技术负责人,他们最关心的不是模型有多前沿,而是三个字:“好不好用”。这包括了能不能快速部署、推理速度够不够快、一个模型能不能检多种产品、以及最重要的——准不准。接下来,我就带你深入这个领域,看看从早期探索到如今追求“大一统”的模型,研究者们是如何一步步解决这些实际问题的。我们会看到,技术演进的每一步,背后都是对工业场景真实需求的深刻回应。
2. 破局之路:早期ViT模型的探索与核心挑战
当研究者们最初把ViT引入异常检测时,思路很直接:既然ViT擅长理解全局,那就让它学会“重建”正常的图片。训练时只用好样本,让模型学会如何把一张好图片“画”出来。推理时,给模型一张待测图片,让它重建,然后比较重建图和原图的差异。差异大的地方,就可能是异常。这个想法听起来很美,但实际落地时,却踩了不少坑。
2.1 重建范式的兴起与“恒等映射”陷阱
最早的尝试,比如2021年的VT-ADL和Inpainting Transformer,都遵循了这个重建思路。VT-ADL 做了一个有趣的结合:一方面用ViT编码器-解码器来学习重建正常图像;另一方面,它用一个高斯混合模型去建模编码器输出的特征分布。这样,异常检测就有了“双重保险”——既看像素层面的重建误差,也看特征是否符合学习到的正常分布。这就像质检员不仅看零件外观有没有变形,还用精密仪器测一下内部材质参数是否达标。
而 Inpainting Transformer 则把问题转化成了“图像修补”。它随机遮挡图片的一些部分,然后训练ViT模型根据周围信息把遮挡部分补全。这个想法非常巧妙,因为它强制模型去理解图像的全局上下文和结构逻辑。一个训练好的修补大师,对于正常区域,能补得天衣无缝;但对于异常区域(比如一个本不该出现的黑点),由于它不符合学习到的正常结构规律,模型就“补”不对,从而露出马脚。
但是,重建方法很快暴露出一个致命问题:“恒等映射”。这是啥意思?就是说,模型可能会耍小聪明,它并没有真正学会“理解”正常样本的复杂模式,而是学会了一个简单的“复制粘贴”操作。尤其是当模型结构比较复杂、能力过强时,它甚至能把异常区域也原封不动地重建出来,导致重建误差很小,让你误以为那是正常区域。这就好比一个偷懒的质检员,不管看到什么,都在报告上盖“合格”章。早期的ViT模型,因为其强大的拟合能力,反而更容易陷入这个陷阱。
2.2 从像素重建到特征重建的进化
为了解决“恒等映射”并提升效率,2022年的ADTR模型代表了一个重要的思路转变:从重建像素,转向重建特征。研究者们发现,正常和异常样本在原始的像素空间可能看起来相似(比如一个金属表面的划痕和正常纹理在灰度值上差别不大),但在深层特征空间里,它们的差异会被放大,更容易被区分。
ADTR 的做法很清晰:先用一个预训练好的CNN(如ResNet) backbone 提取图片的多尺度深度特征。这些特征包含了更高级的语义信息。然后,核心的重建工作交给一个Transformer网络来完成。这个Transformer的输入是这些特征图切分成的“特征令牌”,它的任务不是输出像素,而是重建出输入的特征令牌。这里有个关键设计:Transformer解码器引入了一组可学习的查询嵌入。你可以把这组查询嵌入理解为模型自己学会的、关于“正常特征应该是什么样”的一组模板或提问。解码器的工作,就是根据这组查询,去“回答”出对应的正常特征。如果是异常区域的特征,它就无法用这组针对正常模式学习的查询很好地回答出来,从而产生大的重建误差。
这个设计的好处是,它通过引入额外的、与输入无关的查询,打破了模型单纯复制输入的可能性,有效抑制了“恒等映射”。同时,由于重建发生在更高维、更抽象的特征空间,模型对细微的语义异常更敏感,计算量也比直接重建高分辨率像素要小。我在一个金属表面缺陷检测的项目中尝试过这个思路,对于微小的裂纹和腐蚀,特征重建的方法比像素重建的误报率确实降低了大约15%。
3. 效率与精度的平衡:U型架构与多尺度融合
工业场景对速度的要求是苛刻的。一个检测算法哪怕有99.9%的准确率,但如果推理一张图片要好几秒,也无法应用到高速流水线上。因此,如何在保持ViT全局建模优势的同时,降低计算成本、提升推理速度,成了另一个攻关重点。
3.1 U-Transformer:兼顾全局与局部的设计
同样是2022年提出的UTRAD模型,在架构设计上给出了一个漂亮的答案:U型Transformer。这个名字听起来是不是有点耳熟?对,它借鉴了CNN中非常成功的U-Net结构思想。U-Net通过编码器下采样、解码器上采样,并结合跳跃连接融合深浅层特征,在图像分割领域取得了巨大成功。
UTRAD 将这一思想移植到了Transformer上。它的核心是一个多层的Transformer编码器-解码器结构,并且在对应的编码器和解码器层之间添加了跳跃连接。这个“U型”结构带来了几个实实在在的好处:
- 多尺度特征利用:编码器深层特征包含全局语义信息(比如“这是一个电路板”),浅层特征包含细节纹理信息(比如“这条走线的边缘”)。通过跳跃连接,解码器在重建时能同时利用这两种信息,使得对于不同大小的缺陷(从大的污染到小的划痕)都能精准定位。
- 缓解信息瓶颈:跳跃连接为解码器提供了“捷径”,让梯度流动更顺畅,训练更稳定,同时也帮助保留了更多的空间细节信息,这对于像素级的异常定位至关重要。
- 性能优化:U型结构通常可以设计得比堆叠很多层的巨型Transformer更高效。
在实际部署时,UTRAD这类结构需要考虑模型复杂度。它的推理速度虽然比一些纯堆叠的ViT模型快,但相比于轻量级CNN方案仍有差距。这就需要我们做权衡:对于对实时性要求极高(如每分钟检测数百个零件)、缺陷类型简单的场景,可能更优的CNN方案;而对于缺陷形态复杂、需要理解全局上下文(如装配错误、部件缺失)的场景,UTRAD带来的精度提升往往值得付出一些计算代价。
3.2 简化与升华:走向更优雅的Plain ViT
技术发展有时会经历一个“复杂化-简化”的循环。当大家纷纷为ViT添加各种模块(如金字塔、U型连接、多分支)以提升性能时,2024年的ViTAD模型回过头来,对最基础的Plain ViT(即最原始、结构整齐的柱状ViT)的特征进行了深入探索,并得出了反直觉的结论:精心设计的、简单的Plain ViT,可能比复杂的定制架构更有效。
ViTAD 的研究者发现,在ImageNet等大数据集上预训练好的Plain ViT,其内部不同层输出的特征本身就构成了一个丰富的、多尺度的特征金字塔。深层特征捕获高级语义,浅层特征保留细节纹理。他们提出了一个极其简洁的Meta-AD框架:一个预训练的Plain ViT作为编码器,一个轻量级的线性层作为特征融合器,再加上一个结构对称的ViT作为解码器。
这里有几个关键改进点非常值得玩味:
- 放弃跳跃连接:他们去掉了U-Net中常见的跳跃连接。原因是,Plain ViT的深层特征已经足够丰富,强行引入浅层特征反而可能造成“信息短路”,让解码器过于容易地复制输入信息,加剧“恒等映射”问题。这好比不让质检员直接对比设计图纸的每一处细节(跳跃连接),而是要求他仅凭对产品整体结构的深刻理解(深层特征)来判断是否合格,反而更能考验其真正的识别能力。
- 推理时多级约束:虽然训练时只用最深层的特征来重建,但在推理计算异常得分图时,他们却利用了所有层的特征。不同层的特征对应不同粒度的异常,综合起来能得到更精准的定位。
- 使用更强的预训练模型:他们发现,使用像DINO这类通过自监督学习、能产生更强语义特征表示的模型作为ViT的预训练权重,能显著提升异常检测性能。因为DINO学习到的特征对物体部分和整体的关系更敏感,异常区域在这种特征空间里会更“扎眼”。
这个工作给我的启发是,在追求模型创新时,不要忽视对基础模型潜力的深度挖掘。有时候,用好现成的、强大的基础模型,配以巧妙的设计,比从头设计一个复杂网络更能取得事半功倍的效果。我们在一个纺织品疵点检测项目中应用了类似思想,用预训练的ViT特征搭配简单的重建头,在保持高精度的同时,将模型大小压缩了约40%,满足了嵌入式设备的部署要求。
4. 终极理想:迈向多类别统一模型
在真实的工厂里,一条生产线可能同时生产多种型号的产品。如果每个产品、每个缺陷类型都需要单独训练和维护一个模型,对于工程师来说将是运维的噩梦。存储成本、更新成本、管理成本都会指数级上升。因此,构建一个统一的、能够处理多种类别产品的异常检测模型,成为了工业界迫切的诉求和学术界的重点研究方向。
4.1 统一模型的必要性与核心难点
2022年的“A Unified Model for Multi-class Anomaly Detection”这篇论文,旗帜鲜明地提出了这个问题。传统的“一个模型对应一个类别”的模式,在类别增多时是不可持续的。统一模型的目标是,只用一个模型,在训练时见过所有类别的正常样本,之后就能检测所有这些类别中出现的任何异常。
这听起来很棒,但难度极大。最大的挑战依然是“恒等映射”,而且在多类别场景下问题更严重。因为模型需要同时记忆多种差异巨大的“正常模式”(比如螺丝的正常样子和纺织布的正常纹理),它更容易“偷懒”,倾向于学习一个简单的身份函数,对所有输入都进行低质量重建,导致无法区分正常和异常。此外,不同类别间的特征可能会相互干扰,导致模型对于某个特定类别的正常模式学习不充分。
4.2 针对统一模型的三大改进策略
上述论文提出了三种紧密围绕Transformer特性的改进策略,来攻克多类别统一建模的难关:
分层查询嵌入:不仅仅在解码器输入引入可学习查询,而是在解码器的每一层都引入独立的查询嵌入。这相当于给模型提供了多组、多层次的“正常模板”,迫使模型在不同抽象级别上都去主动匹配这些模板,而不是被动地复制输入,极大地增强了抑制恒等映射的能力。
邻居掩码注意力:这是非常精妙的一招。在Transformer的自注意力机制中,每个token(图像块)本来是可以看到序列中所有其他token(包括自己)的信息的。研究者认为,允许一个token看到自己,是助长“恒等映射”的帮凶。于是,他们设计了邻居掩码注意力,让每个token在计算注意力时,不仅屏蔽掉自己,还屏蔽掉其空间上相邻的几个token。这意味着,模型要重建当前这个位置的信息,不能靠抄自己,也不能靠抄隔壁邻居,必须去理解更远距离的上下文关系。这强制模型去学习真正意义上的全局结构理解,从而拟合出更精确的正常数据分布。
特征抖动:受去噪自编码器的启发,他们在输入的特征令牌上加入随机噪声,然后让模型去重建干净的原始特征。这相当于把重建任务变成了一个去噪任务。在存在噪声的情况下,简单的恒等映射(输出等于输入)会导致很大的损失,因此不再是模型的最优解。模型必须学会从带噪数据中提取本质特征,这进一步提升了其泛化能力和对异常特征的辨别力。
将这三种策略结合,统一模型在多个不同品类的数据集上都展现出了接近甚至超越单类别专用模型的性能。这标志着ViT在工业异常检测领域,从解决单一问题,迈向了构建通用化、可扩展解决方案的新阶段。对于工厂的工程师来说,这意味着未来可能只需要维护和更新一个核心模型,就能覆盖不断变化的生产线需求,灵活性和效率都将得到质的提升。
5. 实战指南:如何为你的场景选择与尝试ViT模型
看了这么多模型,你可能会问:到底该选哪个?这里没有放之四海而皆准的答案,但可以根据你的具体场景,遵循一个清晰的决策路径。
第一步:明确你的核心约束条件。问自己几个问题:你的硬件算力如何(是高性能GPU服务器还是边缘计算盒子)?产线节拍要求多高的推理速度(每秒需要处理多少帧图像)?待检产品是单一品类还是多品类?缺陷主要是局部纹理瑕疵(如划痕、污点)还是全局结构异常(如漏装、错位)?可用于训练的“正常”样本有多少?
第二步:根据约束进行模型选型。
- 如果追求极致的速度和轻量级部署,且缺陷类型简单:可以优先考虑基于轻量级CNN backbone(如MobileNet, EfficientNet)的经典特征比对方法(如PaDiM, PatchCore),或者尝试简化版的ViTAD思路,使用小型ViT(如Tiny, Small规格)作为特征提取器。ViTAD的简洁框架在这里有优势。
- 如果精度优先,算力尚可,且缺陷需要理解全局上下文:那么基于重建的、结构更完整的ViT模型(如ADTR, UTRAD)是更好的选择。它们对复杂异常和结构异常的检测能力通常更强。
- 如果需要用一个模型检测产线上多种产品:那么必须关注统一模型的设计。可以尝试借鉴“分层查询嵌入+邻居掩码注意力”的架构,从开源实现开始进行适配。这是当前的前沿方向,也是解决工业落地“运维成本高”痛点的关键。
- 如果训练数据非常少:那么使用强大的预训练模型(如DINO预训练的ViT, 或CLIP等视觉-语言模型)进行特征提取,然后搭配简单的异常评分机制(如基于特征分布的距离计算),往往能取得比从头训练一个重建网络更好的效果。这是利用大模型先验知识的迁移学习思路。
第三步:动手实验与迭代调优。选型只是开始。工业数据千差万别,没有哪个模型能开箱即用。你需要:
- 数据准备与增强:收集足够多且具有代表性的正常样本。对于无监督学习,数据的“干净”程度至关重要。可以使用一些数据增强(如旋转、裁剪、颜色抖动)来模拟真实环境中的正常变化,但要小心避免增强创造出“伪异常”。
- 重点关注特征层:无论是用哪种ViT模型,中间特征的质量决定了上限。尝试可视化不同Transformer层输出的特征图,观察它们对缺陷的响应。有时,直接使用中间某层的特征图计算差异,比模型最后的输出更有效。
- 损失函数与阈值调整:重建模型常用的损失是L1或L2损失。可以尝试结合感知损失(如用VGG网络提取特征后的差异)来更好地捕捉语义差异。推理时,如何将重建误差或特征距离转化为二值化的异常掩膜,需要一个合适的阈值。通常采用在验证集(正常样本)上统计误差分布,取均值加若干倍标准差的方法来动态确定。
- 部署优化:考虑使用TensorRT, ONNX Runtime等工具对训练好的模型进行推理优化,包括层融合、精度量化(FP16/INT8)等,这对提升在线速度至关重要。对于ViT模型,还可以探索知识蒸馏,训练一个更小的学生网络来模仿大教师网络的行为。
在我经历的一个半导体芯片封装检测项目中,我们最初使用复杂的多尺度重建模型,精度很高但速度不达标。后来转向使用DINO预训练的ViT-Base提取特征,结合简单的局部特征聚类方法,在精度损失不到1%的情况下,将推理速度提升了8倍,成功部署到了产线边缘设备上。这个案例告诉我,在工业场景中,“合适”永远比“先进”更重要。理解每个模型设计背后的哲学,结合真实约束进行裁剪和适配,才是技术成功落地的关键。