论文阅读笔记《Unsupervised fabric defect detection based on a deep convolutional GAN》
核心思想
本文提出一种基于DCGAN的无监督纺织物缺陷检测算法,本文还是延续了利用DCGAN根据缺陷图像重构无缺陷的图像样本,然后再寻找重构图像和缺陷图像之间的差别,差别超过阈值的判定为缺陷像素,但在实现的细节上还是有很多的创新,本文的训练和测试流程如下图所示
图(a)展示了训练过程,首先是对DCGAN网络进行训练,生成器
G
G
G输入的是一维的噪声向量,输出的是32*32大小的图块
x
′
x'
x′,辨别器输入的是真实采样的图块
x
x
x或者合成图块
x
′
x'
x′,输出是该图块属于真实采样图块的概率。然后在此基础上增加了一个反相器(inventer)
E
E
E,其作用类似于编码器,输入真实采样的图块输出一维的特征向量,这个过程于生成器
G
G
G是相反的。将
E
E
E输出的向量输入到训练好的生成器
G
G
G中,就可以得到重构图像
x
r
x_r
xr,并利用重构损失对反相器
E
E
E进行训练。整个训练过程只使用无缺陷的正常样本,因此属于无监督训练。
图(b)展示了测试过程,首先从真实图像
f
f
f(可能带有缺陷)中采样(裁剪)的图块
x
x
x输入到反相器
E
E
E中,得到一维特征向量,然后利用
G
G
G生成重构图块
x
r
x_r
xr,一方面将重构的图块拼接起来得到重构图像
f
′
f'
f′,另一方面将每个重构图块
x
r
x_r
xr与
x
x
x做差得到图块误差
e
r
r
i
err_i
erri,并将图块误差拼接起来得到误差图
f
e
r
r
f_{err}
ferr。重构图像
f
′
f'
f′通常很难保持与原图相同的灰度幅值,因此要采用一种规范化的操作,如下式
将得到的规范化重构图像
f
r
f_r
fr与原始图像
f
f
f做差,取绝对值,并与先前得到的误差图做逐元素相乘的操作得到最终的残差图
r
r
r
采样的图块
x
x
x还要输入到区分器
D
D
D中,输出该图块属于真实图像的概率。因为在训练过程中区分器只见过无缺陷的图块样本,因此在测试时如果把有缺陷的样本输入到区分器中,虽然他也是来自真实图像,但区分器还是会认为它可能是来自合成图像,因为这个图块和之间训练时见过的图块并不一样。此时,区分器的作用从区分图块是否属于真实图像,变成区分图块是否属于正常样本。将每个图块的概率值拼接起来就得到一个概率图
l
l
l
对概率图
l
l
l进行插值处理恢复到原始图像的尺寸(因为每个图块32 * 32只输出一个概率值,因此概率图的尺寸应该是原图的1/32).
然后就是将
D
D
D输出的概率图和上文得到的残差图
r
r
r进行融合,融合方式也很简单,先用1减去概率图得到每个像素属于缺陷的概率(原本的概率表示的是每个像素属于正常区域的概率),然后再与残差图
r
r
r做逐元素相乘
最后利用阈值对融合图
v
v
v进行分割,得到二元的缺陷区域分割图
式中
v
0
v_0
v0表示从无缺陷的正常样本中得到的融合图,
t
t
t是一个调整系数。
实现过程
网络结构
图中a,b,c分别表示生成器
G
G
G,反相器
E
E
E和区分器
D
D
D三个网络的结构
具体网络结构参数如下表所示
损失函数
对于GAN的训练采用常规的GAN损失函数
对于反相器
E
E
E的训练采用L2重构损失函数
训练策略
本文的训练过程分为三个阶段,首先对区分器
D
D
D进行训练,作者称之为"slight"训练阶段,这个阶段学习率设置的较低,且训练到生成器对于真实样本输出的概率值超过一定阈值时就停止训练。为什么要这样做呢?作者发现采用常规的训练方式,随着训练进行生成器
G
G
G输出的样本越来越接近真实样本,这就要求判别器
D
D
D区分能力特别强,这会使得判别器对于正常样本的变化十分敏感,没法起到区分正常样本和缺陷样本的作用(即使正常样本有着少量变化也可能被判定为缺陷)。而在训练的早期,生成器
G
G
G的能力还没有那么强,辨别器的区分效果要更好,并且为了使训练更具鲁棒性,将生成器
G
G
G输出的样本增加了高斯噪声,再输入到区分器
D
D
D中进行分辨。
然后是对生成器
G
G
G进行完整"full"的训练,这一阶段的训练是在上一阶段的基础上继续训练,学习率设置的更高。值得注意的是这两个阶段的训练,都是采用GAN损失函数同时对生成器和区分器进行训练的,但在测试时,区分器
D
D
D使用"slight"阶段得到的参数,而生成器
G
G
G采用"full"阶段得到的参数。
最后,固定生成器的参数,利用L2重构损失函数对反相器
E
E
E进行训练。
创新点
- 把图像划分成若干个图块,将图像级的重构分解为图块级的重构,并且利用规范化和误差图对重构图像进行优化
- 将生成器,区分器和反相器的训练分隔为三个阶段,使得每个子模块都在自己最适合的条件下进行训练
算法评价
本文虽然还是采用的图像恢复+计算残差的缺陷检测思路,但在实现方面还是有许多新的想法。之前的重构方法通常是在卷积自动编码器CAE的基础上,再增加区分器的方式,而这一方式存在的问题就是会倾向于复制输入样本,无法起到恢复缺陷的效果。本文则是把编码和解码两个阶段拆分开来训练了,因为生成器能够从一组噪声向量中进行图像恢复,因此不会过度依赖反相器生成的特征向量。这个方法有一个基础假设就是图像的各个图块之间具有广泛的相似性,就是正常区域的图像特征非常相似,而无论缺陷图像生成的特征向量是何种形式,生成器都能将其恢复为正常区域的图像。但当图像背景变化比较复杂时,这种方法可能就失去了使用的前提。
如果大家对于深度学习与计算机视觉领域感兴趣,希望获得更多的知识分享与最新的论文解读,欢迎关注我的个人公众号“深视”。