在 Transformer(尤其是像 DINOv3 这样的 Vision Transformer)架构中,Patch(切片/图块) 是理解图像处理方式的核心概念。简单来说,Patch 之于图像,就相当于 Word(单词)之于句子。
1. Patch 的具体定义
传统的卷积神经网络(CNN)是通过滑动窗口一点点"看"图像的,而 Transformer 无法直接处理二维矩阵。因此,模型会将图像物理性地拆分成固定大小的正方形方块。
-
大小(Patch Size): 在
dinov3_vitb14中,数字 14 就代表每个 Patch 是 14 \\times 14 像素。 -
拆分过程: 如果输入图像是 518 \\times 518 像素,按照 14 \\times 14 切分,最终会得到 37 \\times 37 = 1369 个 Patch。
2. 为什么在缺陷检测中 Patch 至关重要?
在 DINOv3 中,模型会为每一个 Patch 生成一个高维的特征向量(Embedding)。
A. 空间定位的基础
由于每个 Patch 对应原图的一个特定区域,当我们说"第 500 个 Patch 的特征异常"时,我们可以直接通过数学换算知道这个异常在图像的哪个坐标。这也就是为什么 DINOv3 不需要像素级标注就能实现缺陷定位的原因。
B. 局部特征的敏感度
-
全局特征([CLS] Token): 代表整张图"像不像瓶子"。
-
Patch 特征: 代表图像的局部细节,比如"这 14 像素里是否有划痕"。
-
在工业检测中,缺陷(如针孔、裂纹)通常只占全图的极小比例。如果我们只看全图特征,缺陷会被掩盖;但通过 Patch 级别对比,微小的差异会在特定的特征向量上被放大。
3. Patch 特征在代码中长什么样?
当你运行 model.get_intermediate_layers() 时,你会得到一个张量(Tensor):
-
形状:
[1, 1369, 768]-
1: Batch Size(单张图)。 -
1369: 总共的 Patch 数量(37 \\times 37)。 -
768: 每个 Patch 的特征维度(这个 768 维的向量里包含了这个小方块的纹理、颜色、结构信息)。
-
4. 工业检测中的"Patch 对齐"建议
这点也是我最想说的。
在利用 MVTec 数据集做少样本检测时,有一个关键技巧:位置约束。
-
逻辑: 既然是工业品,拍摄角度通常是固定的。
-
方法: 待测图左上角的第 1 个 Patch,只需要和良品库里对应左上角的第 1 个 Patch 特征做对比。
-
好处: 这样可以避免"左上角的螺丝"被误认为"右下角的缺陷",大大降低误报率。
总结: Patch 是 DINOv3 看世界的"最小单位"。Patch Size 越小(比如 8 或 14),模型对微小缺陷的捕捉能力就越强,但计算量也会成倍增加。
您目前的检测目标是微小的点状缺陷(如尘埃),还是比较大的结构缺陷(如零件缺失)? 这决定了我们选择多大的 Patch Size 最优。