1.概述
参考论文:Surface defect classification of steels with a new semi-supervised learning method
上述论文的基本思路是:
1.构建一个cae模型,该模型的结构如下图所示。
其最主要的特点在于在encoder层的最后输出处有一个passthrough ayer,该层通过将相邻的特征堆叠到不同的特征图通道中,passthrough ayer将浅卷积层输出的大小为4的特征图转换为大小为2的4个不同的特征图。 然后,passthrough ayer将这些浅层卷积层输出的特征图与深层卷积层输出的这些特征图连接起来,如图4中的紫色矩形所示。passthrough ayer的原理示意图如下所示。
通过这个cae模型的encoder训练来对图片的特征进行自动提取。而这个encoder将在之后的SGAN中最为分类器中的一部分
2.SGAN
一种半监督的生成对抗网络模型。该模型的discriminator是之前cae中的encoder接上全连接层构建的,其输出为N+1,N为待分类样品数,1是需要判断输入的图片是否为generator生成的。在SGAN中,discriminator和generator分开进行训练。在discriminator的训练过程中,作者并没有将后面的decoder层删去,而是进行保留用以计算损失,从而对encoder进行更新(这里不太懂作者的思路,保留的话那么模型的损失就由两部分构成,一部分是discriminator的分类损失,另一部分是cae的pix2pix损失),给出的对应损失函数为:
至于generator并没有太特别的地方,通过从0-1正太分布中采样尺寸为14*14的数据作为输入生成图片。
2.复现要点
1.构建cae模型,并且该模型有一个特殊的Passthrough layer
2.构建一个SGAN,且其中的discriminator是由cae的encoder作为特征提取器,外接一个N+1的全连接层进行分类,但是需要注意的是,该discriminator的训练使用的损失包括分类损失以及cae本身的损失。(之前以为损失只是分类损失,因此在训练discriminator时将encoder层冻结了,没有进行参数更行。在代码中的实现也是如此,需要改进)
3.代码实现
github连接
https://github.com/TangDL/defects_detection
该链接中还有另外一篇论文Surface Defect Classifcation in Real-Time Using Convolutional Neural Networks中SurfNet的代码实现