全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 数据分析与数据挖掘
836 0
2020-10-22
使用基于深度学习的计算机视觉进行制造中的质量检查
1.简介
工业制造自动化:
如今,制造业自动化水平的提高也要求在几乎没有人为干预的情况下实现材料质量检查的自动化。趋势是通过自动化在质量检查中达到人员水平的准确性或更高。为了保持竞争力,现代工业公司力求通过自动化实现数量和质量的同时,又不至于互相损害。
用于质量检查的深度学习:
为了满足行业标准,制造公司的质量检查员通常在产品制造后检查产品质量,这是一项耗时的人工工作,而拒收产品会浪费上游工厂的产能,耗材,人工和成本。随着人工智能的现代趋势,工业公司希望在生产周期本身中使用基于深度学习的计算机视觉技术来自动执行材料质量检查。目标是最大程度地减少人为干预,同时达到或超过人为水平的精度,并优化工厂产能,人工成本等。深度学习的用途多种多样,从无人驾驶汽车中的对象检测到具有医学成像的疾病检测深度学习已证明可以达到人类水平的准确性和更高的水平。
什么是深度学习?
深度学习是学习深度结构化和非结构化数据表示的领域。深度学习是AI在日益增长的趋势下发展的趋势,即在数据量大而复杂时,抽象出更好的结果。深度学习架构由神经网络的深层组成,例如输入层,隐藏层和输出层。隐藏层用于了解数据的复杂结构。无需对神经网络进行编程即可执行复杂的任务。千兆字节到TB的数据被馈送到神经网络体系结构以自行学习。下面的示例深度神经网络
卷积神经网络:
卷积神经网络是一类通常用于图像分析的深度神经网络。卷积层将卷积运算应用于输入,将结果传递到下一层。例如,1000 x 1000像素的图像具有100万个特征。如果第一个隐藏层具有1000个神经元,则它最终将在第一个隐藏层之后具有10亿个特征。具有这么多的功能,很难防止神经网络过度拟合较少的数据。训练具有十亿个特征的神经网络的计算和内存要求令人望而却步。卷积操作为该问题提供了解决方案,因为它减少了免费功能的数量,从而通过更少的功能可以使网络更深入。
卷积神经网络在图像中寻找图案。用较小的矩阵对图像进行卷积,并且这种卷积查找图像中的图案。前几层可以识别线/角/边缘等,并将这些模式向下传递到更深的神经网络层以识别更复杂的特征。CNN的此属性非常擅长识别图像中的对象。
卷积神经网络(又名ConvNet)不过是一系列序列。三种主要类型的层用于构建ConvNet架构:卷积层,池化层和完全连接层。这些层是堆叠的层,以形成完整的ConvNet体系结构:   
图片来源:http : //cs231n.github.io/convolutional-networks/
下图阐明了卷积层的概念:
下图阐明了池化层(平均池或最大池)的概念:
以下是原始的CNN架构之一:
可视化CNN:
以下是平整表面上裂缝的图像:
类似于LENET-5架构的两层Conv(一个3X3滤镜),ReLU和Max Pooling(2X2)均应用于上述裂缝图像。从下面可以看出,CNN架构专注于裂缝区域的块及其在整个表面的扩散:
2.案例研究-简介
为了维护我们工作的机密性,我们在下面提出一个抽象用例:
问题陈述:
在硬件制造中检测劣质材料是容易出错且耗时的手动过程,并且会导致误报(将劣质和劣质一起检测)。如果在生产线末端检测到有故障的组件/零件,则上游劳动力,消耗品,工厂产能以及收入都会减少。另一方面,如果未检测到的不良零件进入最终产品,将对客户产生影响,并引起市场反应。这可能会导致对组织声誉的不可挽回的损害。
总结:
我们使用深度学习对硬件产品进行自动缺陷检测。在我们的硬件制造过程中,可能会造成划痕/裂纹等损坏,这会使我们的产品无法用于生产线的后续过程。我们的深度学习应用程序能够以毫秒级的准确度检测出诸如裂纹/刮擦之类的缺陷,并且具有更好的人类水平,并且可以通过热图来解释图像中的缺陷区域。
我们的深度学习架构的详细信息:
为了更好地描述情况,我们使用下面带有集成芯片的电路板示例图像:
3.案例研究:我们的第一种方法:
我们采用纯计算机视觉方法(非机器学习方法)从原始图像中提取感兴趣区域(ROI)和纯深度学习方法的组合,以检测ROI中的缺陷。
为什么要在DL之前提取ROI?
在捕获图像时,相机组件,照明等都聚焦在电路的整个区域上(以下示例图像)。我们仅检查芯片区域是否有缺陷,而没有检查电路中的其他区域。我们通过一些实验发现,当神经网络仅关注目标区域而不是整个区域时,DL准确性会大大提高。
第一使用计算机视觉(非机器学习方法)提取“感兴趣的区域(ROI)”。在这里,我们对图像进行了多个处理,例如灰度缩放,转换(例如腐蚀,扩张,关闭图像等),最终根据用例类型/产品类型等从图像中得出了ROI。侵蚀的基本思想就像土壤侵蚀一样-它侵蚀了前景物体的边界。扩张与侵蚀恰好相反-会增加前景物体的尺寸。通常,在消除噪音的情况下,腐蚀后会膨胀。开放只是侵蚀然后扩张的另一个名称。这对消除噪音很有用。关闭是打开,膨胀然后侵蚀的反向。在关闭前景对象内部的小孔或对象上的小黑点时很有用。梯度变换是图像的扩张和腐蚀之间的差异。总体而言,这些步骤有助于在原始图像中打开几乎看不见的裂缝/划痕。请参考下图:
其次,使用深层神经网络(基于深层神经网络(CNN)的模型)并使用经过验证的CNN拓扑(如Inception Net(aka 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-convolu ...
初始化策略 对美国有线电视新闻网的拓扑结构:  
我们将最终的连接层替换为我们自己的FC层和S形层(二进制分类),如下图所示:
我们不是为每个CNN拓扑考虑了ImageNet初始化中每一层的权重的随机初始化,而是当我们使用ImageNet初始化时,与随机相比,DL准确性已大大提高。
损失函数 和优化器:
交叉熵损失:交叉熵损失或对数损失用于衡量分类模型的性能,该模型的输出为0到1之间的概率值。随着预测概率与实际标签的偏离,交叉熵损失会增加。因此,在实际观察标签为1时预测0.01的概率将很糟糕,并导致较高的损失值。理想模型的对数损失为0
SGD 和Nesterov动量:SGD或随机梯度下降法是一种优化可微目标函数(损失函数)的迭代方法,它是随机的,因为它需要从数据中抽取随机样本来进行梯度下降更新。动量是梯度的移动平均值,用于更新网络的权重,并有助于在正确方向上加速梯度。内斯特罗夫(Nesterov)是最近越来越流行的动力的一个版本。   
4.案例研究:我们的第二种方法
对第一种方法的批评:提取感兴趣的区域时,只要产品类型,电路板类型/芯片类型(在我们的抽象示例中),相机设置/方向等发生变化,就需要重写代码。这是不可扩展的。
解决方案: 我们构建了一个后端两步DL体系结构。在第一步中,我们使用DL方法代替CV方法来预测ROI本身。我们使用边界框工具手动创建了标记的数据集,并让我们训练DL体系结构来预测ROI。这种技术的一个缺点是,标记的数据集必须足够明确和广泛,以包括所有产品类型等(在我们的抽象示例中为电路板类型/芯片类型),以使深度神经网络能够很好地概括看不见的图像。请参考下图:
4.1。CNN ROI生成器损失功能:
·我们最初使用基于平方距离的损失函数,如下所示:
训练了20个时期的Resnet50模型后,我们在验证集上获得了以下验证指标(平均错过区域和IOU):
平均值错过区域= 8.52 * 10-3
平均欠条(工会的交集)= 0.7817
至少我们要改善借条
·我们提出了一个基于面积的损失,请参考下图,以了解我们如何使用基本数学计算地面真相与预测标签之间的交集面积。在损失函数中,我们要对错过的区域和多余的区域进行惩罚。理想情况下,我们希望对错过的区域而不是多余的区域进行更多的处罚:  
上面的损失函数是可微的,因此我们可以对损失函数进行梯度下降优化
4.2。CNN ROI生成器的增强:我们在预测的ROI上,只需在训练时间和测试时间中增加5%的边距(左右)即可:
4.3。CNN ROI生成器结果: 如上所述,我们在基于面积的损失中使用了Resnet50(ImageNet初始化)拓扑和SGD + Nesterov动量优化器,其惩罚项“ lamda missed” = 2和惩罚项“ lamda over” = 1 。在针对多个时期训练了Resnet50模型之后,我们希望将平均水平最小化。错过的区域并最大化平均。IOU(最佳IOU为“ 1”)。经过20个纪元的训练,我们在验证集上达到了以下目标:  
平均值错过区域= 3.65 * 10-3
平均欠条(工会的交集)= 0.8577
通过基于面积的丢失和增加(如上所述),我们改进了针对缺失面积和IOU的验证指标
4.4。实验与基准:
实验:
图像总数:几千个图像
数据分割:80到10到10分割,仅使用唯一的图像
使用的框架:PyTorch和Tensorflow / Keras
权重初始化:在ImageNet上进行预训练
优化程序:学习率= 0.001的SGD,使用动量= 0.9的Nesterov
损失:交叉熵
批次大小:12
总数:24
图像形状:224x224x3(Inception V3除外,它需要299x299x3)
标准:最低的验证损失
基准
我们对这两种方法的基准都具有相当的可比性,CV + DL(第一方法)的结果比DL + DL(第二)方法的效果略好。我们相信,如果我们可以创建一个广泛且显式的带标记的边界框数据集,则DL + DL可能会更好。
成功完成培训后,必须找到一个推理解决方案以完成整个端到端解决方案。我们使用Intel OpenVino软件优化了除CPU,FPGA,Intel Movidius等CPU以外的其他类型硬件中的推理。
推理
英特尔Open Vino:英特尔Open Vino工具包基于卷积神经网络(CNN),将工作负载扩展到整个英特尔硬件上,并最大限度地提高了性能:
在边缘启用基于CNN的深度学习推理
使用通用API支持跨计算机视觉加速器(CPU,GPU,英特尔?Movidius?神经计算棒和FPGA)的异构执行
通过功能库和预先优化的内核加快上市时间
包括针对OpenCV和OpenVX *的优化调用
请参考以下有关Open Vino体系结构的图:
?
5.两步部署
5.1。第一步是使用Model Optimizer将预先训练的模型转换为中间表示(IR):
产生有效的中间表示形式:如果此主转换工件无效,则推理引擎将无法运行。模型优化器的主要职责是产生两个文件以形成中间表示。
产生优化的中间表示: 预先训练的模型包含对于训练很重要的图层,例如辍学图层。这些层在推理期间无用,并且可能会增加推理时间。在许多情况下,这些层可以自动从生成的中间表示中删除。但是,如果一组图层可以表示为一个数学运算,因此可以表示为单个图层,则模型优化器会识别此类模式,并用一个图层替换这些图层。结果是中间表示层的层数少于原始模型。这减少了推理时间。
IR是一对描述整个模型的文件:
xml:描述网络拓扑
bin:包含权重并偏置二进制数据
5.2。第二步是使用推理引擎,通过跨CPU,GPU或VPU硬件的通用API来读取,加载和推断IR文件。  
打开Vino文档:https://software.intel.com/zh-cn/inference-trained-models-with-inte ...
5.3。样本图片上的推理基准:
显然,使用软件堆栈进行优化对于减少推理时间至关重要。使用OpenVino软件优化,可以将延迟时间提高30到100倍。此外,除了Intel CPU外,我们还试验了其他Intel硬件加速器,例如Intel Movidius和FPGA。
6.使用热图可视化CNN
通常,人们批评深度神经网络的解释性差,并且大多数深度学习解决方案都在标签分类完成时停止。我们想解释一下我们的结果,为什么CNN架构将图像标记为好还是坏(我们的案例研究为二进制分类),即CNN最关注图像的哪个区域。
在此基础上研究在MIT https://开头arxiv.org/pdf/1512.04150.pdf,在与全球最大汇聚层组合类激活图中已经提出了本地化类特定的图像区域。  
全局平均池通常充当调节器,以防止在训练期间过度拟合。这项研究确定,全局平均池化层的优势已经超越了简单地充当正则化器的范围-只需稍作调整,网络就可以保留其卓越的定位能力,直到最后一层。通过这种调整,可以轻松地在一次正向传递中识别出可区分的图像区域,以完成各种各样的任务,甚至包括那些最初不是为网络训练的任务。
以下是在ImageNet上使用Resnet-50架构使用此技术对“平面上的裂缝”图像进行热图解释的方法。如我们所见,尽管该架构未针对此类图像进行训练,但热图仍集中在下方的裂缝区域上–
7。总结与结论
通过基于深度学习的计算机视觉,我们使用CV + DL和DL + DL这两种方法(在本博客的前面进行了讨论)都达到了人类水平的准确性,并且达到了更好的水平。我们的解决方案是独特的-我们不仅使用深度学习进行分类,而且还使用图像本身上的热图来解释缺陷区域。
人为因素不能完全消除,但我们可以大大减少人为干预。最佳模型始终是FPR(误报率??)和FNR(误报率??)或Precision vs Recall之间的最佳选择。对于我们的用例,我们使用针对低FNR(高召回率)优化的模型成功地自动进行了缺陷检测。我们大幅降低了人工审核的速度。通过我们的案例研究,我们证明了我们可以通过深度学习使材料检查自动化并降低人工检查的速度。
1
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群