基于深度学习的图像异常检测算法:PaDiM(Patch Distribution Modeling)
字数 1244 2025-11-11 02:27:14
基于深度学习的图像异常检测算法:PaDiM(Patch Distribution Modeling)
1. 问题描述
图像异常检测的目标是识别与正常样本模式不同的异常图像或区域,常用于工业质检、医疗影像分析等场景。难点在于:
- 异常样本稀少且形态多样,难以收集足够数据训练监督模型。
- 需同时定位异常区域并判断异常程度。
PaDiM是一种无监督异常检测算法,核心思想是:通过对正常图像的特征分布建模,检测偏离该分布的异常区域。
2. 核心思路
PaDiM的解决思路分为三步:
- 特征提取:利用预训练CNN(如ResNet)提取多层级特征,兼顾局部细节与全局上下文。
- 概率分布建模:对每个图像块(patch)的特征,构建多元高斯分布模型。
- 异常评分:计算测试图像中每个块与对应高斯分布的马氏距离,距离越大则异常概率越高。
3. 关键技术细节
步骤1:特征提取与图像块对齐
- 使用预训练CNN(如ResNet18)提取多个层级的特征图(例如来自layer1, layer2, layer3)。
- 将不同层级的特征图上采样到同一分辨率,并拼接成综合特征向量。例如,若原图尺寸为224×224,每个位置(i,j)对应的特征向量由三层特征拼接而成。
- 每个特征向量代表图像中一个局部区域(patch),实现像素级异常定位。
步骤2:多元高斯分布建模
- 假设所有正常图像中,同一位置(i,j)的特征向量服从多元高斯分布。
- 使用正常训练集计算每个位置(i,j)的:
- 均值向量 \(\mu_{ij}\)
- 协方差矩阵 \(\Sigma_{ij}\)(为稳定计算,加入正则项 \(\lambda I\))
- 协方差矩阵可能奇异,PaDiM通过随机选择特征维度子集降低计算复杂度并避免过拟合。
步骤3:异常得分计算
- 对测试图像的每个位置(i,j),计算其特征向量 \(x_{ij}\) 与高斯分布 \((\mu_{ij}, \Sigma_{ij})\) 的马氏距离作为异常得分:
\[ \text{Score}_{ij} = \sqrt{(x_{ij} - \mu_{ij})^T \Sigma_{ij}^{-1} (x_{ij} - \mu_{ij})} \]
- 得分图通过高斯平滑后生成异常热力图,高分区域即为异常区域。
- 图像级异常得分取所有位置得分的最大值或平均值。
4. 算法优势
- 无需异常样本:仅用正常数据训练。
- 多尺度特征:结合不同CNN层特征,提升对小异常和大异常的检测能力。
- 高效推理:预计算高斯参数,测试时仅需距离计算。
5. 局限性
- 假设特征分布为高斯分布,可能不适用于复杂模式。
- 对训练集中未出现的正常变异敏感(如光照变化)。
6. 总结
PaDiM通过简单而有效的概率建模,实现了无需标注异常的精准检测与定位,为工业质检等场景提供了实用工具。后续改进如SPADE(基于K近邻)或PatchCore(基于核心集)进一步优化了分布建模的鲁棒性。