DINOv3(2025年由 Meta AI 发布)在工业缺陷检测领域具有划时代的意义。与前代相比,它引入了 Gram Anchoring(格拉姆锚定)技术,极大提升了密集特征(Dense Features)的稳定性。即使不进行任何针对性训练,其 Patch 级别的特征也能精准识别出工业品表面的微小异物、划痕或结构缺失。
一、 DINOv3 快速部署指南
由于 DINOv3 参数量极大(从 ViT-S 到 ViT-7B),建议首选官方提供的 Torch Hub 或 Hugging Face 加载方式,以避免手动配置复杂的环境依赖。
1. 环境准备
推荐使用 Python 3.10+,显存建议 24GB 以上(针对 ViT-L (Large)模型。对于显存小于8GB的可使用模型ViT-B(Base)模型。
安装核心依赖
pip install torch torchvision timm pillow matplotlib
如果需要使用 AD-DINOv3 等跨模态功能,还需安装 clip
pip install git+https://github.com/openai/CLIP.git
2. 本地部署(Python 代码示例)
你可以直接在代码中调用 Meta 预训练好的模型:
import torch
from PIL import Image
from torchvision import transforms
1. 加载 DINOv3 (以 ViT-L/14 为例)
14 代表 Patch 大小,越小代表特征精度越高,适合检测细小缺陷
model = torch.hub.load('facebookresearch/dinov3', 'dinov3_vitl14')
model.cuda().eval()
2. 图像预处理 (DINOv3 支持轴向旋转编码,支持不同分辨率,建议使用 518x518)
transform = transforms.Compose([
transforms.Resize((518, 518)),
transforms.ToTensor(),
transforms.Normalize(mean=(0.485, 0.456, 0.406), std=(0.229, 0.224, 0.225)),
])
3. 提取特征
img = Image.open("industrial_part.jpg").convert('RGB')
img_t = transform(img).unsqueeze(0).cuda()
with torch.no_grad():
获取 Patch 级别的特征,用于缺陷定位
intermediate_layers 可以获取不同深度的语义特征
features = model.get_intermediate_layers(img_t, n=1)[0] # (1, 1369, 1024)
二、 零样本 (Zero-Shot) 缺陷检测实现方案
零样本 意味着你不需要任何该特定缺陷的训练图。目前最前沿的方法是 AD-DINOv3 (Anomaly Detection DINOv3)。
1. 实现逻辑:视觉-语言匹配
利用 DINOv3 提取图像的 Patch 特征,利用 CLIP 提取文本特征(如 "Normal" 和 "Damaged")。
-
步骤:
1)Prompt 构建: 定义两组关键词,一组是描述正常的(如 "perfect surface"),一组是描述缺陷的(如 "scratches", "crack")。
-
2)相似度计算: 计算图像中每个 Patch 特征与这两组文本嵌入(Embeddings)的余弦相似度。
-
3)异常图生成: 将倾向于 "Damaged" 的 Patch 标记为高亮,生成热力图。
2. 核心优势
- 抗噪性: DINOv3 解决了前代模型在复杂背景下容易产生"噪声点"的问题,能更聚焦于真实的结构变化。
三、 少样本 (Few-Shot) 缺陷检测:Memory Bank 模式
在工业界,最实用的方案通常是 1-Shot 或 5-Shot,即给模型看 1 到 5 张"良品"图。
1. 核心步骤
1)特征录入(Registration): 输入 5 张正常的工业品图像,通过 DINOv3 提取它们所有的 Patch Features。
2)构建特征库(Memory Bank): 将这些正常特征保存到向量数据库(如 Faiss)。为了提高速度,可以使用 K-Means 对特征进行聚类压缩。
3)推理比对(Inference): 输入待测图,提取其 Patch Features。对每一个 Patch,在特征库中寻找 最近邻距离。
4)判定逻辑
(1)距离近: 说明这个位置的纹理/结构在良品中出现过,判定为正常。
(2)距离远: 说明出现了库中没有的特征,判定为缺陷。
2. 工业建议:为什么选 DINOv3 而不是 DINOv2?
1)高空间精度: DINOv3 在处理不规则物体(如形状复杂的铸件)时,特征的边缘对齐度更好。
2)不需要 Fine-tune: 以前需要针对不同产品训练不同的 AE(自编码器),现在一套 DINOv3 配合不同的 Memory Bank 即可通用。
四、 总结与建议
有条件建议良品和缺陷样本都用。
| 场景 | 推荐方案 | 难点 |
|---|---|---|
| 完全无样本 | AD-DINOv3 (视觉+文本) | 需要精准的文本描述缺陷类型 |
| 有少量良品 (1-5张) | DINOv3 + Memory Bank (推荐) | 需确保良品涵盖了所有允许的生产波动 |
| 有良品和缺陷样本 | DINOv3 + 轻量级 Adapter | 这种方式精度最高,类似于微调 |