最近异常检测圈有个特别有意思的现象。
很多传统方法:
PatchCore PaDiM FastFlow
开始被新的DINO路线疯狂超越。
尤其是:
AVA-DINO
很多公开测试中:
面对从未见过的异常。
依然能保持极强检测能力。
这意味着:
模型开始拥有:
零样本异常检测能力。
但问题来了。
AVA-DINO到底做了什么?
其实核心并不复杂。
它本质上干了三件事:
DINO特征提取 多尺度特征融合 异常区域定位
今天直接拆源码。
二、AVA-DINO核心结构
Image│▼DINO Backbone│▼Multi-Scale Feature│▼Feature Matching│▼Anomaly Score Map│▼Anomaly Localization
DINO最大的优势:
不是分类。
而是:
特征表达能力极强
PyTorch代码:
from transformers import AutoModelbackbone = AutoModel.from_pretrained("facebook/dinov2-base")
features = backbone(pixel_values)feature_map = features.last_hidden_state
(B,N,C)1 x 1025 x 768为什么DINO这么强?
因为它学到的:
不是产品。
而是:
边缘 结构 纹理 语义
所以:
换产品依然有效。
四、多尺度特征融合
AVA-DINO里面非常关键的一步:
把多个层特征拿出来。
例如:
feat1feat2feat3feat4
fusion = torch.cat([feat1,feat2,feat3,feat4], dim=1)
为什么?
因为:
异常可能出现在:
微观层 中尺度 全局层
只看一个尺度很容易漏检。
五、异常分数计算
这里才是核心。
AVA-DINO其实在做:
Feature Distance
例如:
正常样本特征:
normal_featuretest_featuredistance = torch.norm(test_feature - normal_feature,p=2,dim=1)
距离越大:
越可能异常。
六、工业版改进思路
这里是公众号最有价值的部分。
很多论文不会讲。
但工业项目特别重要。
方案1
替换YOLO Backbone
例如:
YOLO11↓DINO Backbone↓Neck↓Head
很多小缺陷:
召回率会明显提升。
方案2
DINO + Geometry Attention
结构:
Image↓DINO↓Geometry Attention↓Detection Head
特别适合:
裂纹 毛刺 崩边
Geometry Attention代码
class GeometryAttention(nn.Module):def __init__(self,c):super().__init__()self.conv_h = nn.Conv2d(c,c,(1,7),padding=(0,3))self.conv_v = nn.Conv2d(c,c,(7,1),padding=(3,0))def forward(self,x):h = self.conv_h(x)v = self.conv_v(x)attn = torch.sigmoid(h+v)return x * attn
很多人以为:
AVA-DINO厉害在:
零样本。
但我觉得:
真正可怕的是:
泛化能力。
过去工业AI:
逻辑是:
收集缺陷↓标注缺陷↓训练缺陷↓识别缺陷
学习正常产品↓理解产品结构↓自动发现异常

夜雨聆风