【Anomaly Detection论文阅读记录】CutPaste: Self-Supervised Learning for Anomaly Detection ...(CVPR-2021)-理论
CutPaste****模型(CVPR-2021)
一**.**前景知识
1.One-class问题:所谓的一类检测问题就是异常检测,啥意思呢,就是只有好品,一个类别。而常规的缺陷检测都是二分类或者多分类的,训练集中至少有两个类别。此后不再赘述这个一分类检测问题概念,一类缺陷检测问题是图像异常检测的一个特例。
2.pretext tasks:“前置任务”或“代理任务”。pretext task 通常是指这样一类任务:该任务不是目标任务,但是通过执行该任务可以有助于模型更好的执行目标任务。其本质可以是一种迁移学习:让网络先在其他任务(pretext task)上训练,使模型学到一定的语义知识,再用模型执行目标任务)对于自监督表示学习至关重要,其本质是迁移学习。
3.自监督学习(self-supervised learning):不需要人工标注的类别标签信息,直接利用数据本身作为监督信息,学习样本数据的特征表达
二**.**异常检测问题
1.很难获得大量的异常数据(无论是标记的还是未标记的)
2.正常和异常数据之间的差异通常是细粒度的(缺陷在高分辨率图像中可能很小而微)
三、论文的核心贡献
自监督学习中pretext task的思路分为two-stage:
1.基于自监督学习和 CutPaste 数据增强的图像表示学习,对正样本采用CutPaste生成图像,训练一个二分类CNN,识别正常样本,及添加CutPaste后的图像。
2.在异常检测及定位阶段,CNN用来提取特征,高斯概率密度估计(GDE)使用CNN提取的特征计算异常分数,图像级别的异常检测可以使用GradCAM大致定位异常区域;patch级别的异常定位,对原图分割成若干patch,分别送到CNN--GDE计算异常分数,得出更细粒度异常热力图。
3.论文本质:训练模型识别这些局部的不规则性,期望它能够在测试时推广到未见过的真实缺陷

四**.CutPaste****方法的工作原理**
1.CutPaste 伪造图像:
- 从正常训练图像中裁剪出一个小的矩形区域,裁剪区域的大小和长宽比是可变的。
- (可选)对裁剪出的补丁进行旋转或像素值抖动。
- 将补丁随机粘贴回图像的一个随机位置。
2.学习表示的任务
预测被切割区域的内容:通过切割和粘贴的操作,模型的目标变为预测被切割的区域会是什么样子。通过这种方式,模型在训练过程中不仅学会了如何识别异常区域,还学会了图像中正常区域的结构。例如,训练模型去辨别哪些地方是"切割后粘贴"的内容,哪些是没有改变的区域。这帮助模型捕捉到图像中的空间结构和纹理信息,从而能够有效识别和定位异常。
3.局部异常得分(Localization Score)
异常得分的计算与传播:在测试时,模型通过一个滑动窗口(例如步幅为4的窗口)对图像进行扫描,计算每个窗口区域的异常得分。然后,通过高斯平滑等方法,模型可以将这些局部异常得分传播到整个图像,最终得到缺陷的定位结果。
4.ProjectionNet模型结构:
├── ResNet18 (feature extractor):
│ ├── Conv1: 7x7, 64, stride=2
│ ├── Layer1: [64, 64, 64] (3 blocks)
│ ├── Layer2: [128, 128, 128] (4 blocks)
│ ├── Layer3: [256, 256, 256] (6 blocks)
│ └── Layer4: [512, 512, 512] (3 blocks)
├── MLP Head:
│ ├── Linear(512, 512) ─┐
│ ├── BatchNorm1d(512) ─┘
│ ├── ReLU(inplace=True)
│ ├── Linear(512, 512) ─┐
│ ├── BatchNorm1d(512) ─┘
│ ├── ReLU(inplace=True)
│ ├── Linear(512, 512) ─┐
│ ├── BatchNorm1d(512) ─┘
│ ├── ReLU(inplace=True)
│ ├── Linear(512, 512) ─┐
│ ├── BatchNorm1d(512) ─┘
│ ├── ReLU(inplace=True)
│ ├── Linear(512, 512) ─┐
│ ├── BatchNorm1d(512) ─┘
│ ├── ReLU(inplace=True)
│ ├── Linear(512, 512) ─┐
│ ├── BatchNorm1d(512) ─┘
│ ├── ReLU(inplace=True)
│ ├── Linear(512, 128) ─┐
│ └── BatchNorm1d(128) ─┘
└── Final Linear Layer:
└── Linear(128, num_classes)
模型流程
- 输入数据 :输入图像经过 ResNet18 网络提取特征,得到一个 512 维的特征向量。
- MLP****头部 :特征向量接着通过 MLP 网络进行处理,将维度逐渐降低,最终输出一个128维的特征向量。
- 分类层 :128 维的特征通过一个线性层(Linear(128, num_classes))映射到最终的类别预测,得到 logits(未激活的类别分数)。
