基于深度学习的计算机视觉在制造中的质量检验
工业制造业的自动化:
当今制造自动化水平的提高,也要求材料质量检验自动化,几乎不需要人为干预。质量检测自动化的发展趋势是达到人的水平或更高的精度。为了保持竞争力,现代工业公司努力通过自动化实现数量和质量,而不会相互影响。
深度学习质量检验:
为了达到行业标准,制造企业的质量检验员通常在产品制造完成后对产品质量进行检验,这是一项耗费时间的体力劳动,而不合格的产品会造成上游工厂产能、耗材、劳动力和成本的浪费。随着人工智能的现代发展趋势,工业企业希望在生产周期中利用基于深度学习的计算机视觉技术实现材料质量检测的自动化。目的是尽量减少人为干预,同时达到人的水平精度或更高的精度,以及优化工厂生产能力、劳动成本等。深度学习的使用是多种多样的,从自动驾驶汽车中的物体检测到医学成像的疾病检测,深度学习已经证明可以达到人类水平的准确性和更好。
什么是深度学习?
深度学习是研究数据的深度结构化和非结构化表示的领域。当数据量大且复杂时,深度学习是人工智能中提取更好结果的发展趋势。深度学习体系结构由输入层、隐藏层和输出层等神经网络的深层组成。隐藏层用于理解数据的复杂结构。神经网络不需要编程来执行复杂的任务。从GB到数TB的数据被馈送到神经网络架构,以便自己学习。以下示例深度神经网络:
卷积神经网络:
卷积神经网络是一类通常在图像分析中应用的深神经网络。卷积层运用卷积运算将结果传递给下一层。例如,1000×1000像素的图像有100万个特征。如果第一个隐藏层有1000个神经元,那么它在第一个隐藏层之后就会有10亿个特征。训练一个具有十亿个特征的神经网络所需要的计算和记忆是令人望而却步的。卷积运算解决了这一问题,因为它减少了自由特征的数量,使网络更深入,特征更少。与完全连接的层相比,使用卷积层有两个主要优点——参数共享和连接的稀疏性。
卷积神经网络在图像中寻找模式。图像与一个较小的矩阵卷积,这个卷积在图像中寻找模式。前几层可以识别线/角/边等,这些模式被传递到更深的神经网络层来识别更复杂的特征。CNN的这一特性非常擅长于识别图像中的对象。
卷积神经网络(又名ConvNet)就是一系列的层。构建ConvNet架构主要使用三种类型的层:卷积层、池化层和全连接层。这些层是堆叠层,形成一个完整的ConvNet架构:
下图澄清了卷积层的概念:
下图阐明了池化层的概念(Average or Max pooling):
以下是最初的CNN架构之一:
可视化卷积神经网络(CNN):
以下是平面上裂缝的图像:
将两个Conv(一个3X3 filter),ReLU和Max Pooling(2X2)类似于LENET-5架构的层应用于上面的裂缝图像。从下面可以看出,CNN架构专注于裂缝区域的块及其在整个表面的扩散:
案例分析:
问题陈述:
在硬件制造中检测质量差的材料是一种容易出错且耗时的手动过程,并导致误报(将坏的一个检测为好的)。如果在生产线末端检测到有缺陷的部件,则上游人工,消耗品,工厂产能和收入都会减少。另一方面,如果未检测到的不良部件进入最终产品,则会产生客户影响以及市场反应。这可能会对组织的声誉造成无法修复的损害。
摘要:
我们利用深度学习技术对硬件产品进行缺陷自动检测。在我们的硬件制造过程中,可能会出现划痕/裂纹等损坏,使我们的产品不能用于生产线上的下一道工序。我们的深度学习应用程序可以在毫秒内检测到裂纹/划伤等缺陷,具有人类水平的精度,并且可以更好地利用热图解释图像中的缺陷区域
深度学习架构的详细信息:
为了更好地描述事物,我们正在使用下面带有集成芯片的电路板的示例图像:
第一种方法:
我们采用纯计算机视觉方法(非机器学习方法)的组合从原始图像中提取感兴趣区域(ROI)和纯粹的深度学习方法来检测ROI中的缺陷。
为什么在深度学习(DL)之前提取ROI?
在拍摄图像时,相机组件、灯光等都聚焦在电路的整个区域(下面的例子图像)。我们只检查芯片区域是否有缺陷,电路中没有其他区域。我们通过一些实验发现,当神经网络只关注感兴趣的区域而不是整个区域时,深度学习(DL)的准确性会显著提高。
Ø首先使用计算机视觉(非机器学习方法)提取“感兴趣区域(ROI)”。在这里,我们经历了图像上的多个过程,例如灰度缩放,诸如腐蚀,膨胀,闭运算图像等的变换,最终曲线的ROI图像基于用例类型/产品类型等。腐蚀的基本思想就像土壤侵蚀一样 - 它会侵蚀前景物体的边界。膨胀恰好与腐蚀相反 - 它增加了前景物体的大小。通常情况下,在去除噪音等情况下,腐蚀之后是膨胀。开运算只是腐蚀后膨胀的另一个名称。它在消除噪音方面很有用。闭运算与开运算相反,膨胀之后是腐蚀。它具有填充物体内细小空洞,连接邻近物体和平滑边界的作用。 梯度变换是图像膨胀与腐蚀的区别。总的来说,这些步骤有助于在原始图像中查看几乎不可见的裂缝/划痕。参见下图:
Ø其次,使用深度神经网络(基于深度神经网络(CNN)的模型)检测缺陷,使用经过验证的CNN拓扑,如Inception Net(又名Google Net),Res Net,Dense Net:
其他一些需要实验才能找到最佳架构的领域
Ø 数据增强:我们有几千个标记为缺陷的独特图像,几千个标记为好的图像。数据增强对于避免过度拟合训练集至关重要。我们做了X个随机裁剪和Y个旋转(1张原始图像导致X * Y增强图像)。增强后,我们有X * Y千个缺陷图像和X * Y千个好图像。在此背景下参考原始CNN论文之一https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf
Ø 初始化策略对于CNN的拓扑结构:
我们用自己的FC层和sigmoid层(二元分类)替换了最终的连接层,如下图所示:
我们考虑每个CNN拓扑的ImageNet初始化,而不是每层中权重的随机初始化,当我们使用ImageNet初始化而不是随机时,我们的深度学习(DL)精度大大提高。
Ø 损失函数和优化器:
- 交叉熵损失:交叉熵损失或对数损失测量分类模型的性能,该分类模型的输出是0到1之间的概率值。交叉熵损失随着预测概率偏离实际标签而增加。因此,当实际观察标签为1时,预测0.01的概率将是不好的并且导致高损失值。完美模型的对数损失为0
- SGD和Nesterov momentum:SGD或随机梯度下降是一种优化可微分目标函数(损失函数)的迭代方法,它是随机的,因为它从数据中随机抽取样本进行梯度下降更新。momentum是梯度的移动平均值,用来更新网络的权值,帮助梯度向正确的方向加速。Nesterov是最近流行的一种趋势。
第二种方法:
对于第一种方法:在提取感兴趣的区域时,只要产品类型,电路板类型/芯片类型(在我们的抽象示例的情况下),相机设置/方向等发生变化,它就需要重写代码。这是不可扩展的。
解决方案:我们构建了一个端到端的two step DL架构。在第一步中,我们使用DL方法来预测ROI本身,而不是CV方法。我们使用边界框工具手动创建了带标签的数据集,我们训练DL架构来预测ROI。这种技术的一个缺点是标记的数据集必须明确且足够广泛,以包括所有产品类型等(在我们的抽象示例的情况下的电路板类型/芯片类型),以便深度神经网络很好地概括看不见的图像。请参考下图:
ØCNNROI generator损耗函数:
- 我们最初使用基于平方距离的损失函数如下:
在验证集上训练了20个epochs的Resnet50模型后,我们在平均遗漏区域和IOU上实现了以下验证度量:
Ave. missed area = 8.52 * 10–3
Ave. IOU (intersection over union) = 0.7817
我们希望至少在IOU上有所改进
- 我们想出了一个基于区域的损失,请参考下图来了解我们如何使用基本数学来计算 ground truth和预测标签之间的交叉区域。在损失函数中,我们想要惩罚遗漏(missed area)和超出区域(excess area)。理想情况下,我们希望惩罚遗漏区域而不是超出区域:
上面的损失函数是可微分的,因此我们可以对损失函数进行梯度下降优化
ØCNNROI generator增强:我们只是在训练时间和测试时间内为我们预测的ROI增加了5%(左右)边距:
Ø CNN ROI generator的结果:我们使用Resnet50 (ImageNet初始化)拓扑和SGD + Nesterov momentum optimizer with =2,=1在面积为基础的损失如上所述。为多个时代训练Resnet50模型,我们希望尽量减少我们的平均值。错过了区域并最大化我们的平均值。IOU(最好的IOU是'1')。经过20个epochs的训练后,我们在验证集上实现了以下目标,基于区域的损失和增加我们改进了(如上所述)我们关于遗漏区域和IOU的验证度量:
Ave. missed area = 3.65 * 10–3
Ave. IOU (intersection over union) = 0.8577
实验与基准:
实验:
- 总图像数:几千张图片
- 数据拆分:80- 10- 10拆,只使用唯一图像
- 使用的框架:PyTorch和Tensorflow / Keras
- 权重初始化:在ImageNet上进行预训练
- 优化器:SGD,学习率= 0.001,Nesterov with momentum = 0.9
- 损失:交叉熵
- Batch size:12
- epochs总数:24
- 图像形状:224x224x3(除了Inception V3,需要299x299x3)
- 标准:最低验证损失
基准:
我们使用这两种方法的基准测试具有相当的可比性,使用CV + DL(第一)方法的结果比DL + DL(第二)方法稍好一些。我们相信,如果我们能够创建一个大量而明确的带标签的bounding box数据集,我们的DL+DL可能会更好。
在成功完成训练之后,必须找到一个推理解决方案来完成整个端到端解决方案。我们使用Intel OpenVino软件对除CPU外的各种硬件进行优化推理,如FPGA、Intel Movidius等。
推论:
英特尔Open Vino:基于卷积神经网络(CNN),英特尔Open Vino工具包可扩展英特尔硬件的工作负载并最大限度地提高性能:
- - 在边缘启用基于CNN的深度学习推理
- - 支持跨计算机视觉加速器的异构执行 - CPU,GPU,英特尔®Movidius™神经计算棒和FPGA - 使用通用API
- - 通过函数库和预优化内核加快产品上市速度
- - 包括对OpenCV和OpenVX *的优化调用
请参阅Open Vino架构的以下图表:
两步部署:
- 第一步是使用模型优化器将预训练的模型转换为IR :
§ 生成有效的中间表示:如果此主转换工件无效,则推理引擎无法运行。模型优化器的主要职责是生成两个文件以形成中间表示。
§ 生成优化的中间表示:预训练模型包含对训练很重要的层,例如dropout层。这些层在推理期间是无用的,并且可能增加推理时间。在许多情况下,可以从生成的中间表示中自动删除这些层。然而,如果一组层可以作为一种数学运算来表示,因此作为一层,模型优化器会识别出这样的模式然后用一个层替换这些层。结果是一个中间表示,其层数比原始模型少。这减少了推理时间。
IR是描述整个模型的一对文件:
- .xml:描述网络拓扑
- .bin:包含权重和偏差二进制数据
- 第二步是使用推理引擎读取,加载和推断IR文件,使用CPU,GPU或VPU硬件上的通用API
Vino文档:https://software.intel.com/en-us/inference-trained-models-with-intel-dl-deployment-toolkit-beta-2017r3
样本图像的推理基准:
很明显,使用软件堆栈进行优化对于缩短推理时间至关重要。使用OpenVino软件优化,我们看到延迟时间缩短了30到100倍。此外,除英特尔CPU外,我们还推出了其他英特尔硬件加速器,如英特尔Movidius和FPGA。以下是样本图像的一些推理基准:
使用热图可视化我们的CNN:
通常深度神经网络被批评为解释性低,大多数深度学习解决方案在标签分类完成时停止。我们想要解释我们的结果,为什么CNN架构将图像标记为好或坏(我们的案例研究是二元分类),CNN最关注图像中的哪个区域。
基于MIT https://arxiv.org/pdf/1512.04150.pdf的研究,提出了结合全局max池化层的类激活映射来定位类特定的图像区域。
全局平均池化通常起着调节作用,防止训练过程中过度拟合。本研究认为,全局平均池化层的优点不仅仅是简单的作为一个正则化器——稍作调整,网络可以保持其显著的定位能力,直到最后一层。这一调整可以轻易地识别出不同的图像区域的不同类型的任务,甚至是那些网络最初没有被训练的任务。
以下是使用此技术对使用在ImageNet上训练的Resnet-50架构的“平面上的裂缝”图像进行热图解释。正如我们所看到的,热图集中在下面的裂缝区域,尽管架构没有经过这样的图像训练 -
总结与结论:
通过基于深度学习的计算机视觉,我们使用我们的两种方法 - CV + DL和DL + DL,实现了人类水平的准确性。我们不仅使用深度学习进行分类,而且还使用图像本身的热图来解释缺陷区域。
最优模型总是在FPR(假阳性率)和FNR(假阴性率)或精确度与召回率之间进行微调。对于我们的用例,我们成功地使用了针对低FNR(高召回率)优化的模型来自动检测缺陷。我们大幅降低了人工审核率。通过我们的案例研究,我们证明了我们可以通过深度学习实现材料检查的自动化,并降低人的审查率。