"Deformable Patterned Fabric Defect Detection With Fisher Criterion-Based Deep Learning" 学习笔记

这篇文章提出了一种比较新颖的利用自编码网络进行缺陷检测的方案。作者改进了SDA,提出了Fisher Criterion-Based SDA(FCSDA)。SDA是Stacked Denoising Autoencoders的缩写。其创新点有两个。第一,采用Fisher Criterion-Based SDA即(文中所说的FCSDA)进行自编码学习,检测缺陷;第二,训练另一个FCSDA来尽可能消除缺陷,得到没有缺陷的背景,与缺陷样本进行比较,分割出缺陷。该方法实现了在缺陷样本较为匮乏的情况下进行缺陷检测和缺陷分割。

预备知识——Stacked Denoising Autoencoders(SDA)

上图是一个自编码网络,具有一个隐层。自编码网络的目的是采取无监督学习的方式,使网络学会提取出输入数据的本质特征,实现降维,可以用如下公式来表示。

其中\(x\)是输入向量,\(z\)是降维后的隐层特征,\(y\)是解码后的数据。理想的自编码网络,\(x=y\)

而SDA的不同之处在于,网络的输入向量\(\widehat{x}\)是在\(x\)的基础上增加了噪声的。而标记数据仍然为未加噪声的数据\(x\)。也就是说,我们期望这一网络能够提取带有噪声的数据\(\widehat{x}\)的最本质的特征(降维),并且可以根据这些特征,消除原图像上存在的噪声。论文中的噪声不是高斯噪声,而是使每个数据点以一定的概率置0。类似于dropout反向传播按照一定概率使误差传递为0。SDA的编码和解码过程的公式如下。

 

Fisher Criterion-Based SDA

作者对SDA的改进在于改进了损失函数。原本SDA的损失函数如下式所示。这一损失函数代表了重建后的数据与实际数据的平均距离的大小。优化目标即为最小化平均距离。

改进后的损失函数如下。

即在原损失函数的基础上增加了一项。其中\(J_{int ra}\)表征类内误差,\(J_{int er}\)表征类间误差。他们的计算公式如下。

可以看到,这里对类内误差的定义是与所有样本的隐层参数\(h\)与样本的平均隐层参数的距离成正比的。而类间误差的定义也类似。这样一来,通过优化,网络会在降维的同时,尽可能的减小类内误差,增大类间误差。

缺陷检测和定位

论文中还实现了缺陷的分割。不同于利用全卷积神经网络的语义分割,这里的缺陷分割更加类似于一种模板匹配方法,而模板是由FCSDA生成的。算法流程如下图所示。可以看到,缺陷定位这一步骤,是由FCSDA1的生成图像与FCSDA2的生成图像(也叫重建图像)相减,在经过阈值处理和形态学处理得来的。那么这一模型的关键就在于这两个FCSDA。为何相减之后可以消除无缺陷的背景,留下缺陷部分呢?

文中提到,FCSDA2的任务是尽可能消除缺陷,留下正样本背景。因此,在训练FCSDA2的时候,只采用正样品进行训练。而在SDA中,训练样本是要加入随机噪声的。我们可以这么理解,这些随机噪声就是人为加上去的缺陷,而FCSDA2的输入是这些带有“缺陷”的样本图像,输出的则是消除这些“缺陷”后的图像。而FCSDA1则不一样,它是由正样本和负样本一起训练出来的。也就是说,对于缺陷样本,它一样可以重建出缺陷。那么,把这两个重建结果相减,就能够消除没有缺陷的背景,留下缺陷。下图是论文中给出的中间过程和结果。

发表评论

电子邮件地址不会被公开。 必填项已用*标注