本文记录一篇生成异常数据用于自监督学习的异常检测工作 —— MemSeg。
项目 | 内容 | 备注 |
---|---|---|
方法名称 | MemSeg | |
论文题目 | MemSeg: A semi-supervised method for image surface defect detection using differences and commonalities | |
论文连接 | | |
开源代码 | | |
发表时间 | 2022 | |
方法类别 | 深度学习 -> 基于特征 -> 自监督学习 | |
Detection AU-ROC | 99.56% | |
Segmentation AU-ROC | 98.84% | |
Segmentation AU-PRO | - | |
FPS | 31.3 | |
核心思想 | 人工生成异常图像,用于训练自监督的分割网络,为限制网络泛化能力加入了记忆模块,利用注意力机制降低特征冗余,再利用U-Net跳跃连接做二轮的特征融合。一系列的操作将不同尺度信息充分融合又不冗余,实现检测及定位。 | |
上图为 MemSeg 整体架构,主要由 异常模拟、记忆模块和空间注意力组成。
监督学习分割网络关键在于生成异常数据,使用惯用套路,生成 mask,将其他图像叠加在 Mask 上,按照透明度融合在一起:
生成的异常样本在特征空间中的表现:
输入为批大小为N的记忆样本(由正常图像随机选取所得),输入预训练好的编码器后得到三种尺寸不同的输出特征,分别为:N×64×64×64、N×128×32×32和N×256×16×16。由记忆样本得到的输出特征记作MI。
冻结ResNet的 block1/2/3 的参数保证高维特征与记忆信息统一,其余部分仍可训练。训练及推理阶段,通过原文公式(下式),比较距离。
$$ DI=\bigcup_{i=1}^N|MI_i-II|_2 $$
取距离最小的特征作为 x 图像的特征:
$$ DI^{*}=\operatorname*{arg}_{DI_{i}\in DI}\sum_{x\in DI_{i}} $$
N个存储信息中,每个包括块1/2/3生成的三张特征图,将输入的三张特征图与N中所有的三个特征图比较找出距离最小的N中的三张特征图。将输入的三张特征图与和其距离最小的三张特征图连接形成CI。后经多尺度特征融合块,经U-Net跳跃连接(这里可以将一些模拟的可分性不强的异常特征去除,保证模拟的真实性。)进入解码器。
为什么不直接使用CI输入到空间注意模块进行计算呢? 作者解释道: 由于串联后不经过任何操作,输入到空间注意模块不可避免的会有特征冗余的问题,同时导致计算效率低下,一种合适的特征融合手段可以有效解决这些问题。
计算特征空间注意力权重:
$$ \begin{gathered} M_{3}=\frac{1}{C_{3}}\sum_{i=1}^{C_{3}}DI_{3i}^{*} \ M_{2}=\frac{1}{C_{2}}\Big(\sum_{i=1}^{C_{2}}DI_{2i}^{*}\Big)\odot M_{3}^{U} \ M_{1} =\frac{1}{C_{1}}\Big(\sum_{i=1}^{C_{1}}DI_{1i}^{*}\Big)\odot M_{2}^{U} \end{gathered} $$
L1 损失和 focal 损失。L1 比 L2 保留更多边缘信息。focal 缓解样本不平衡问题,使模型专注于分割本身而不是样本的情况。
直接端到端从输入图像到异常得分结果前向传播即可。