StackCLIP: Clustering-Driven Stacked Prompt in Zero-Shot Industrial Anomaly Detection

作者:Yanning Hou et.al.

论文链接:http://arxiv.org/abs/2506.23577

发布日期:2025-07-05

解读时间:2025-07-19 19:05:05

论文摘要

Enhancing the alignment between text and image features in the CLIP model is a critical challenge in zero-shot industrial anomaly detection tasks. Recent studies predominantly utilize specific category prompts during pretraining, which can cause overfitting to the training categories and limit model generalization. To address this, we propose a method that transforms category names through multicategory name stacking to create stacked prompts, forming the basis of our StackCLIP model. Our approach introduces two key components. The Clustering-Driven Stacked Prompts (CSP) module constructs generic prompts by stacking semantically analogous categories, while utilizing multi-object textual feature fusion to amplify discriminative anomalies among similar objects. The Ensemble Feature Alignment (EFA) module trains knowledge-specific linear layers tailored for each stack cluster and adaptively integrates them based on the attributes of test categories. These modules work together to deliver superior training speed, stability, and convergence, significantly boosting anomaly segmentation performance. Additionally, our stacked prompt framework offers robust generalization across classification tasks. To further improve performance, we introduce the Regulating Prompt Learning (RPL) module, which leverages the generalization power of stacked prompts to refine prompt learning, elevating results in anomaly detection classification tasks. Extensive testing on seven industrial anomaly detection datasets demonstrates that our method achieves state-of-the-art performance in both zero-shot anomaly detection and segmentation tasks.

AI解读

好的,让我们来详细分析这篇名为 "StackCLIP: Clustering-Driven Stacked Prompt in Zero-Shot Industrial Anomaly Detection" 的论文,重点关注其方法和技术细节。

1. 核心方法与创新点

这篇论文的核心方法是利用一种名为 "StackCLIP" 的模型进行零样本工业异常检测。它主要关注如何更好地利用 CLIP (Contrastive Language-Image Pre-training) 模型,尤其是如何设计合适的文本提示(prompt),来提高异常检测的准确性和泛化能力。

主要创新点:

* Stacked Prompt (堆叠提示): 这是论文的核心创新。传统的 CLIP 应用通常使用 "a photo of a [category]" 这样的精确提示,或者 "a photo of an object" 这样的抽象提示。StackCLIP 提出将多个语义相关的类别名称堆叠在一起,形成 "a photo of a [category1][category2]...[categoryN]" 的提示。
* 技术亮点: 这种方法既保留了类别信息,又避免了模型过度关注特定对象,从而提高了泛化能力。可以理解为,模型不是只记住一种东西的样子,而是学习一类东西的共同特征。
* 与现有方法的区别: 相比精确提示,StackCLIP 减少了过拟合的风险;相比抽象提示,StackCLIP 保留了类别相关的上下文信息。

* Clustering-Driven Stacked Prompts (CSP,聚类驱动的堆叠提示): 在构建堆叠提示时,不是随意地堆叠类别名称,而是先通过聚类算法将语义相似的类别分组,然后针对每个类别簇构建特定的堆叠提示。
* 技术亮点: 这样可以确保堆叠在一起的类别确实具有相似性,从而让模型学习到更有意义的特征。
* 与现有方法的区别: CSP 是一种更智能的提示构建方式,能够根据数据的内在结构来设计提示,而不是简单地手工设计。

* Ensemble Feature Alignment (EFA,集成特征对齐): 针对每个类别簇,训练一个独立的线性层,用于将图像特征与文本特征对齐。在测试时,根据测试类别与各个类别簇的相似度,自适应地集成这些线性层的输出。
* 技术亮点: 这种方法可以利用多个 "专家" 的知识,每个 "专家" 负责一个特定的类别簇。根据测试样本的特点,选择合适的 "专家" 进行诊断。
* 与现有方法的区别: EFA 允许模型根据输入自适应地调整其行为,而不是使用一个固定的模型。

* Regulating Prompt Learning (RPL,正则化提示学习): 在训练过程中,使用堆叠提示来约束可学习的提示,防止模型过拟合。
* 技术亮点: 利用堆叠提示的泛化能力来提升 prompt learning 的性能,相当于给 prompt learning 加上一个 prior。
* 与现有方法的区别: RPL 不是直接学习提示,而是学习如何更好地利用已有的提示信息。

2. 算法细节与流程

1. CSP 模块(聚类驱动的堆叠提示):
* 技术原理: 使用聚类算法(如 K-means)将类别名称分组,语义相似的类别分到同一组。
* 关键步骤:
1. 使用 CLIP 的文本编码器将所有类别名称编码成文本特征。
2. 使用 K-means 算法对文本特征进行聚类。
3. 使用公式 (2) 计算每个聚类方案的得分,选择最优的聚类方案。
4. 针对每个类别簇,构建堆叠提示,例如 "a photo of a [good/bad] [cluster_name]",其中 `cluster_name` 是该类别簇中所有类别名称的组合。
* 实现方式: 使用现有的 K-means 库即可实现。
* 算法流程: 输入:所有类别名称;输出:每个类别簇的堆叠提示。

2. EFA 模块(集成特征对齐):
* 技术原理: 针对每个类别簇,训练一个独立的线性层,用于将图像特征与文本特征对齐。
* 关键步骤:
1. 使用 CLIP 的图像编码器提取图像的多层特征。
2. 针对每个类别簇,使用公式 (7) 将图像特征投影到文本特征空间。
3. 使用公式 (9) 计算图像特征与文本特征的相似度,得到 anomaly map。
4. 使用 focal loss 和 dice loss 优化线性层。
5. 在测试时,使用公式 (14) 计算测试图像与各个类别簇的相似度,得到 attention weights。
6. 使用公式 (17) 将各个线性层的输出加权求和,得到最终的 anomaly map。
* 实现方式: 使用 PyTorch 等深度学习框架即可实现。
* 算法流程: 输入:训练图像、类别簇的堆叠提示;输出:训练好的线性层。测试时输入:测试图像;输出:anomaly map。

3. RPL 模块(正则化提示学习):
* 技术原理: 使用堆叠提示来约束可学习的提示,防止模型过拟合。
* 关键步骤:
1. 初始化一个可学习的提示。
2. 使用公式 (18) 计算分类 loss 和正则化 loss。
3. 优化可学习的提示。
* 实现方式: 使用 PyTorch 等深度学习框架即可实现。
* 算法流程: 输入:训练图像、类别簇的堆叠提示;输出:训练好的可学习的提示。

算法的技术优势和创新之处:

* 效率: StackCLIP 在训练时只需要训练一些线性层和可学习的提示,而不需要 fine-tune 整个 CLIP 模型,因此训练效率很高。
* 准确性: StackCLIP 使用了堆叠提示和集成特征对齐等技术,可以更准确地检测出异常。
* 适用场景: StackCLIP 是一种零样本方法,不需要任何标注数据即可进行异常检测,因此非常适用于工业场景。

3. 详细解读论文第三部分 (APPROACH)

论文的第三部分详细介绍了 StackCLIP 的三个核心模块:CSP、EFA 和 RPL。

3.1 Clustering-Driven Stacked Prompt (CSP)

* 公式 (1): $S_p = \text{a photo of a [state] [cls}_1\text{] [cls}_2\text{] ... [cls}_n\text{]}$
* 物理意义: 定义了堆叠提示的基本形式。`[state]` 表示正常或异常状态的描述,`[cls]` 表示堆叠的类别名称。
* 公式 (2): $n^* = \arg \min_n \left\{ \sum_{i=1}^n \sum_{t \in T_i} \frac{1}{|T_i|} ||t - t^*||^2 + \lambda(n) \right\}$
* 推导过程: 公式 (2) 的目标是找到最佳的聚类数量 $n^*$。
* 第一项 $\sum_{i=1}^n \sum_{t \in T_i} \frac{1}{|T_i|} ||t - t^*||^2$ 计算了簇内的平均距离,表示聚类结果的紧凑程度。
* 第二项 $\lambda(n) = 0.1 \times e^n$ 是一个惩罚项,用于防止过度聚类。
* 整个公式试图找到一个平衡点,既要保证簇内的紧凑性,又要避免过度聚类。
* 物理意义: 最小化簇内方差(紧凑性)的同时,惩罚过多的簇(简单性)。 $\lambda(n)$ 随着 $n$ 的增加而指数增长,鼓励选择更少的簇。
* 公式 (3): $S_p^i = \text{a photo of a [state] [cluster }i\text{]}$
* 物理意义: 定义了每个类别簇的提示形式。
* 公式 (4): $[\text{cluster }i\text{]} = \text{[cls}_{i,1}\text{] [cls}_{i,2}\text{] ... [cls}_{i,n}\text{]}$
* 物理意义: 定义了类别簇的标签,即该簇中所有类别名称的组合。

3.2 Ensemble Feature Alignment (EFA)

* 公式 (5): $I = \{I_1, I_2, ..., I_{n^*}\}$
* 物理意义: 将整个数据集划分为 $n^*$ 个簇,每个簇对应一个类别簇。
* 公式 (6): $h_{i,j}^\ell = \phi^\ell(I_{i,j})$
* 物理意义: 使用 CLIP 的图像编码器提取图像 $I_{i,j}$ 的第 $\ell$ 层特征。
* 公式 (7): $\tilde{h}_{i,j}^\ell = W_i^\ell h_{i,j}^\ell + b_i^\ell$
* 物理意义: 使用线性层将图像特征投影到文本特征空间。$W_i^\ell$ 和 $b_i^\ell$ 是针对第 $i$ 个簇和第 $\ell$ 层的可学习参数。
* 公式 (8): $t_i = \psi(S_p^i)$
* 物理意义: 使用 CLIP 的文本编码器将类别簇的堆叠提示编码成文本特征。
* 公式 (9): $M_{i,j}^\ell = \cos(\tilde{h}_{i,j}^\ell, t_i) \in \mathbb{R}^{H \times W}$
* 物理意义: 计算投影后的图像特征与文本特征的 cosine 相似度,得到 anomaly map。
* 公式 (10): $L_{focal} = -\alpha(1 - M_{i,j}^\ell)^\gamma \log(M_{i,j}^\ell)M_{gt} - (1 - \alpha)(M_{i,j}^\ell)^\gamma \log(1 - M_{i,j}^\ell)(1 - M_{gt})$
* 物理意义: Focal Loss,主要用于解决正负样本比例不均衡的问题,使得模型更关注难分类的样本
* 公式 (11): $L_{dice} = 1 - \frac{2\sum (M_{i,j}^\ell \cdot M_{gt}) + \epsilon}{\sum(M_{i,j}^\ell) + \sum(M_{gt}) + \epsilon}$
* 物理意义: Dice Loss,是一种区域相似性的度量方式,能更好处理分割任务中的不均衡性。
* 公式 (12): $h_{cls} = \phi_{cls}^{\ell=24}(I_t)$
* 物理意义: 提取测试图像的 CLS token 作为全局表示。
* 公式 (13): $S_{t,i}^p = \text{a photo of a [cls test] [cluster }i\text{]}$
* 物理意义: 构建测试图像与类别簇的堆叠提示。
* 公式 (14): $\alpha_i = \frac{\exp(\cos(h_{cls}, t_i))}{\sum_{j=1}^{n^*} \exp(\cos(h_{cls}, t_j))}$
* 物理意义: 计算测试图像与各个类别簇的相似度,得到 attention weights。
* 公式 (15): $\tilde{f}_i^\ell = W_i^\ell \cdot \phi^\ell(I_t) + b_i^\ell$
* 物理意义: 使用线性层将图像特征投影到文本特征空间。
* 公式 (16): $M_i^\ell = \cos(\tilde{f}_i^\ell, t_{t,i})$
* 物理意义: 计算投影后的图像特征与文本特征的 cosine 相似度,得到 anomaly map。
* 公式 (17): $M_{final} = \sum_{\ell \in \{6, 12, 18, 24\}} \sum_{i=1}^{n^*} \alpha_i \cdot M_i^\ell$
* 物理意义: 将各个线性层的输出加权求和,得到最终的 anomaly map。

3.3 Regulating Prompt Learning (RPL)

* 公式 (18): $L_{ce} = -y \log(p_y), \quad L_{text} = \frac{1}{d} \sum_{m=1}^d (t'_m - t_s^m)^2$
* 物理意义: 定义了分类 loss 和正则化 loss。
* $L_{ce}$ 是标准的交叉熵 loss,用于监督分类。
* $L_{text}$ 是 MSE loss,用于约束可学习的提示与堆叠提示的相似度。

4. 实现细节与注意事项

* 关键实现细节:
* 聚类算法的选择: K-means 是一种常用的聚类算法,但也可以尝试其他聚类算法,如层次聚类、DBSCAN 等。
* 线性层的初始化: 线性层的初始化非常重要,可以使用 Xavier 初始化或 Kaiming 初始化。
* Loss 函数的选择: 除了 focal loss 和 dice loss,还可以尝试其他 loss 函数,如 IoU loss、Tversky loss 等。
* Attention weights 的计算: 除了 cosine 相似度,还可以尝试其他相似度度量方式,如点积、欧氏距离等。

* 实现难点和解决方案:
* 类别簇的划分: 如何将类别名称合理地分组是一个难点。可以尝试不同的聚类算法和相似度度量方式,并进行实验验证。
* 线性层的训练: 线性层的训练容易过拟合,可以使用 dropout、weight decay 等正则化方法。

* 优化建议和最佳实践:
* 使用预训练的 CLIP 模型: 可以使用 Hugging Face 提供的预训练 CLIP 模型。
* 使用 GPU 加速训练: 可以使用 PyTorch 等深度学习框架,并使用 GPU 加速训练。
* 使用 TensorBoard 等工具可视化训练过程: 可以使用 TensorBoard 等工具可视化训练过程,以便更好地了解模型的训练情况。

* 参数设置和调优方法:
* 聚类数量 K: 可以使用 elbow 方法或 silhouette 方法选择最佳的聚类数量。
* 学习率: 可以使用学习率衰减策略,如余弦退火、step decay 等。
* Batch size: 可以根据 GPU 显存大小选择合适的 batch size。

希望这个详细的分析能够帮助你更好地理解这篇论文!
返回论文列表