Bridge Feature Matching and Cross-Modal Alignment with Mutual-filtering for Zero-shot Anomaly Detection
论文摘要
With the advent of vision-language models (e.g., CLIP) in zero- and few-shot settings, CLIP has been widely applied to zero-shot anomaly detection (ZSAD) in recent research, where the rare classes are essential and expected in many applications. This study introduces \textbf{FiSeCLIP} for ZSAD with training-free \textbf{CLIP}, combining the feature matching with the cross-modal alignment. Testing with the entire dataset is impractical, while batch-based testing better aligns with real industrial needs, and images within a batch can serve as mutual reference points. Accordingly, FiSeCLIP utilizes other images in the same batch as reference information for the current image. However, the lack of labels for these references can introduce ambiguity, we apply text information to \textbf{fi}lter out noisy features. In addition, we further explore CLIP's inherent potential to restore its local \textbf{se}mantic correlation, adapting it for fine-grained anomaly detection tasks to enable a more accurate filtering process. Our approach exhibits superior performance for both anomaly classification and segmentation on anomaly detection benchmarks, building a stronger baseline for the direction, e.g., on MVTec-AD, FiSeCLIP outperforms the SOTA AdaCLIP by +4.6\%$\uparrow$/+5.7\%$\uparrow$ in segmentation metrics AU-ROC/$F_1$-max.
AI解读
好的,我们来详细分析这篇论文,聚焦其方法和技术细节。
1. 核心方法与创新点
这篇论文提出了一种名为 FiSeCLIP (Filter and Semantic CLIP) 的零样本异常检测(ZSAD)方法。核心思想是结合特征匹配和跨模态对齐,并通过一种互过滤策略来提高异常检测的准确性。
* 核心方法论:
* 基于 CLIP 的零样本异常检测: 利用预训练的 CLIP 模型,不需要任何目标领域的数据进行训练,即可直接进行异常检测。CLIP 的图像编码器和文本编码器可以提取图像和文本的特征,通过比较图像特征和文本描述(正常/异常)的相似度来判断图像是否异常。
* 批量处理与特征匹配: 与以往方法不同,FiSeCLIP 采用批量处理的方式,将一个批次内的图像作为彼此的参考。 这更符合实际工业应用场景,同时批次内的图像可以互相提供上下文信息。然后,通过特征匹配的方式,找到与待检测图像最相似的正常图像特征,从而判断待检测图像的异常程度。
* 互过滤策略: 由于批次内的图像是无标签的,可能存在噪声(即批次内也包含异常图像)。因此,FiSeCLIP 提出了一种互过滤策略,利用文本信息和特征匹配的结果来动态地过滤掉批次内参考图像中的异常特征,从而提高特征匹配的准确性。
* 增强 CLIP 的局部语义关联: 为了更准确地过滤噪声,FiSeCLIP 探索了 CLIP 的内在潜力,通过修改 CLIP 的注意力机制,使其更好地捕捉局部语义信息,从而提高过滤的精度。
* 主要创新点:
1. 批量零样本异常检测框架: 提出了一个基于批量处理的零样本异常检测框架,更贴合实际应用需求,且利用了批次内的上下文信息。
2. 互过滤策略: 设计了一种互过滤策略,利用文本信息和特征匹配结果动态过滤参考图像中的异常特征,有效抑制噪声干扰,提高特征匹配的精度。这是论文的核心创新点之一。
3. 局部语义增强的 CLIP: 通过修改 CLIP 的注意力机制,增强了模型对局部语义信息的感知能力,提升了细粒度异常检测的性能。这种修改保持了 CLIP 的泛化能力,避免了过拟合。
4. FiCLIP-AD 与 SeCLIP-AD 的融合迭代: 融合了基于特征匹配的 FiCLIP-AD 和基于语义对齐的 SeCLIP-AD 的预测结果,并进行迭代优化,进一步提升了异常检测的准确性。
2. 算法细节与流程
FiSeCLIP 主要由两个模块组成:FiCLIP-AD 和 SeCLIP-AD。
* 算法流程:
1. 输入: 一个包含 B 张图像的批次 D = {Iu}, u = 1, ..., B。
2. SeCLIP-AD (Semantic CLIP for Anomaly Detection):
* 语义关联恢复: 通过修改 CLIP 的注意力机制,增强模型对局部语义信息的感知能力。具体来说,将 CLIP 最后一层的注意力图替换为中间层的注意力图,并移除最后一层的前馈网络(FFN)。
* 异常评分: 利用 CLIP 的文本编码器提取正常和异常文本描述的特征,然后计算图像的视觉特征和文本特征之间的相似度,得到异常分数 ASe。分数越高,代表图像越异常。
* 生成初始过滤掩码: 基于文本和视觉特征的相似度,生成一个过滤掩码 M,用于初步过滤掉图像中的异常特征。
3. FiCLIP-AD (Feature matching CLIP for Anomaly Detection):
* 特征提取: 使用 CLIP 提取批次内所有图像的多层级特征。同时,采用不同尺寸的邻域聚合方式,提取图像的局部特征。
* 噪声特征过滤: 利用 SeCLIP-AD 生成的初始过滤掩码 M,过滤掉批次内参考图像中的异常特征。
* 特征匹配: 计算待检测图像的特征与过滤后的参考图像特征之间的距离,距离越小,代表待检测图像的该区域越正常;反之,距离越大,代表该区域越异常。
* 生成中间掩码: 利用特征匹配的结果生成中间掩码 Minter
* 互过滤掩码: 通过协同投票的方式融合初始过滤掩码 M 和中间掩码 Minter,得到最终的过滤掩码,用于更精确地过滤噪声。
4. 输出: 异常分数和异常分割图。
* 算法的技术优势和创新之处:
* 互过滤策略: 通过文本信息和特征匹配结果的互相指导,能够更准确地识别和过滤噪声,提高特征匹配的精度。
* 局部语义增强的 CLIP: 增强了 CLIP 对局部语义信息的感知能力,有助于提高细粒度异常检测的性能。
* 批量处理框架: 更贴合实际应用需求,能够有效利用批次内的上下文信息。
3. 详细解读论文第三部分
第三部分详细介绍了FiSeCLIP的两个核心组件FiCLIP-AD和SeCLIP-AD的实现细节。
3.1. SeCLIP-AD
* 3.1.1. 语义关联恢复 (Semantic correlation recovering)
这一部分解释了如何增强CLIP的局部语义理解能力。CLIP最初是为分类任务设计的,更侧重于全局语义,而异常检测任务需要理解局部细微的模式。
CLIP的视觉编码器基于ViT (Vision Transformer),由一系列注意力块组成。每个块的输出可以表示为 $X_i \in R^{B \times (HW+1) \times D}$,其中:
* $i$ 是层索引
* $B$ 是批大小
* $D$ 是特征维度
* $H \times W$ 是局部图像块(patch)的数量
* "+1" 是 [CLS] token,用于分类任务的全局信息。
ViT的自注意力机制可以简化为以下公式:
$$[q_i, k_i, v_i] = Proj_{qkv}(LN(X_{i-1})) \tag{1}$$
$$Attn_i = Softmax(\frac{q_i^T k_i}{\sqrt{d_k}}) \tag{2}$$
$$X_i = X_{i-1} + X_{attn} = X_{i-1} + Proj(Attn_i \cdot v_i) \tag{3}$$
$$X_i = X_i + FFN(LN(X_i)) \tag{4}$$
其中:
* $Proj$ 表示投影层 (用于线性变换)
* $LN$ 表示层归一化 (Layer Normalization)
* $FFN$ 表示前馈网络 (Feed-Forward Network)
* $q, k, v$ 分别是 query, key, value embeddings
* $d_k$ 是 key 的维度,用于缩放注意力权重,防止梯度消失。
公式解释:
* (1): 输入特征 $X_{i-1}$ 通过 Layer Normalization 进行归一化, 然后通过一个投影层 $Proj_{qkv}$ 得到 query ($q_i$), key ($k_i$) 和 value ($v_i$) embeddings。
* (2): 使用query和key计算注意力权重。先计算 $q_i^T k_i$ (query和key的点积),然后除以 $\sqrt{d_k}$ 进行缩放,最后通过Softmax进行归一化,得到注意力权重矩阵 $Attn_i$。
* (3): 将注意力权重 $Attn_i$ 应用到value embeddings $v_i$ 上,得到加权后的value $Attn_i \cdot v_i$。 通过一个投影层 $Proj$ 得到 $X_{attn}$,并将其加到原始特征 $X_{i-1}$ 上 (残差连接)。
* (4): 将特征 $X_i$ 通过 Layer Normalization 进行归一化, 然后通过一个前馈网络 $FFN$。并将FFN的输出加到原始特征 $X_i$ 上 (残差连接)。
为了保留CLIP的泛化能力,只修改最后一层。 论文观察到中间层的注意力图具有更好的局部语义信息,因此,将最后一层的注意力图替换为中间层的注意力图:
$$Attn_{L-1} = Attn_{inter}, \quad X_{attn} = Proj(Attn_{inter} \cdot v_{L-1}) \tag{5}$$
此外,ClearCLIP发现残差连接会降低密集分割任务的性能,而FFN的影响较小,因此,论文也移除了最后一层的FFN: $X_{final} = X_{attn}$。
* 3.1.2. CLIP for Zero-shot Anomaly Detection
这一部分介绍了如何使用CLIP的多模态能力进行零样本异常检测。核心思想是计算文本特征和视觉特征之间的相似度。
首先,定义文本提示词 (text prompts),包括正常和异常两种类型,例如 "a [d] photo of [s] [c]",其中 [s] 可以是 "normal" 或 "abnormal",[d] 提供图像的附加信息(如 "rotated"),[c] 表示图像类别。
使用CLIP的文本编码器提取文本特征。正常和异常文本的特征分别求平均,得到最终的文本特征 $F_t \in R^{2 \times C}$,其中 $C$ 是特征维度。
* 异常分类:
使用原始CLIP的全局视觉特征 $F_c \in R^{B \times C}$,计算分类概率:
$$CLS_{prob} = Softmax(F_c \cdot F_t) \tag{6}$$
异常分类得分 $CLS_{score} \in R^B$ 表示类别为异常的概率。
* 异常分割:
移除[CLS] token,将局部图像块的特征维度映射到 $C$,得到局部图像块特征 $F_s \in R^{B \times HW \times C}$。计算分割概率:
$$SEG_{prob} = Softmax(F_s \cdot F_t) \tag{7}$$
异常分割得分 $SEG_{score} \in R^{B \times HW}$ 表示图像块为异常的概率。
3.2. FiCLIP-AD
* 3.2.1. 特征提取 (Feature extraction)
使用原始CLIP同时提取批次中B张未标注的测试图像的特征 $D = \{I_u\}, u = 1, ..., B$。
对于一个L层的基于ViT的CLIP编码器,使用多阶段的图像块特征 $F_i^u \in R^{HW \times D}$,其中 $i \in \{0, 1, ..., L\}$ 表示CLIP视觉编码器的层。
为了提高不同尺寸异常的检测精度,通过聚合邻域特征来增强特征表达。具体来说,将图像块特征 $F_i^u \in R^{HW \times D}$ reshape 为 $H \times W \times D$。然后使用平均池化聚合当前位置的 $r \times r$ 邻域内的图像块特征,得到聚合后的特征 $F_{i,r}^u \in R^{H \times W \times D}$,最后再reshape为 $F_{i,r}^u \in R^{HW \times D}$。
* 3.2.2. 噪声特征过滤 (Noisy features filtering)
使用3.2.1节描述的方法提取B张图像的特征。计算视觉特征 $F_{i,r}^u \in R^{HW \times D}$ 和 $F_{i,r}^v \in R^{HW \times D}$ (其中 $v \neq u$) 中每个图像块之间的距离,并将最小距离作为异常得分 $a_{i,r}^{u,v} \in R^{HW}$:
$$a_{i,r}^{u,v} = min||F_{i,r}^u - F_{i,r}^v||_2 \tag{8}$$
在特征匹配方法中,希望参考图像不包含与待检测图像中的异常图像块相似的图像块。但是,由于零样本异常检测中的参考特征是不确定的,可能引入干扰。因此,论文提出过滤掉参考特征 $F_{i,r}^v$ 中的异常特征,然后使用过滤后的特征计算异常得分。
初始异常掩码 $M \in R^{HW}$ 可以通过公式7得到:
$$M = \begin{cases} True, & \text{if } P_a > \lambda \cdot P_n \\ False, & \text{otherwise} \end{cases} \tag{9}$$
其中 $P_a$ 和 $P_n$ 分别表示公式7中的异常概率和正常概率,$\lambda$ 是一个超参数。
然后,"正常"特征可以定义为:
$$\hat{F}_{i,r}^v = F_{i,r}^v[\overline{M}] \tag{10}$$
其中 $\hat{F}_{i,r}^v \in R^{N' \times D}$,$N'$ 表示正常图像块的长度,$\overline{M}$ 表示对掩码M取反。
异常得分可以进一步描述为:
$$\hat{a}_{i,r}^{u,v} = min||F_{i,r}^u - \hat{F}_{i,r}^v||_2 \tag{11}$$
* 3.2.3. 互过滤掩码 (Mutual-filtering mask)
从多个阶段和不同聚合类型中提取特征 $F_{i,r}^u$。此外,公式11可以得到多个异常得分。因此,论文提出使用异常得分来优化异常掩码M。
具体来说,利用四个阶段的图像块特征生成平均异常得分:
$$\hat{a}_r^v = \frac{1}{m} \sum_{i \in \{0,1,...,L\}} \hat{a}_{i,r}^{v,u}, \quad \hat{a}_r^u = \frac{1}{m} \sum_{i \in \{0,1,...,L\}} \hat{a}_{i,r}^{u,v} \tag{12}$$
其中 $m$ 表示所用阶段的数量。
中间掩码定义为:
$$M_{inter} = \begin{cases} True, & \text{if } \hat{a}_r > \mu \\ False, & \text{otherwise} \end{cases} \tag{13}$$
其中 $\mu$ 是一个超参数,默认值为0.57,$\hat{a}_r$ 表示图像的异常得分。 然后,将中间掩码 $M_{inter}$ 应用于协作投票以优化 $M$。
4. 实现细节与注意事项
* 关键实现细节:
* CLIP 模型的选择: 论文选择了 ViT-L/14-336 版本的 CLIP 模型,该模型具有较强的特征提取能力。在实际应用中,可以根据计算资源和性能需求选择不同的 CLIP 模型。
* 特征提取的层级: 论文选择了 CLIP 模型的 6-th, 12-th, 18-th, 和 24-th 层提取特征,这些层级的特征包含了不同尺度的语义信息,有助于提高异常检测的准确性。
* 邻域聚合的尺寸: 论文使用了 r=1, 3, 5 三种尺寸的邻域进行特征聚合,通过融合不同尺寸的局部特征,可以提高模型对不同大小异常的检测能力。
* 过滤掩码的生成: 过滤掩码的生成是 FiSeCLIP 的核心步骤,需要仔细调整阈值 λ 和 μ,以保证能够有效地过滤掉噪声,同时避免过度过滤导致正常区域被误判为异常。
* 可能遇到的实现难点和解决方案:
* 计算资源消耗: 由于 FiSeCLIP 采用了批量处理和多层级特征提取,计算资源消耗较大。可以考虑使用更小的 CLIP 模型,或者减少特征提取的层级和邻域聚合的尺寸,以降低计算资源消耗。
* 参数调优: FiSeCLIP 包含多个超参数,需要仔细调整才能达到最佳性能。可以采用网格搜索、随机搜索等方法进行参数调优。
* 噪声过滤的精度: 如果噪声过滤的精度不够,会导致特征匹配的准确性下降。可以尝试使用更复杂的过滤方法,例如基于深度学习的噪声过滤器。
* 优化建议和最佳实践:
* 数据增强: 在训练阶段,可以采用数据增强技术,例如旋转、缩放、平移等,以提高模型的鲁棒性。
* 集成学习: 可以考虑将 FiSeCLIP 与其他异常检测方法进行集成,以进一步提高检测的准确性。
* 参数设置和调优方法:
* λ 和 μ 的调优: λ 和 μ 是控制过滤掩码生成的重要参数。可以通过网格搜索的方法,在验证集上选择最佳的参数组合。一般来说,λ 的取值范围可以设置为 [0.9, 1.2],μ 的取值范围可以设置为 [0.4, 0.6]。
* 学习率的设置: 如果需要对 CLIP 模型进行微调,需要设置合适的学习率。一般来说,学习率的取值范围可以设置为 [1e-5, 1e-3]。
* 批量大小的设置: 批量大小会影响模型的训练速度和性能。可以根据计算资源和数据规模,选择合适的批量大小。一般来说,批量大小的取值范围可以设置为 [8, 32]。
希望以上分析能够帮助你更好地理解这篇论文。如有任何疑问,欢迎继续提问。
返回论文列表