Dinomaly2 可以看成 Dinomaly 的系统升级版。Dinomaly 解决的是 multi-class unsupervised anomaly detection, MUAD:一个模型处理多个类别,只用正常样本训练。Dinomaly2 往前推了一步:它希望同一套框架覆盖更多真实部署场景。
Dinomaly:
multi-class 2D UAD
Dinomaly2:
single-class / multi-class / inference-unified multi-class
+ 2D / multi-view / RGB-3D / RGB-IR
+ few-shot
+ industrial / medical / microscopic / outdoor / drone scenarios
论文的主张仍然是 less is more。不是为每个任务做一个新架构,而是在一个特征重建框架里,把几个简单但关键的约束组合起来。

论文信息
| 字段 | 内容 |
|---|---|
| 标题 | One Dinomaly2 Detect Them All: A Unified Framework for Full-Spectrum Unsupervised Anomaly Detection |
| 方法 | Dinomaly2 |
| 任务 | Full-spectrum Unsupervised Anomaly Detection |
| 范式 | Frozen foundation ViT feature reconstruction |
| 默认骨干 | DINOv2-Register ViT |
| 主要升级 | Context-Aware Recentering、full-spectrum extension、inference-unified MUAD |
一句话总结:Dinomaly2 保留 Dinomaly 的 frozen ViT + bottleneck + decoder 特征重建范式,新增 Context-Aware Recentering 来缓解多类别上下文混淆,并证明这套简单框架可以自然扩展到多视角、多模态和 few-shot 异常检测。
Dinomaly2 相比 Dinomaly 升级了什么
如果把 Dinomaly 的核心写成:
Foundation ViT
+ Noisy Bottleneck
+ Unfocused Linear Attention
+ Loose Reconstruction
那么 Dinomaly2 是:
Foundation ViT
+ Noisy Bottleneck
+ Unfocused Linear Attention
+ Loose Reconstruction / Loose Loss
+ Context-Aware Recentering
+ 多视角、多模态、few-shot、inference-unified 扩展
最核心的新方法模块是 Context-Aware Recentering, CR。其他很多升级更像是把 Dinomaly 的设计原则推广到不同数据形态上:多视角就拼接多视角 anomaly map,RGB-3D 就把 RGB 和 depth 特征做平均,RGB-IR 就把不同模态当不同 view,few-shot 就用标准数据增强而不是新设计一套 few-shot pipeline。
所以这篇论文的重点不是“发明了很多复杂模块”,而是证明:
如果特征足够强,
重建约束设计得足够克制,
上下文混淆被处理掉,
一个重建框架可以覆盖很多异常检测设定。
原问题:统一模型里的上下文混淆
MUAD 的麻烦不只是类别多,还在于异常的含义依赖上下文。
论文举的直觉例子是:
车出现在公路上:正常
车出现在人行道上:异常
行人出现在人行道上:正常
行人出现在公路上:异常
同一个局部视觉模式,在不同类别或场景里含义不同。统一模型如果只是学习所有类别的正常 patch 分布,很容易把“某类正常物体”错误迁移到“另一类异常区域”上。
Dinomaly 里已经有控制复制能力的模块,但 Dinomaly2 进一步指出:对于 multi-class UAD,仅仅控制 decoder 不够,还要告诉模型“这个 patch 应该放在哪个上下文坐标系里看”。
Context-Aware Recentering
Context-Aware Recentering 的做法非常简单:用 ViT 的 class token 当作当前图像的上下文锚点,把 patch feature 平移到相对坐标系里。

公式可以压成这一句:
recentered_patch = patch_feature - class_token
原始 patch feature 表示“这个局部长什么样”;减掉 class token 之后,它更像是在表示:
这个局部相对于当前图像/类别上下文意味着什么
这一步不需要额外参数,也不需要类别标签。class token 来自 foundation ViT,本身已经编码了全局语义和场景上下文。Dinomaly2 用它作为坐标原点,把不同类别的 patch token 放进不同的参考系。
这就是 Dinomaly2 里最关键的变化:它不是让 decoder 盲目重建所有 patch feature,而是重建 context-relative feature。
Noisy Bottleneck:继续抑制过强复制
Dinomaly2 仍然保留 Noisy Bottleneck。它在 MLP bottleneck 里使用 Dropout,把输入特征随机破坏一点:
normal feature
-> Dropout bottleneck
-> corrupted normal feature
-> decoder
-> reconstruct normal feature
这里 Dropout 的角色不是普通正则化,而是低成本的 feature-level corruption。它迫使 decoder 学“正常模式修复”,而不是学输入到输出的逐点复制。
这也是 Dinomaly / Dinomaly2 与很多伪异常方法的区别:作者不依赖手工设计的 cut-paste、Perlin noise 或 feature jitter,而是用最普通的 Dropout 达到类似 denoising 的效果。
Unfocused Linear Attention:把“不够聚焦”变成优点
Softmax attention 很擅长找到与 query 最相关的位置,这在分类任务里通常是优点。但在重建式 UAD 里,它可能会形成 identity shortcut:
当前位置 query
-> 精确关注当前位置 feature
-> 把输入局部信息搬到输出
Dinomaly2 延续 Dinomaly 的选择:在 decoder 中使用 Linear Attention,让注意力更分散。

Linear Attention 的“不聚焦”在这里反而有用。它不像 softmax attention 那样精准搬运局部细节,而是更依赖全局模式去重建。对于正常区域,这种重建仍然可以很好;对于异常区域,它更难逐点复制异常细节。
Loose Reconstruction:不要逐层逐点蒸馏
如果训练目标要求 decoder 严格重建 encoder 的每一层、每一个 token,模型会被推向“尽可能像 encoder”。这对异常检测不一定好,因为我们需要 decoder 对异常保持重建失败。
Dinomaly2 使用 loose group-to-group reconstruction:

论文默认把 ViT 中间层分成两组:
shallow group: layers 3-6
deep group: layers 7-10
decoder 重建的是分组后的语义表示,而不是每一层的严格对应特征。这样做给 decoder 留出自由度:它只需要恢复正常模式的主要语义,不需要复刻 encoder 的所有细节。
Dinomaly2 还引入 Loose Loss:对已经重建得很好的区域减弱梯度,让优化更关注难重建区域。这一点和 Dinomaly / INP-Former 里的 hard/soft mining 思想是一脉相承的。
Full-Spectrum 扩展怎么做
Dinomaly2 的一个重要看点是:扩展方式都很朴素。
| 场景 | Dinomaly2 的处理 |
|---|---|
| 多视角 Real-IAD / MANTA | 每个 view 单独出 anomaly map,推理时拼接并取 top 异常区域 |
| RGB-3D MVTec3D | 把点云投影成 depth map,RGB 和 depth 分别过 ViT,特征平均 |
| RGB-IR MulSenAD | 把 RGB 和 IR 当作两个 view,分别计分再融合 |
| Few-shot | 不改架构,只对少量正常样本做标准数据增强 |
| Inference-unified MUAD | 混合类别使用同一个阈值评估,而不是每类单独校准 |
这里的工程含义挺强:作者想证明 Dinomaly2 不是一个只在 MVTec-AD 表格上刷分的模型,而是一个可以减少部署维护成本的统一框架。
它有 Zero-Shot 能力吗
严格说,Dinomaly2 不是一篇主打 zero-shot 的论文。
它覆盖了 few-shot,并且 few-shot 结果很强:比如论文报告在 4-shot multi-class UAD 下,MVTec-AD I-AUROC 达到 98.1%,VisA 达到 96.7%。但这仍然需要目标类别的少量正常样本训练。
所以更准确的说法是:
Dinomaly2: strong few-shot and unified UAD
不是 CLIP/prompt 式 true zero-shot AD
它的泛化来自 foundation ViT 和统一重建框架,而不是语言提示或不看目标数据的零样本设定。
实验怎么看
论文在 12 个 benchmark 上验证 Dinomaly2,覆盖 147 个类别/场景。比较值得记的不是每个表格数字,而是三类结论。
第一,multi-class 2D UAD 上,统一模型已经非常接近甚至超过很多单类/专用方法。论文报告 MVTec-AD 和 VisA 的 unified multi-class I-AUROC 分别达到 99.9% 和 99.3%。
第二,在多视角、多模态、few-shot 上,不改主架构也能取得很强结果。这个结果支撑了作者的 full-spectrum 主张。
第三,CR、Noisy Bottleneck、Unfocused Attention、Loose Constraint、Loose Loss 都有贡献,其中 CR 对多类别上下文混淆尤其关键。
定性图里也能看到,Dinomaly2 在工业、医学、显微、户外、无人机场景里都能给出较清晰的 anomaly map。

t-SNE 图怎么理解
论文用 t-SNE 可视化 recentering 前后的 patch feature。

没有 recentering 时,不同类别里的 patch feature 更容易混在一起:一个类别的正常 patch 可能落到另一个类别异常 patch 附近。做了 recentering 之后,patch feature 被放到各自图像上下文里解释,类别相关的正常/异常关系更清楚。
这张图不是证明 CR 的唯一证据,但它很好地解释了 CR 的动机:异常不是孤立 patch 属性,而是 patch 和上下文之间的关系。
和 Dinomaly 的关系
可以这样记:
Dinomaly 解决:
多类别 UAD 中 decoder 过度复制/过度泛化的问题。
Dinomaly2 继续解决:
多类别统一模型中的上下文混淆,
并把同一套框架扩展到更广任务谱。
Dinomaly 的核心是“别让 decoder 太会复制”;Dinomaly2 的核心是“让 decoder 在上下文相对坐标里重建正常模式”。
读完后的判断
Dinomaly2 的漂亮之处在于,它的新增模块很克制。Context-Aware Recentering 只是一个减法,但这个减法直接切中了 multi-class UAD 里“同一局部模式在不同上下文含义不同”的问题。
如果从部署视角看,这篇论文真正有价值的地方是统一性:一个 frozen ViT 特征重建框架,少量模块,少量改动,就覆盖了多类别、多视角、多模态和 few-shot。它不是 zero-shot anomaly detector,但它是一个很强的统一 UAD 基座。