关于布匹的缺陷检测的一篇文章,采用的是无监督的方式进行检测,实际上作者在训练模型的过程中只使用正样本,对于有缺陷的样本,只在test过程中使用。
一、训练阶段
先看一下,作者提出的网络结构:
下面,具体解释一下,每个步骤的操作方式:
1、数据预处理
(1)Illumination normalization
采用如下公式:
I' = WLD(I)
(2)Gaussian pyramid downsampling
2、Patch Extraction
这里注意几个问题:
(1)使用的原始图片是没有缺陷的样本,选择patch的方式是随机的
(2)在3个level中所选取的所有的patch大小都是一样的
(3)在3个level中选择patch的时候,每个level的patch只是自己使用,不和其他level中的patch混合
(4)Noise corruption
选择出来patch之后,对其进行噪声污染:
(ps:这里有很多细节问题,论文里没有说明。
(1)每个level的起始输入是什么,是原图还是选择出来的patches,如果是原图,那么patches到原图如何进行反向传播。
(2)3个level所在的网络是3个单独的网络,还是有联系,如果3个网络有联系,那么在每个level中就是原图作为起始输入。
(3)根据后面的做法来看,猜测应该是patch作为网络输入,这样的话,3个level就是3个不同的网络,这样的话,两个level之间的高斯卷积和下采样就不能反向传播,也就失去了意义。)
3、loss
先来说一下,在每个level中的小网络中作者的思路,因为3个网络是相同的,我们只讨论一个就可以了。
如果我们把选取出来的一个patch图片记为I,然后进行Noise corruption,得到图片I2,接下来将I2放入一个FCN网络中得到最终的结果I3,实际上,I3是对patch I的描述。
所以,最后计算的loss是图片I和图片I3之间的误差。
4、Threshold Determination
这个阈值在训练阶段计算得到,但是是在test阶段进行使用。
首先,解释一下公式中涉及到的符号。
i:表示3个level
Np:每个level中的patch总数
xk:一个patch
最终的阈值为:
其中,u:均值,
二、test阶段
1、Image Preprocessing
和训练阶段一样,包括:Illumination normalization和Gaussian pyramid downsampling
2、Patch Extraction
patch的size和训练阶段相同,但是取patch的方式有点不同。这里是用patch连续在整张图片上滑动(在训练阶段,是在图片上随机选取)。那么,一个level上的patch的数量为:
其中,原图的size:[W, H],patch的size:[w, h],步长为:s
3、Residual Map Construction
4、Defect Segmentation
将Residual Map中的v(x)和对应的阈值T进行比较,如果v(x)小于阈值,结果取为0,否则为1。那么,最终重建的图片的像素就变成了取值为0和1的mask。
5、Result Synthesization
为了提高模型的健壮性和识别的准确率,需要把3个level得到的结果进行融合。
融合的方法:(1)首先,把所有的residual map resize到原图大小(也就是说,把level2和level3的结果resize到level的大小)(2)对相邻两个level的图像按照像素进行and操作(3)把所有的and操作的结果得到进行or操作。
test阶段示意图: