OCR-GAN【异常检测:Reconstruction-based】

前言

经papers with code网站统计,论文代码在MVTec数据集上运行结果排名为第6(截止博文发出时间)。

背景

思想:基于重建的方法,通过不同频率图像相减提取重建丢失的及增加的信息,Unet网络进一步提取特征信息,中间配注意力机制做好图像间信息交互及通道自适应选择,再经普通的卷积网络构建损失函数以更新网络及设置评价分数。模型是通过重建将图片转成不同维度下的特征图,又通过Unet和注意力机制将不同特征图信息混合充分。

论文中提到的频域/频带等只不过是同一图片经FD模块处理后的不同角度观察到的图片。经模块中I_{G}部分处理的程度越深,也就是由高频到低频的过程,纹理信息丢失的越多,通过图像相减将丢失的纹理信息保存下来,也就是文中提到的不同频率的图片。频率越高,该图包含的纹理信息越多,越低,包含的空间语义信息越多。FD模块在下面会做介绍。

模型原理(源码)

OCR-GAN【异常检测:Reconstruction-based】_第1张图片

源码只复现了将图片FD成2张图片的思路,上图给的是扩充思路,FD成n张图片,注意甄别一下。(ps:看代码时只找到FD后的2张图片,呜呜呜)。

下面做理解,标题分别对应模型的三个大块(图中大写的三组字母),每个块对应的源码路径也理出。

FD

train_all.py-->def train()-->data-->train_ds-->def FD(img)

将输入模型的图片尺寸重设为(256,256),得到I_{}。经高斯变换,抛弃偶数行,偶数列后实现下采样,再使每个像素旁增加0值行,0值列,经高斯变换图片重回尺寸(256,256)实现上采样,得到I_{G1}I_{}I_{G1}做减法,得到I_{2}I_{1}I_{},这样I_{1}I_{2}一起输入到下一模块。

CS

train_all.py-->def train()-->model-->ocr_gan_aug-->self.netg-->UnetGenerator_CS-->unet_block

Unet网络的构建(太amzing了!)

因为是仿效的结构,所以卷积块的设置等不全是unet的样式。

主程序(UnetGenerator_CS):见Unet网络结构图如上,第一行是第一个unet块1,五行共五个unet块(1~5)。程序的构建是将unet块按图从下到上开始的,最后用self.model收尾。

子程序(unet_block):见forward,模型运行,由unet_block里的参数submodel=unet,倒着将主程序里的块运行,恢复成结构图运行顺序。(分两步,因为每次运行到submodel时会跳到下一个unet块,这样就会使每个unet块只运行一部分,当运行到最后的unet块时,再连续回跳直到第一个unet块。第一步:五个结构块经两次卷积生成五个特征层块,第二步:跳到第四次时遇到结构图中最下面的块5,经一次卷积后特征层块返回块4,与块4处的特征层块融合,经一次卷积后返回块3,重复到块1。得到最终特征图)。

CS块

全图平均池化后,图片的一个特征层变成一个值,再经一次全连接降通道数,一次全连接恢复通道数,加入softmax()函数为每个像素赋概率,相乘,完成模块功能。

CS块负责频率图间交互(这部分是使一个特征层的像素值×另一个特征层的概率值 ),并加入注意力机制,对不同通道做自适应选择。

总结:经CS处理,两个特征图相加形成\, \hat{I}

D

该部分源码路径与上面部分靠的很近,根据图中结构也可知,是几个卷积块罢了。

作为鉴别器,产出损失函数,帮助模型更好的区分异常图像,因为GAN网络并不能保证异常图像不能完全重建完成。

损失函数

Content Loss即nn.L1Loss、Adversarial Loss即nn.BCELosspytorch损失函数(nn.L1Loss、nn.SmoothL1Loss、nn.MSELoss 、nn.CrossEntropyLoss、nn.NLLLoss)_silentkunden的博客-CSDN博客_l1loss

Latent Loss即L2Loss

一文理清L1 loss、L2 loss、smooth L1 loss原理与区别_风中一匹狼v的博客-CSDN博客_l1loss和l2loss的区别

实验

对比实验:分别在MVTec、DGAM、KolektorSDD数据集上评估不同模型运行结果。

消融实验:FD出图片的多少、FD块、CS块、最后数据增强的不同使用类型与否等作为前提设置条件。

补充

论文提及到的CutPast(自监督的/基于分类的)

参考

源码涉及的代码库段:常用的库代码段pytorch_based【tips】_太简单了的博客-CSDN博客

Unet网络:Unet【基础网络】_太简单了的博客-CSDN博客

你可能感兴趣的:(异常检测&论文理解,深度学习,GAN,pytorch,计算机视觉)