1、项目开发背景
硬件环境:RTX2080 Ti(11GB)
数据集素材:提供的PCB板数据集
2、项目开发设计思路
基于卷积神经网络强大的表示能力有时可以很好地重建异常。为了解决这个问题,我们利用正常图像和异常图像结构上的差异,提出了利用结构特征和图像特征的结合来重建图像,该方法考虑了正常模式的多样性,同时降低了而卷积神经网的表示能力。我们使用存储模块记录正常数据的结构特征,提出了特征紧凑性和分离性损失来训练存储模块,提高了存储模块和从正常数据中深度学习特征的判别能力。
3、模型结构
我们的模型主要由三部分组成:编码器、存储模块和解码器。
编码器存在两个,其中一个编码器是对正常输入图像提取特征称为图像编码器,另一个编码器是对正常输入图像的边缘提取特征称为边缘编码器,其中边缘编码器的特征作为查询映射,将送入到存储模块中查询对应的存储项目,两个编码器和解码器均采用Unet模型。边缘结构的提取采用scikit-image库中函数进行,而不是opencv库。
存储模块记录了正常图像的结构特征,它可以保存和加载信息,并使用结构特征作为查询来检索相应的特征,通过使用存储模块中的项目组合来重建图像,而不是直接使用图像编码器中的图像特征,用于减小卷积神经网络的表示能力。
4、缺陷检测和定位
计算重建损失采用MSE,然后采用OTSU进行一次阈值分割,再进行膨胀腐蚀中值滤波的操作。
4、总结
实验对于异常图像结构上存在明显差异的识别具有较好的效果,特别是PCB6,整个实验测试下来,发现模型会把PCB板上比较亮的地方识别成缺陷,所以PCB板7的识别效果最差,因为他的板子特点是存在很多亮区域。实验也试过取HSV中某个通道进行实验,但是效果没有明显改变。
发现深度学习这个方法对于这个PCB板子缺陷的识别只是相当于一种图像预处理的方法,可以消除很多干扰区域,但是要得到最终的缺陷,最后的后处理是非常重要的,这个应该是一个比较重要的方向,但是实验的时候忽略了这个方向,以为深度学习就可以直接得到比较好的缺陷识别,事实并非如此。感觉缺陷检测这块,深度学习的效果大家都大差不差,重要的是如何在深度学习之后再进行后处理识别缺陷才是最重要的。在线上大概看了一下第一名的方法,他就做了深度学习之后继续延申了后处理。很遗憾,到最后要上交成果物的时候才意识到这个问题,这是个很有意思的挑战,希望可以有更深入的研究。