精华内容
下载资源
问答
  • 随着机器学习的发展,对于工业产品缺陷检测,深度网络模型检测缺陷的准确率远远高于传统图像处理算法。现在一般的做法是将传统图像技术作为预处理,或者将传统提取特征与网络深度特征相结合进一步提高准确率。 ...

    随着机器学习的发展,对于工业产品的缺陷检测,深度网络模型检测缺陷的准确率远远高于传统图像处理算法。现在一般的做法是将传统图像技术作为预处理,或者将传统提取特征与网络深度特征相结合进一步提高准确率。

    今天整理以前资料,突然看到几年前初识图像处理时做的小东西,现在看简直弱爆了,用图像处理基本操作实现工业产品缺陷检测。以此记录下初心,作为第一篇博客。(当时比较水,请勿吐槽(_))

    1.屏幕坏点

    屏幕坏点的检测种类不同,最简单有黑底白点检测和白底黑点检测。对于白色坏点,先采取形态学基本运算膨胀,并通过调整内核尺寸的大小,来改变白点膨胀的程度。然后调用寻找轮廓函数,统计坏点的个数。对于黑色坏点,先采取腐蚀运算,使黑色坏点的面积变大,同样调用寻找轮廓函数统计坏点个数。对于坏点的位置,计算轮廓的内接矩形,寻找中心点即可。

    2.瓷砖裂纹

    一般瓷砖的缺陷也分为两种,一种为擦痕,近似白色,另一种为裂纹,颜色较深。对于白色擦痕,可以首先进行膨胀,使白色擦痕变得明显些,然后进行二值化,并通过滑动条控制阈值和二值化方式,之后进行中值滤波去噪点,再经过腐蚀之后的图片,用Canny进行边缘检测,通过寻找并绘制轮廓,即可将白色擦痕用黑色线条圈出。

    对于黑色裂纹,如果有标准瓷砖花纹,将标准图和缺陷图同时进行腐蚀,使黑色裂纹变得明显些,然后二值化,中值滤波之后进行膨胀,同时对两张图进行Canny边缘检测,接着对标准图进行寻找轮廓,并将各个轮廓的面积和长度存到二维点集中。然后对缺陷图寻找轮廓,通过循环比对标准图轮廓的特征,即可用黑色线条绘制出裂纹的轮廓。
    在这里插入图片描述

    3.PCB检测

    由于PCB的复杂性,可以分类处理电路板块。对于元件的焊接位置,如贴焊的小芯片阵,可以采取模板匹配的方式,循环检测出与模板匹配度最高的正确芯片焊接处,设定相似度阈值,把不正确的地方用红框标注出来。

    对于元件的数量检测,例如大芯片和电容,可以先采取图像预处理,然后边缘检测等寻找元件面积,长度等其他特征,并设定参数,统计元件的数量。

    对于焊接不当,多锡,缺锡的情况,基于其亮度对比,引脚特征等因素,用图像预处理,二值化,形态学基本运算等,并结合边缘检测后的轮廓特征,设定参数,将缺陷之处标识出来。

    总结

    由于都是基本操作,每个完整的代码就不贴了,由于简单,结果图都挺不错的,贴几个常用的函数吧,当时还是用的Opencv C++:

    getStructuringElement(MORPH_RECT,Size(200,200))#返回指定形状和尺寸的结构元素
    dilate(src,src,element);#膨胀
    erode(dst,dst,element);#腐蚀
    findContours(mid,contours,hierarchy,CV_RETR_CCOMP,CV_CHAIN_APPROX_SIMPLE);#寻找轮廓
    threshold(gray,tmp,thresholdvalue,255,thresholdtype);#二值化
    medianBlur(tmp,dst,7);#中值滤波
    Canny(dst1,canny_output1,150,300,3);#边缘检测
    m=contourArea(contours[i]);#计算轮廓面积
    k=arcLength(contours[i],true);#计算轮廓长度
    drawContours(src, contours, j, color, 2, 8, hierarchy, 0, Point());#绘出轮廓
    
    展开全文
  • 本文总结了机器学习方法在表面缺陷检测中的研究现状,表面缺陷检测工业产品质量检测的关键部分。首先,根据表面特征的用途,从纹理特征、颜色特征、形状特征三个方面总结了传统机器视觉表面缺陷检测方法在工业产品...

    原文链接:https://www.mdpi.com/2076-3417/11/16/7657

    摘要

    1. 简介

    2. 用于表面缺陷检测的传统基于特征的机器视觉算法

     2.1. 基于纹理特征的方法

     2.2.基于颜色特征的方法

    2.2.1.颜色直方图

    2.2.2.色彩时刻

    2.2.3.颜色相干矢量

    2.2.4.其他颜色特征

     2.3.基于形状特征的方法

    3. 基于深度学习的工业产品表面缺陷检测方法

     3.1.监督方法

    3.1.1. Siamese Network

    3.1.2. ShuffleNet

    3.1.3. Faster RCNN

     3.1.4.全卷积网络

    3.1.5. Mask RCNN

     3.2. 无监督方法

    3.2.1. Autoencoder

    3.2.2. 生成对抗网络

    3.2.3. 深度信念网络

    3.2.4. Self‐Organizing Map

    3.3. 弱监督方法

    3.3.1. 不完全监督方式

    3.3.2. Inexact Supervision Method

    3.4 总结

    4. 关键问题

    4.1. 实时问题

    4.2. 小样本问题

    4.2.1. 数据增强

    4.2.2. 无监督/半监督模型

    4.2.3. 迁移学习

    4.2.4. 优化网络结构

    4.3.小目标检测问题

    4.4. 数据不均衡样本识别问题

    4.4.1. 数据层面

    4.4.2. 模型层面

    4.4.3. 特征层面

    4.4.4. 评估指标级别

    5. 工业产品缺陷检测数据集

    6 总结


    摘要

            制造业的全面智能化发展对工业产品的质量检测提出了新的要求。本文总结了机器学习方法在表面缺陷检测中的研究现状,表面缺陷检测是工业产品质量检测的关键部分。首先,根据表面特征的用途,从纹理特征、颜色特征、形状特征三个方面总结了传统机器视觉表面缺陷检测方法在工业产品表面缺陷检测中的应用。其次,从监督法、无监督法、弱监督法三个方面论述了近年来基于深度学习技术的工业产品表面缺陷检测的研究现状。然后,系统总结了工业表面缺陷检测中常见的关键问题及其解决方法;关键问题包括实时问题、小样本问题、小目标问题、不平衡样本问题。最后对近年来常用的工业表面缺陷数据集进行比较全面的总结,并比较了MVTec AD数据集的最新研究方法,为工业表面缺陷检测技术的进一步研究和发展提供一定的参考。

    1. 简介


            在工业生产过程中,由于现有技术、工作条件等因素的不足和局限性,极易影响制成品的质量。其中,表面缺陷是产品质量受到影响的最直观表现。因此,为了保证合格率和可靠的质量,必须进行产品表面缺陷检测。 “缺陷”一般可以理解为与正常样品相比的缺失、缺陷或面积。工业产品正常样品与缺陷样品对比如图1所示。 表面缺陷检测是指检测样品表面的划痕、缺陷、异物遮挡、颜色污染、孔洞等缺陷,从而获得被测样品表面缺陷的类别、轮廓、位置、大小等一系列相关信息。人工缺陷检测曾经是主流方法,但这种方法效率低下;检测结果容易受人为主观因素的影响,不能满足实时检测的要求。它已逐渐被其他方法所取代。

            目前,已有学者开展了表面缺陷检测的相关研究,涉及最新的方法、应用、关键问题等诸多方面,文献[5]总结了磁粉探伤、渗透探伤、涡流检测、超声波检测、机器视觉和深度学习 [6,7];比较分析上述方法的优缺点;梳理了电子元器件、管道、焊接件、机械零件中的缺陷检测技术,以及在质量控制中的典型应用。从监督学习模型法、无监督学习模型法[8]和其他方法[9](半监督学习模型法和弱监督学习模型法),文献[10]分析了基于深度学习的表面缺陷检测方法,以及然后,讨论了表面缺陷检测中实时性、小样本以及与传统的基于图像处理的缺陷检测方法的比较三个关键问题。在回顾了自动光学(视觉)检测(AOI)技术后,文献[11]系统地描述了该技术用于表面缺陷检测的几个步骤和相关方法。文献[12]首先列举了缺陷领域的不同对象;介绍和比较了用于缺陷检测的主流技术和深度学习方法。然后分析了超声波检测和深度学习方法在缺陷检测中的应用。最后,对现有应用进行了调查,并基于缺陷检测设备,提出了三维目标检测、高精度、高定位、快速检测、小目标等缺陷检测面临的几个挑战。通过调查可以发现:在工业产品表面缺陷检测领域,目前关于机器学习方法的文献综述很少,一些文献虽然总结了工业产品表面缺陷检测中存在的问题和挑战,但其解决方案和方向还不够系统。此外,在数据集方面,目前还没有对工业产品表面缺陷检测数据集进行全面整理。因此,为了解决上述问题,本文首先从传统的机器视觉方法和深度学习方法总结了工业产品表面缺陷检测的研究现状,然后,工业产品表面缺陷检测过程中的关键问题,真实讨论了时间问题、小样本问题、小目标问题、不平衡样本问题,并给出了每个问题的一些解决方案。最后,总结了全面的工业表面缺陷检测数据集,并比较了几种使用 MVTec AD 数据集的新方法。

             本综述参考文献的发表时间主要集中在2016年以后,因为这些文献可以代表最新技术的发展。 通过参考相关评论,确定本文的组织顺序为传统方法、最新方法、关键问题和工具(数据集),这也是本文的研究范围。 本文的主要内容如下: 第二部分,基于传统基于特征的机器视觉算法的工业产品表面缺陷检测方法总结; 第三节,基于深度学习的工业产品表面缺陷检测方法总结; 第四节,关键问题及其解决方案分析讨论; 第五节,工业产品表面缺陷检测数据集的整理和总结以及MVTec AD数据集最新方法的比较。

    2. 用于表面缺陷检测的传统基于特征的机器视觉算法

            传统的表面缺陷检测方法在一段时间内发挥了巨大的作用。 本章从特征提取层面对传统的基于机器视觉的工业产品表面缺陷检测方法进行分类。 根据特征的不同,主要分为三类:基于纹理特征的方法、基于颜色特征的方法、基于形状特征的方法。 具体的进一步章节安排如图2所示。

     2.1. 基于纹理特征的方法

            纹理特征反映了图像中的同质化现象,可以通过像素及其附近空间邻域的灰度分布来反映图像表面的组织结构和排列特性。 基于纹理特征的方法可以进一步分为四类:统计方法、信号处理方法、结构方法、模型方法[14,15]。

            对于统计方法,主要思想是将物体表面的灰度值分布视为随机分布,从角度分析随机变量的分布 通过直方图特征、灰度共生矩阵、局部二值模式、自相关函数、数学形态等特征描述灰度值的空间分布。

            对于信号处理方法,主要思想是将图像作为二维信号处理,从信号滤波器设计的角度对图像进行分析,因此也称为频谱法;信号处理方法包括傅里叶变换法、Gabor滤波器法、小波变换法等具体方法。
            对于结构方法,其理论基础是纹理原语理论。纹理原语理论指出,纹理是由一些按照一定规则在空间中重复出现的最小图案(称为纹理原语)组成的。
            对于模型方法,工业产品表面缺陷检测常用的模型有MRF模型和分形模型。
            对于基于纹理特征的方法,本文总结了近期在工业产品表面缺陷检测中的一些应用实例,按图2中的分类顺序排列,具体如表1所示。

     2.2.基于颜色特征的方法


            颜色特征计算量小,对图像本身的大小、方向、视角等因素的依赖性小,鲁棒性高。它是图像检索中广泛使用的视觉特征之一。


    2.2.1.颜色直方图

            颜色直方图描述了整个图像中不同颜色的比例,是全局统计的结果;它不注意空间位置颜色,不能描述图像中的物体。

            特点:对物理变换(旋转、缩放等)不敏感;如果图像有多个区域,且前景和背景之间的颜色分布有明显差异,则颜色直方图会出现双峰。

            文献[27]提出了一种基于颜色直方图的相似度评价方法,用于电阻断层扫描(ERT)图像评价。对于木材表面的缺陷检测,文献[28]提出了一种基于图像块百分比颜色直方图特征和特征向量纹理特征的分类方法;该方法已被实验证明是有效的,特别是对于结型缺陷。文献[29]设计了刨花板缺陷检测的2步工艺流程,利用SVM和颜色直方图特征完成缺陷检测,利用平滑和阈值技术完成缺陷定位。


    2.2.2.色彩时刻


            颜色矩的主要思想是图像中的任何颜色分布都可以用其每个阶的矩来表示。由于颜色分布的信息主要集中在低阶矩,通常只有颜色的一阶矩(均值)、二阶矩(方差)和三阶矩(偏移)就足以表示图像表面的颜色分布。

            特点:不考虑像素空间位置;无需矢量化颜色特征;无需进行颜色量化、平滑等后续处理。

            文献[30]提出了一种根据影响大小对色矩特征和FSIFT特征进行加权融合的方法,解决了单个特征不能明显表达瓷砖表面缺陷内容的问题。文献[31]利用余弦相似度检验磁光图像的周期规律,证明了色矩特征概括规律的正确性,从而选择合适的磁光图像进行焊接缺陷检测和定位。


    2.2.3.颜色相干矢量


            颜色相干向量是颜色直方图的改进算法;其主要思想是将直方图中的每个颜色簇分为聚合和非聚合两部分;在图像相似度比较过程中,分别比较相似度,综合权衡后得到相似值,从而得到结果。
            文献[32]将LBP特征与颜色聚合向量特征加权融合相结合,并结合基于RBF的SVM,提出了一种图像分类方法
    可以提高分类精度和计算速度的方法。文献[33]将提取的颜色聚合向量和纹理特征以特征的形式存储
    用于后续网络训练的向量。


    2.2.4.其他颜色特征


            除了颜色直方图、颜色矩和颜色聚合向量外,工业产品表面缺陷检测常用的颜色特征包括颜色集和颜色相关图。其中,颜色集也是一种全局颜色特征和匹配方法;它是颜色直方图的近似,表示为二值特征向量;通过构造二叉搜索树,可以加快检索速度。颜色相关图描述了整个图像中某种颜色的像素数所占的比例(概率),可以反映不同颜色对之间的空间相关性;通常,它需要较高的硬件条件。

     2.3.基于形状特征的方法


            基于形状的方法有效地利用图像中感兴趣的目标进行检索。其中,基于轮廓的方法是主要的方法类型。基于轮廓的方法通过描述对象的外边界特征来获得图像的形状参数;代表性的方法是霍夫变换和傅立叶形状描述符。
            霍夫变换利用图像的全局特征连接边缘像素形成区域的封闭边界,其理论基础是点对线的对偶性。文献[34]提出了一种检测瓶子表面缺陷的方法;在ROI提取阶段,采用快速霍夫变换检测光源的边界线。文献[35]利用Gabor滤波器和Hough变换实现了E-TPU中间表面线状缺陷(如压痕、凹凸)的检测。文献[36]基于圆霍夫变换、极坐标变换、加权Sobel滤波器和SVM实现了小型相机镜头的表面缺陷检测。
            傅里叶形状描述符使用物体边界的傅里叶变换作为形状描述,利用区域边界的闭合性和周期性,将二维问题转化为一维问题。文献[37]提出了一种基于全局傅里叶图像重建和模板匹配的非周期图像小缺陷检测和定位方法。文献[38]提出了一种磁体表面切割缺陷的检测方法;该方法采用傅里叶变换和霍夫变换对磁体表面图像进行重构,通过比较重构图像与原始图像的灰度差异,得到缺陷信息。
            除上述三类特征外,其他一些特征,如空间关系特征,也可用于工业产品的表面缺陷检测。由于工业产品的表面大多包含多种信息,通常仅使用单一特征或单一类别特征是不够的。因此,在实际应用中,往往会结合使用多个特征和多类特征。

    3. 基于深度学习的工业产品表面缺陷检测方法

            深度学习的快速发展使其在缺陷检测领域得到越来越广泛的应用。 本章基于深度学习的常见分类:监督方法、无监督方法、弱监督方法,简要介绍了工业产品表面缺陷检测的研究现状。 具体的缺陷检测方法如图3所示。

     3.1.监督方法


            监督方法要求训练集和测试集缺一不可,训练集中的样本必须被标记[39],其中训练集用于寻找样本的内在规律,然后将规律应用到测试集。监督方法可以分为基于度量学习的监督方法和基于表示学习的监督方法。在上述有监督的表面缺陷检测方法中,基于度量学习的常见模型包括Siamese Network;根据缺陷检测的三个阶段,基于表征学习的方法大致可以分为三类:分类网络、检测网络和分割网络。其中,常用的分类网络是ShuffleNet;通常用作检测网络的是 Faster RCNN;常用的分割网络有:FCN、Mask RCNN等,本节以上述网络模型为例,简要介绍其在表面缺陷检测任务中的研究现状。在缺陷检测的任务中,分类网络的重点是解决“缺陷是什么”问题,即确定图像的类型(图像是否包含缺陷,缺陷的类型是什么);检测网络的重点是解决“缺陷在哪里”的问题,即获取具体的位置信息和通过确定缺陷的位置来确定缺陷的类别信息;分割网络的焦点是为了解决“有多少缺陷”的问题,即分割从背景中修正缺陷区域,获取位置、类别、属性和缺陷的其他信息。

    3.1.1. Siamese Network

            Siamese网络可以用来判断两个样本之间的相似度; 其损失函数的核心思想是使相似类别的输入距离尽可能小,不同类别的输入距离尽可能大[40]。

            文献[41]提出了一种两阶段多尺度特征相似度测量模型。在使用 Siamese 网络作为主干架构完成成对图像的特征提取后,将空间金字塔池化网络纳入每个卷积模块的特征图中以融合多尺度特征向量,然后进行判别特征嵌入和通过在训练过程中使用对比损失获得相似度度量。测试在PCB数据集上进行了短路、开路、鼠咬、毛刺、漏电、覆铜6类缺陷,所有类型的ROC曲线下面积均在0.92以上。文献 [42] 提出了一种用于跨类别缺陷检测的两层神经网络(SSIM 层:生成模拟 SSIM 组件的功能;SNN 层:由连接到 SSIM 层的连体网络组成),无需重新训练。该方法从包含一些结构相似性的图像对中学习差异特征,并假设不同的分类对象可以共享由这些学习图像对的差异引起的一些结构相似性。在实际工厂数据集中的实验表明:该方法具有跨类缺陷检测的能力。

    3.1.2. ShuffleNet


            ShuffleNet 是一种计算效率高的轻量级网络,它采用了逐点组卷积和通道 shuffle 两种新方法来保证计算精度并有效降低计算成本。
            基于Shuffle Net V2框架,文献[43]提出了一种新颖的塑料容器复杂背景代码在线检测解决方案,该算法还可以处理复杂背景下的图像,并应用于实际的工业检测系统。 文献[44]提出了一种基于深度学习的Shuffle DefectNet缺陷检测系统,在NEU数据集上达到了99.75%的平均准确率

    3.1.3. Faster RCNN


            Faster RCNN是在Fast RCNN的基础上引入了区域提议网络(RPN),将生成区域推荐的步骤放入神经网络中,在端到端的学习模式下实现了几乎无成本的区域推荐算法,极大地提高了 提高了目标检测的速度,还提到了滑动窗口方法。
            文献[45]提出了一种基于Faster R-CNN的级联结构,将电力线绝缘子的缺陷检测问题转化为两级目标检测问题。 其中,第一阶段用于定位绝缘子区域; 第二阶段用于定位绝缘体区域。 基于Faster R-CNN,文献[46]提出了一种新的PCB表面缺陷检测网络,该网络使用具有特征金字塔的ResNet50作为主干,同时使用GRAPN的残差单元和ShuffleNetV2的残差单元。

     3.1.4.全卷积网络


            在 FCN 中,一种端到端的图像分割方法,网络中的所有层都是卷积层;网络主要使用三种技术:卷积、上采样和跳过层;可以通过让网络做像素级预测直接得到标签图。核心思想之一是反卷积层,增加了数据规模,从而可以输出准确的结果。
            文献[47]提出了一种利用深度神经网络结合Autoencoder和FCN来区分键盘漏光缺陷和灰尘的算法。在由1632张图像组成的测试集中对所提出的方法进行测试,漏光缺陷的误报率从6.27%降低到2.37%。文献[48]设计了一套完整的绝缘子串自动识别和诊断系统,该系统结合了不同的基于深度学习的组件,分别包括一个绝缘子串分割组件和两个绝缘子片缺失和损坏诊断组件。文献[49]提出了一种太阳能电池电致发光(EL)图像的缺陷分割方法;该方法使用FCN和U-net的特定架构,可以一步得到缺陷分割图;与重复执行CNN滑动窗口的方法相比,该方法获得了相似的结果。文献[50]结合FCN和Faster RCNN,设计了基于FCN的隧道缺陷检测深度学习模型;该模型可以准确快速地检测管道的污渍、泄漏和堵塞等缺陷。

    3.1.5. Mask RCNN

            Mask RCNN 是 Faster-R-CNN 的一种扩展形式,它为两阶段框架网络集成了目标检测和实例分割功能:第一阶段扫描图像并生成建议(建议可能包含目标区域),第二阶段分类 建议并生成边界框和掩码。

            文献[51]提出了Mask RCNN的改进模型——IPCNN。 该模型首先使用深度残差神经网络对来自图像金字塔的图像进行处理以提取特征; 提取的特征通过特征金字塔生成金字塔特征,然后由RPN处理生成缺陷边界框并对其进行分类,然后使用FCN在缺陷边界框中生成缺陷掩码。 文献[52]设计了一个端到端的系统,可以定位太阳能电池板污染; 该系统基于Mask FCNN(Fully Convolutional Mask RCNN),它由一个分类网络ImageNet和一个自底向上对特征图像进行上采样的综合网络组成; 通过上采样消除了信息丢失的影响。

            在工业产品表面缺陷检测领域,由于精度高、适应性好,监督法是目前深度学习方法中最主流的方法,其应用范围也越来越广。 但是,这种方法的缺点在实际应用中逐渐凸显,即数据集的提前标注带来的工作量巨大,尤其是在一些高精度场景下; 同时,产业水平的不断提升导致不良样品不断减少,这也对监管方式产生了一定的影响。

     3.2. 无监督方法

            针对有监督方法的缺点,一些研究人员开始研究无监督方法。 当输入的训练数据只有数据信息本身,没有标签信息时,机器学习这些无标签数据的模式,得到数据的一些内在特征和联系并自动对数据进行分类 [53]。 然后,当遇到新数据时,可以根据之前学习到的模型判断新数据属于哪个模型(这里的模型是指由原始数据组成的模型)。这个过程属于无监督学习。

            在无监督学习方法中,最常用的表面缺陷检测方法主要包括基于重建的方法和基于嵌入相似性的方法。对于前者,神经网络结构的训练仅用于正常训练图像的重建,异常图像由于不能很好地重建而容易被发现;异常分数通常用重建误差表示。最常见的基于重建的方法是自动编码器(AE)和生成对抗网络(GAN)。对于后者,深度神经网络用于提取描述整幅图像的有意义的向量,异常分数通常由测试图像的嵌入向量与训练数据集中表示正态性的参考向量之间的距离表示。典型的算法主要有SPADE[54]、PaDIM[55]、PatchCore[56]等。除了这两种类型之外,Deep Belief Network(DBN)和Self-Organizing Map(SOM)也可以用于表面缺陷检测.

            本节将首先以自编码器(AE)、生成对抗网络(GAN)、深度信念网络(DBN)和自组织映射(SOM)四种网络模型为例,简要介绍它们在表面缺陷检测任务中的研究现状 . 第 5 节将介绍基于嵌入相似性方法的三种典型算法。

    3.2.1. Autoencoder

            编码器和解码器是自编码器的两个核心部分。 其中,encoder对应网络模型中的隐藏层,用于学习输入信号的低维特征; 解码器对应模型中的输出层,用于尽可能地再现输入信号。 因此,使编码器能够学习输入信号良好的低维特征并重构输入信号是自编码器的最终目标。

            文献[57]将传统图像处理中的SSIM指标作为重建损失引入到基于AE的图像重建中;对编织纹理数据集和纳米纤维材料数据集进行了测试,与 L2 损失相比,两者都获得了显着差异。为了解决AE对异常样本重构能力强的缺点。文献[58]将异常检测转化为补丁序列修复[59]问题;同时,为了弥补该类方法难以覆盖较大异常区域的缺点,提出transformer network仅重构覆盖的patch,并针对不同情况设计了局部和全局嵌入方法。文献 [60] 设计了一种具有多尺度特征聚类的全卷积 AE(MS-FCAE),使用多个不同尺度的 FCAE 子网络重建纹理图像背景,然后从输入图像中减去纹理背景以获得残差图像,最后合并它们得到缺陷图像,其中每个 FCAE 子网络使用全卷积神经网络从输入图像中直接获取原始特征图像并进行特征聚类。文献[61]提出了一种多尺度卷积去噪自编码器(MSCDAE),它使用多模态策略来综合多个金字塔层次的结果,并在LCD面板、瓷砖和纺织品上进行测试;实验证明该方法具有较高的准确率和鲁棒性。文献[62]采用卷积自编码器(CAE)检测手机logo图像,提取CAE生成的模板图像与输入图像的差异,然后通过数学形态学处理,达到异常检测的目的。文献[63]提出了一种用于无监督特征学习的卷积自动编码器(CAE)。每个 CAE 都使用传统的在线梯度下降训练,没有额外的正则化项。在 MNIST 和 CIFAR10 上获得了良好的结果。

    3.2.2. 生成对抗网络

            生成对抗网络由两个参与者组成:生成器和鉴别器。 生成器用于获取样本数据的分布,鉴别器用于估计样本训练数据的概率。 该模型的最终目标是学习真实数据的内在规律,预测和估计真实数据的分布或密度,并根据学到的知识生成新的数据,即生成对抗网络制造数据。

            GAN判别器用于生成缺陷分布似然图;然后,将编码器引入标准DCGAN重构检测到的图像,从原始图像中减去,得到突出潜在缺陷区域的残差图像;之后结合残差图和缺陷分布似然图得到增强融合图,最终在融合图上通过阈值分割得到缺陷的准确位置。文献[65]提出了一种基于GAN的带钢表面缺陷检测的一类分类方法,其中生成器G采用编解码器,输入编码得到的隐藏空间的特征(GAN生成器的倒数第二层输出)引入支持向量机进行缺陷分类,该模型在邯钢提供的图像上取得了良好的测试效果。文献[66]提出了一种基于GAN的检测方法。在第一阶段,使用生成网络和基于统计的表示学习机制检测新区域。在第二阶段,在潜在空间中直接使用 Frechet 距离来区分缺陷和正常样本。该方法在太阳能电池板数据集上达到了 93.75% 的准确率。文献[67]设计了一个基于GAN的表面视觉检测框架,它使用多尺度融合策略融合GAN判别器三个卷积层的响应,然后使用OTSU对融合特征响应图进行分割以进一步分割缺陷位置。在木材和道路裂缝数据集上的实验证明了该框架的有效性。为了检测织物表面的各种缺陷,文献[68]提出了一种基于GAN框架的模型。该模型首先使用多种纹理融合到特定位置,然后通过多级GAN不断更新现有的织物缺陷数据集;因此,网络模型不断微调,以达到更好的检测效果。

    3.2.3. 深度信念网络

            深度信念网络由多个RBM(受限玻尔兹曼机)组成,整个网络的训练是通过逐层单独训练RBM来完成的。

            文献[69]提出了一种基于DBN的太阳能电池缺陷检测算法。 该算法以重建图像和训练图像作为监督数据,通过BP算法的微调网络建立训练样本和非缺陷图像之间良好的映射关系。 文献[70]提出了一种DS-DBN-SVM(差分搜索-深度信念网络-支持向量机)模型来识别螺栓缺陷的类型。 在该模型中,采用DS算法优化DBN网络的权值和阈值; DS-DBN模型用于提取螺栓数据的特征,提取的特征作为SVM的输入来识别螺栓缺陷类型。

    3.2.4. Self‐Organizing Map

            自组织图模拟人脑不同区域神经网络细胞的不同分工,通过搜索最优参考向量集对输入模式集进行分类。
            文献 [71] 提出了一种使用 SOM 来区分正常木材和缺陷木材的检测方法。第一阶段检测疑似缺陷区域,第二阶段单独检查缺陷区域。在松木数据集上的测试得到了比较理想的结果。文献[72]结合Otsu和SOM实现TSV缺陷的检测和定位。
            无监督方法有效地弥补了监督方法的不足,但由于其自身的特点仍然存在一些问题。由于只训练了正例,无监督方法无法确定什么是正确的输出,因此不能保证对每种类型的缺陷样本(在训练中没有出现)都有良好的检测效果。因此,无监督方法的准确率还有很大的提升空间,总的来说,无监督方法对纹理图像有更好的检测效果。

    3.3. 弱监督方法

            有的学者结合了有监督方法和无监督方法的特点; 因此,产生了弱监督方法。 与监督和非监督方法相比,弱监督方法可以在避免更高的标记成本的同时获得更好的性能。 目前,工业表面缺陷检测中常用的弱监督方法有不完全监督法和不准确监督法。

    3.3.1. 不完全监督方式

            不完全监督意味着大部分训练样本没有标记,只有少数样本被标记,这部分标记样本不足以训练一个好的模型。 在不完全监督方法中,半监督方法常用于工业产品的表面缺陷检测。

            半监督方法可以在没有人工干预的情况下自动开发未标记的样本数据,以提高学习效果。文献[73]设计了一种基于残差网络结构的深度卷积神经网络结构,将两层残差构建模块堆叠在一起形成一个43层的卷积神经网络,同时为了达到网络深度之间的平衡和网络宽度,提高精度,适当增加网络宽度。该网络结构在 DAGM、NEU 钢数据集和覆铜板数据集上表现出良好的性能。文献[74]提出了一种基于卷积自动编码器(CAE)和生成对抗网络(SGAN)的半监督模型,堆叠的CAE用未标记的数据训练,其编码器网络被保留并作为GAN鉴别器输入到SoftMax层,使用GAN 生成钢铁表面缺陷的假图像来训练鉴别器。文献[75]设计了一个由样本生成和半监督学习组成的钢铁表面缺陷检测系统。在半监督学习部分,使用了CDCGAN和ResNet18两个分类器,并在NEU-CLS数据集上进行了对比实验。其结果,证明该方法优于监督学习和迁移学习。文献[76]提出了一种PCB焊点缺陷检测框架。在该框架的分类任务中,采用了基于“样本-查询-建议”算法的主动学习的概念和基于“自训练”的半监督学习的概念,该框架已被证明可以改善分类性能,同时大大减少注释的数量。

    3.3.2. Inexact Supervision Method

            不精确监督侧重于给出了监控信息,但信息不精确,即只包含粗粒度标签的情况。 对于更多包含像素级标签的任务,图像级标签是粗粒度标签。

            文献[77]在原有ResNet-50网络的基础上,删除原有的全连接层和池化层,在网络末端增加两个1×1的卷积,得到缺陷对应的特征图,实现了仅通过 图像标签完成对太阳能电池板裂纹的初步检测。 文献 [78] 开发了一个由定位网络(LNet)和决策网络(DNet)组成的 WSL 框架用于钢铁表面缺陷检测,其中 LNet 使用图像级标签训练并输出潜在缺陷位置的热图作为 DNet 输入,DNet 使用 RSAM 对 LNet 识别的区域进行加权,所提出框架的性能在实际工业数据集上得到了证明。

            目前,弱监督方法在工业产品表面缺陷检测领域还比较少见,但由于同时具有监督学习方法和无监督学习方法的优点,这类方法的应用前景也很广阔 .

    3.4 总结

            综上所述,在深度学习的三种方法中,监督方法的应用最为广泛,因为它具有较好的准确性,但也存在明显的缺点; 无监督方法符合产业发展的进程,但有其自身的特点; 弱监督方法目前应用并不广泛,但具有广阔的发展前景。

    4. 关键问题

    4.1. 实时问题

            在实际工业场景中的表面缺陷检测任务中,实时性问题不容忽视。在一些特殊场景中,如在线分析、在线监控等,实时性问题处于极其重要的地位。处理实时性问题的目标是在准确率大致相同的前提下,减少检测时间,提高检测效率。目前,已有学者对实时性问题进行了一定的研究。例如,文献[79]设计了一种新型的 11 层 CNN 模型,用于机器人焊接制造中的焊接缺陷检测。该方法为金属增材制造(AM)的在线检测提供了指导,即该方法可以满足一定的实时性要求。文献 [80] 提出了一种结合 SSIM 和 MobileNet 的两阶段算法来检测印刷电路板上的表面缺陷,在保持高精度的同时,其速度至少比 Faster RCNN 快 12 倍。

            目前,模型加速是解决实时性问题的重要思路之一。 模型加速主要可以从算法和硬件两个方面进行,具体如下:

            (1)算法:对于网络算法层面,可以采用轻量级网络对模型进行加速。 常用的轻量级模型包括 MobileNet、ShuffleNet、SqueezeNet 和 EfficientNet。 此外,蒸馏和修剪也可以用于在算法级别加速网络。 在计算算法上,可以优化卷积运算,达到模型加速的目的。 典型的算法包括FFT、Winograd等。
           (2)硬件:使用GPU、FPGA、DSP等是目前通过硬件加速模型的主要方式。

    4.2. 小样本问题

            现实中,基于深度学习的表面缺陷检测方法往往不能直接用于工业产品的表面缺陷检测任务。 主要原因之一是现代工业流程的不断优化导致缺陷样本越来越少,即缺陷图像的数量非常有限。 这种从少量样本中学习的问题通常称为小样本问题[81],在训练过程中很容易导致过拟合问题。 目前解决小样本问题的主流方案主要有以下四种:

    4.2.1. 数据增强

            数据增强的常用方法包括平移、旋转、镜像对比度调整和数据合成。 通过数据放大,可以获得大量的样本图像。
            文献[82]在无缺陷图像的表面添加合成缺陷以完成装饰塑料零件数据集的扩展。 文献 [83] 以互补的方式将手工制作的特征与无监督学习特征融合在一起,生成更具辨别力的缺陷表示。

    4.2.2. 无监督/半监督模型

            无监督模型的优点之一是它只需要用正样本而不是负样本进行训练,这为解决小样本问题提供了方向。 另外,只需要标记少量样本的半监督模型也是解决小样本问题的替代模型之一。 具体内容参见3.2、3.3.1。

    4.2.3. 迁移学习

            通过迁移学习,已经从一项任务中学到的知识可以应用于其他不同但相关的任务,尤其是当目标任务的数据不足时。 实际上,大多数数据或任务都是相关的。 因此,迁移学习也是解决小样本问题的主要思路之一。 文献 [84,85] 结合迁移学习和 Alex Net 来检测太阳能电池板和织物的表面缺陷。 文献[86-90]将迁移学习与VGG网络结合用于乳液泵体、印刷电路板、传输线组件、钢板和木材的表面缺陷检测。 文献 [91] 将迁移学习和 DenseNet 结合到织物表面缺陷检测中。

    4.2.4. 优化网络结构

            网络结构的优化也是解决小样本问题的一个方向。以GAN为例,AnoGAN模型在2017年的文献[92]中被提出,首次将GAN用于图像异常检测。该模型不断迭代优化固定生成器 G 的参数,在潜在空间中寻找与测试图像最接近的生成图像,然后使用 DCGAN 进行图像异常检测。 2019年,文献[93]对AnoGAN进行了改进,提出了f-AnoGAN模型。在该模型中,建议使用编码器将图像快速映射到潜在空间中的一个点,然后使用 WGAN 进行异常检测。 Encoder的引入解决了AnoGAN迭代优化需要大量时间的问题。此外,GANomaly模型(整体结构为encoder-decoder-encoder)在2018年的文献[94]中提出;通过比较编码得到的潜变量和重构编码得到的潜变量的差异,检测异常样本。值得注意的是,上述模型都不需要用负样本进行训练。

    4.3.小目标检测问题

            小目标检测问题也是工业产品表面缺陷检测领域的难点之一。小目标是指图像中尺寸较小的目标。 “小”有两种定义。一种是绝对尺寸小,通常认为是尺寸小于32*32像素的小目标。另一种是相对尺寸小,即目标尺寸小于原始图像尺寸的一定比例,如0.1,即该目标被认为是小目标。文献[95]通过彩虹级联(pooling and deconvolution)整合不同层的特征,增加不同层的特征图数量的同时增加不同层之间的特征图关系,一定程度上解决了小目标问题。文献[96]提出了一个由多个不同IOU阈值的检测器组成的Cascade R-CNN多阶段目标检测框架,在整个框架中,将前一阶段调整后的proposal作为下一阶段训练的输入。该方法用于小目标,通过该方法显着提高了小目标的检测结果。目前有一些技巧可以解决小目标检测问题,总结如下:

            (1)特征融合:将深层语义信息融合为浅层特征图,利用深层特征丰富语义信息,同时利用浅层特征适合检测小目标的特点;
            (2) 数据增强:增加训练集中小目标的样本类型和数量;
            (3) Image Pyramid + Multi-scale Sliding Window:为图像设置不同的输入尺寸,训练时随机选择一个尺度,将输入图像缩放到这个尺度,发送到网络;

            (4)降低网络下采样率:通过降低下采样率来减少特征图上物体的损失,常用的方法是直接去掉池化层,同时使用空洞卷积;
            (5)合理的anchor设计:主要方法包括:边界聚类,即在训练集的标签上聚类一组合适的anchor;统计实验,即把anchor和label的中心点放在一起,只利用宽高信息进行匹配实验,找出一组宽高比分布最一致的anchor;设置更小更密集的anchor和匹配策略,比如不要为小物体设置太严格的IoU阈值;
            (6)合适的训练方法:使用高分辨率图像进行预训练,同时放大输入图像,然后在小分辨率图像上进行微调;
            (7) 使用GAN将小物体放大然后检测;
            (8)使用Context信息:在目标与其Context之间建立连接。

    4.4. 数据不均衡样本识别问题

            不平衡样本的识别 [97,98] 是基于深度学习方法用于工业产品表面缺陷检测的另一个难点。在深度学习中,在训练模型时,通常要求样本集中各类别的样本数量平衡。然而,这种理想情况在现实中很少发生。在更多情况下,数据集中“正常”样本的数据量通常占多数,而“缺陷”或“异常”样本的数据量仅占总样本的一小部分。这种现象称为“样本不平衡”现象。样本识别不平衡的问题主要存在于监督学习的任务中。这个问题的出现会导致算法更加关注数据量较大的类别而低估数据量较小的类别,从而影响模型在测试数据中的泛化和预测能力。

            目前,不平衡样本的识别可以从数据层面、模型层面、特征层面、评价指标层面四个方面来处理。

    4.4.1. 数据层面

            数据层面的处理方法思想是改变训练集的样本分布,使训练集中的样本分布趋于平衡,即各类样本的数量趋于一致。 可以从数据源、数据增强、数据重采样[99,100]、类均衡采样、合成样本[101]五个方面进行,如图4所示。

    4.4.2. 模型层面

            (1) Cost-sensitive:cost-sensitive思想是在目标函数中增加误分类小类样本的损失值,通过优化目标函数来调整模型对小类样本的注意力。有两种主要的成本敏感方法:重建训练集或引入成本敏感因素。
            重构训练集:在不改变现有算法的情况下,根据样本的不同误分类代价为训练集中的每个样本分配权重,根据权重重构原始样本集。
            引入成本敏感因素:为小类样本分配较高的成本,为大类样本分配较低的成本,以平衡样本数量的差异。成本敏感因素包括成本敏感矩阵和成本敏感向量,成本敏感方法需要在处理前指定成本敏感矩阵(或成本敏感向量)。在实际情况中,成本敏感矩阵(或成本敏感向量)中误分类权重的具体值通常可以根据样本间的比率和分类结果的混淆矩阵等信息来指定。

            (2)集成学习:使用集成学习进行缺陷检测主要有两种方式,分别是:
                    A:集成学习+数据预处理:典型的算法包括Smote bagging、Smote boost、Easy Ensemble和Balance cascade;
                    B:集成学习+成本敏感:典型的算法是AdaCost [102],Rare Boost。
            (3) 转化为异常检测问题:当样本类别极不平衡时,缺陷检测问题可以看成是异常检测问题,异常检测算法(如One-Class SVM、SVDD等)可以 用于建立单个分类器来检测异常点(即小类别的样本)。

    4.4.3. 特征层面

            从特征选择的角度,根据与分类器的关系,可以进一步分为三种方法:

    •  与分类器无关(典型算法:过滤器);
    •  独立于分类器(典型算法:Wrapper);
    •  结合分类器(典型算法:嵌入式)。

    4.4.4. 评估指标级别

            由于样本不平衡的问题对准确度(Accuracy)的影响最大,因此在实际中通常不会单独使用该指标。 一些评价指标是专门为解决样本不平衡问题而设计的,如召回率、F1测度、Kappa系数、ROC(AUC)等。

    5. 工业产品缺陷检测数据集

            数据集是研究工作的基础。 一个好的数据集更有利于问题的发现和总结,从而便于解决。 目前,工业产品表面缺陷检测领域还没有一个庞大而统一的数据集。 对于特定的研究对象和研究场景,经常使用不同的数据集。 本节根据对象和应用场景的不同,对工业领域常用的数据集进行分类,并给出相关链接。 如表 2 所示,这些数据集涵盖了广泛的工业应用,包括:热轧钢带、钢轨、电子换向器、太阳能电池板、印刷电路板、磁瓦、织物等。 鉴于现有数据集的总结,希望能为学者在该领域的研究提供相同的数据来源。 此外,图 5 选取了部分数据集并在一定程度上展示了它。

             MVTec AD 数据集共包含 15 个类别,其中 5 个类别为不同类型的纹理,其余 10 个类别为 10 个不同类型的对象。 在这个数据集中,3629幅图像用于训练和验证,1725幅图像用于测试。 训练集仅包含无缺陷图像,而测试集包含无缺陷图像和各种类型的缺陷图像。 该数据集通常用于无监督缺陷/异常检测。

             MVTec AD 数据集共包含 15 个类别,其中 5 个类别为不同类型的纹理,其余 10 个类别为 10 个不同类型的对象。 在这个数据集中,3629幅图像用于训练和验证,1725幅图像用于测试。 训练集仅包含无缺陷图像,而测试集包含无缺陷图像和各种类型的缺陷图像。 该数据集通常用于无监督缺陷/异常检测。

    6 总结

            表面缺陷检测是智能生产不可或缺的一部分。 因此,研究工业产品表面缺陷检测具有很强的现实意义。 本文对机器学习方法在工业产品表面缺陷检测中的现状进行了一定的调查。 我们首先讨论传统机器视觉方法和深度学习方法在表面缺陷检测领域的应用。 同时指出工业产品表面缺陷检测领域的一些关键问题并总结其解决方案。 此外,我们概括了一个相对完整的工业产品表面缺陷检测数据集,可以帮助研究人员对工业产品表面缺陷检测进行更深入的研究。

             我们通过简要解释一些具体的研究方法来支持我们的观点,这是有效的。 考虑到文章的篇幅和可读性,我们只选取了一些研究方法进行扩展和解释,因此存在一些方法的文献不够或不最新的问题。 但是,我们相信我们的综述可以帮助研究人员了解工业产品表面缺陷检测的相关研究进展,并起到一定的参考作用。

    展开全文
  • 经历工业自动化行业的磨炼让我了解到的工业缺陷检测,今天就细说工业缺陷检测.pdf
  • 经历工业自动化行业的磨炼让我了解到的工业缺陷检测,今天就细说工业缺陷检测目录????导读????1、主要难点????️2、场景分析????3、缺陷归纳????4、简单粗暴的可行性分析????️5、数据的四大难点:sunny: 5.1 、数据...

    目录

    😊开讲啦!!!!

    在这里插入图片描述

    🚣导读

    本文主要内容还是围绕着场景分析与数据理解、方法论与算法设计、工具链与部署落地等方面进行展开,重点关注的是顶层设计。注意:本文从我的一个PPT整理而来,行文可能比较随意,很多细节没有写清楚,后续有时间会持续修改。

    上次说到,要写一个系列,最后整理才发现,还是合成一篇比较好一点。

    皮特潘:AI 工业缺陷检测 —— 写在前面的话

    主要内容还是围绕着场景分析与数据理解、方法论与算法设计、工具链与部署落地等方面进行展开。重点关注的还是顶层设计,因此涉及到的很多具体的细节没有说太多,仁者见仁智者见智吧。在平时工作中和思考问题上,我喜欢用简单粗暴的手段去分析,比如:本质上,和某某没有区别,说白了就这等语气。目的就是透过现象看本质,抓住主要矛盾。

    皮特潘:谈一谈我对AI项目落地的看法

    🗾1、主要难点

    我认为缺陷检测没有啥难的,基本上都可以做。那为啥槽点还那么多?我认为很大一部分是AI的槽点,因为目前使用AI来做是主流,或者说只传统方法搞不定的,没办法,只有上AI的方法。AI的槽点有很多,例如:

    • 多少人工就有多少智能,太依赖于标注的数据;

    • 过拟合严重,泛化能力差;

    • 容易被攻击到,没有提取到真正的特征;

    • 提取特征太多抽象,可解释性差,大家都是“黑盒子”玩家;

    • 经验学、尝试学,没有建立起方法论,trick太多,很多都是马后炮强行解释;

    • “内卷”严重,nlp领域的sota 拿到CV,各种模改就work了?甚至都使用mlp进行返租现象,让我们一时半会摸不到方向。

    当然,学术界和工业界也有一条巨大的鸿沟。学术界在于新,有创新点,在开源数据上各种尝试。工业界强调的是精度、成本、落地。再者场景过于分散,没办法达成一致的共识,场景、数据、需求等均是如此。

    单单从工业界来看,在“缺陷检测”这一个细分的场景(其实也不是啥细分场景,所有找异常的都可以叫缺陷检测)。也有很多的槽点或者坑点,我认为原因如下:

    • 方法论没做好:例如迭代中涉及多个环节,管理容易混乱,或没有意识到baseline数据集的重要性,敏捷开发变成扯皮甩锅。

    • demo难做: 业务场景分散,没有现成的可以直接展示。方案涉及光学硬件,做demo耗时耗力,关键的是最后不一定能拿下。

    • 更换型号难做: 光学+标注+训练+部署一条龙,对工具链的用户体验要求非常高。有时别提用户体验了,甚至一个项目现做一套也不夸张。

    • 高度定制: 还是那句话,业务场景分散,推广困难,复制基本等于重做。

    • 精度需求: 用户期待高,动辄要求100%?超过人类?

    • 检测时间: 人工一个小小的动作,自动化执行超级复杂。尴尬的是面对的产品价值可能很低,比如几毛钱的一个塑料制品。

    • AI+传统: AI信不过,传统来兜底。结果超参过多,运维困难。单纯AI有时也会存在模型过多的情况。

    从业务、工具、管理上来说,有三大难点:

    • 业务难点: 场景分散,更换型号困难,大规模标注困难,理解数据需要一个过程。

    • 工具难点: 工具都有,但是整合困难。

    • 管理难点: 更新迭代,敏捷开发,需要需求、光学、标注、算法、运维等多方人员协同完成。

    🏔️2、场景分析

    本文讨论的是工业场景,那就先和自然场景比一比吧!如下

    在这里插入图片描述
    当然有一个非常重要的特性没有说:

    自然场景一般是强语义信息,缺陷检测一般为弱语义信息。近期利用轻量级语义分割训练缺陷检测不好使有感而发。缺陷检测不需要特别大的感受野,一般为纹路上的缺陷,局部区域就可以判别。

    貌似难度比自然场景少不少,再仔细分析一下,工业场景其实有以下几个特点:

    • 业务场景过于分散 ,对标一下“人脸”,甚至“OCR”等领域,缺陷检测场景还是非常分散的,难以归纳。

    • 受限、可控 ,有比较的大人工干预空间。例如可以利用一些光学、机械结构等设计降低场景的复杂,使得我们面临的场景更加纯粹。

    • 一般面临目标比较微弱 ,这个目标缺陷的形态、颜色等有关。有时还会有一些例如黑色纹理上的黑色缺陷,强烈吃视角的缺陷等;

    • 需求不太明确,很多时候做不到非黑即白的“一刀切。其实仔细思考,并不是客户给不粗明确的需求,而是场景和数据本身的固有属性,需求在执行的时候很难做到一致性,这点下面的数据分析会细说。

    • 精度指标要求比较高,动辄100%还是比较夸张的。不过以我个人的经验,100%需求的地方,还是比较好做的。一般1个点的漏检,2到3个点的误检也算比较理想的结果了。不过有一点值得说明的是,非常明显的漏检和误检就是低级错误,要不得的。

    以上是工业缺陷检测场景的固有属性。针对该场景,主要有以下三点需求:

    • 捡出NG和GOOD,这个是最基础的任务,不然不能称之为缺陷检测;

    • 定位缺陷的位置,方便归因分析、指标统计、设备升级、维修等;

    • 给出缺陷的量化指标,例如面积、长度、对比度;一般对应的上层任务有缺陷分级、需求定制或变更。

    🌋3、缺陷归纳

    做好缺陷的归类,才容易下手。这里给出三种归纳方法:

    归纳一:

    • 纹理缺陷: 替代原始样本纹路表现,位置、大小、形态不固定;划痕、脏污等;

    • 结构缺陷: 与目标结构有关,其位置、形态较固定,可能不存在量化的概念(错漏反);

    • 其他缺陷: 例如医学图像、一些红外热成像、超声波成像等,可能无法靠肉眼建立精准的对应关系

    归纳二(站在正常样本建模的角度):

    • 纹理(一般指重复的结构,可能存在颗粒比较大的纹理)

    • 非纹理对齐: 与结构相关,但是可以做到对齐

    • 非纹理无法对齐: 与结构无关,但是很难对齐

    归纳三(形态上):

    • 加法: 脏污、异物、附着

    • 减法: 残缺、划痕、破损

    • 替换: 混色、异色、杂质、混淆

    • 变形: 扭曲、尺寸、褶皱

    🗻4、简单粗暴的可行性分析

    需求非常多,有时甚至来不及打光验证。因此我有一套简单粗暴的可行性分析办法。主要针对业务场景来说。当然这只是粗糙的可行性分析,只能建立大致的、初步的印象。具体能不能做,还要从光学、结构复杂度、成本、运维、打开市场、推广等多个维度进行评估。

    简单粗暴包括以下两个点:

    • 明显: 缺陷清晰可见,肉眼容易辨别,同时也是对光学成像提出要求;

    • 明确: 缺陷标准定义明确,没有争议,是对需求进行筛选;

    基本上满足以上两点,就可以认为该case是可行的,基本可以做的。不过实际的情况是比较复杂的。仅仅靠“明显”和“明确”会把很多机会拦截在外。这种定义无可厚非,但是不够深入,给算法设限。缺陷检测,很难做到这两点的理想情况。且看下一小结数据的详细分析。

    🏕️5、数据的四大难点

    难分、多样性、不平衡、数据脏。把握难点,针对举措。
    在这里插入图片描述

    5.1 、数据难分

    直接后果就是标准难定,学术一点来说就是正负样本类间差距较小,不是非黑既白的一刀切能够搞定的,很难有一个一致性的标注将正负样本分开。也就是需求标准难定,即便是人工也很难保证。标准可能还比较好定,但是执行起来较为困难。

    这个放到第一点,因为它是场景和数据的固有属性,人工很难改变,这也是大家吐槽缺陷检测难做的主要原因。不管用任何手段去描述缺陷,都不能做到明显可分。比如按照面积、灰度值等绘制其直方图,中间过渡区域永远存在一定量的样本,处于灰色地带,模棱两可。不管你是多人标注也好,不管你是做量化指标也好,总很难有好的办法改变这一现状。

    有人可能会说,直接给阈值进行一刀切或两刀切,阈值交给客户来定。不过我们自己本身要想明白这个事情:不管是AI,还是人工,都会检出灰色地带。该场景存在这种情况,那么说明其需求本应该能够接受灰色地带的数据分错。

    标注测试集就很难做,例如甲方合同明确要给出准确率。该问题的存在,很难达到理想的指标。所以如果面临该场景,建议在统计指标上,给出明显漏、明显误等。不然会陷入“清洗数据”、“更改需求”、“重复试验”的死循环,无法解脱。

    能否给出对应的量化指标,也是很大的问题,比如明显的缺陷判分很低,微弱的缺陷置信度又很高。降低客户的期望也好,让客户理解AI判定过程也好,总之就是既然想让AI代替人工,我是可以做到。

    针对该场景,我们要做的是:易分样本(也就是明显缺陷和明显不是缺陷)不能出错,然后在漏检和误检的tradeoff寻求一个平衡。一般客户会有“直通率”这个概念,可以多次磨合,多次迭代,趋向用户期待。

    5.2 、多样性不够

    这点表现为类内差异过大。比如同样是划痕,表现形式各种各样,有的发白,有的发黑,有的吃视角,有的发生在边缘地带等等,出现在不同位置,表现形式都不一样。因此导致一个问题:你很难收集到全部形态的缺陷样本,所以在测试集上很难有一个不错的表现。也就是你的训练集和测试集存在的明显影响性能的偏差,这里的偏差不是标注导致的,而是数据本身导致的。这种情况还是比较高频率能够遇到,比如和客户聊一个需求的时候,对于某一种缺陷,他会说比较大概率发生在A处,但是不能排除发生在其他地方的概率。问题就是目前很难收集到样本,即便收集到样本,也很难覆盖所有的情况。

    一般我们做一个任务,会有一份标准测试集,方便我们的方案、算法进行迭代。没有测试集,精度指标无从谈起。由于缺陷表现的多样性问题,我们的标准测试集可能就没有那么的“标准”。实际数据集构建的过程中,尽量保证较大的覆盖率。多样性图片拿不到,但是“缺陷描述”还是可以拿得到的。因此需要结合一些正常样本学习和数据生成的方法来降低“多样性不够”带来的影响。

    5.3、样本不平衡

    表现在3个方面:

    1、从样本级别来看,是不平衡的,大量的都是正常样本,NG样本占比较小;每天会收集海量的图,有缺陷的比较少。

    2、从缺陷实例级别来看,缺陷占整体较小,例如500w相机拍摄图片,25002000pix尺度上,缺陷尺度可能小到1010pix的水平。缺陷过小会带来一个严重问题。没办法进行resize(当然使用高分辨率的相机本意也是更精准的检测尺度小的缺陷)。导致的问题是:测试的时候,1是耗时,2是比较难控制误检的。例如siliding window检测,即便每一个patch预测准确率是99.9%,综合起来,性能下降的非常厉害。

    3、从类别上来看是不平衡的,会存在某一类占比较大,有些缺陷占比较小。实践证明:只要有足够多的样本,即便是非常微弱的缺陷(这里的定义是肉眼可判别),网络也可以识别。应对方法很多,无外乎是数据生成、数据增强、过采样、loss上设计、训练策略上等等。

    ☔️ 5.4、数据脏

    工程上的问题,必须考虑数据脏的情况。

    数据脏就是标注的时候把标注类别搞错。搞错大家一般会认为是数据难分的原因,其实不然,数据难分,也就是标准难定或者无法清晰给出,因此这部分导致的原因不能单纯归纳为数据脏。但是这里为了便于分析,我们区别对待。脏数据会对网络训练带来不利的影响,强行训练会有过拟合的风险。因为网络提取通用特征,拟合不到缺陷只能去拟合其他噪声了。不过也有说法是,脏数据作为噪声,也能给网络带来好的收益,让网络搜索参数的时候增加扰动,避免陷入局部最优,却能防止网络过拟合。不过一般任务:数据还是越干净越好。

    那就是数据清洗,例如交叉验证。学术上也有一些噪声样本学习的方案。数据脏还比较好办,归根到底是数据标注的问题。随着训练迭代以及人工清洗,可以很好的改善这一情况。

    🏖️6、数据生成

    虽然是工业场景,数据会源源不断过来。但是上文提到数据的几大问题,例如样本不平衡等,所以有时我们会需要生成一部分的数据。还有一种情况,在项目初期,我们往往“打样”。所谓demo阶段,是拿不到足够多的数据的。另外,数据肯定是多多益善,如果我们有生成数据的巧妙方法,训练从中受益的话,也很大程度上降低了数据收集、标注、清洗的成本。

    数据生成有传统方法和深度学习方法两种可用。传统方法可以进行一些图像融合,例如直接将缺陷裁剪下来到处贴,为了保证生成的逼真一点,还是需要一些融合的手段,例如泊松融合和边缘融合等。当然,有些场景,直接修改图片局部的灰度值也可以生成逼真的缺陷。我就单单利用修改图片的灰度和对比度就生成了很多以假乱真的图片。深度学习方法一般用GAN和VAE等生成模型可用,利用GAN可以直接从噪声生成数据,不过产生新的对网络训练有受益的信息比较有限。可以利用类似pix2pix的方案进行图片编辑。传统方法中的图片融合也可以利用GAN来做。
    在这里插入图片描述

    🏜️7、场景VS数据

    前面主要说了场景和数据的一些东西,这里对比再看一下。场景是客观的,固有属性,你做与不做,它都在那里。
    数据是有主观的成分在里面:从其光学设计、标准执行等上来说,有很大人为因素。也是上文说的可控。具有很大的操作和设计空间。

    但是有时还要思考:值不值得做?可能是时间、成本、性价比、大规模推广等方面的原因。当然,大部分场景还是很容易做的,因为在工业领域,至少是受限的和可控的场景。关键要分清主要矛盾和次要矛盾。

    🏝️8、方法论

    在这里插入图片描述
    缺陷检测是整个系统工程,每个阶段都有不同的人参与,而算法工程师几乎要从头打到尾。

    这里重要要建设四种意识,要进行全员建设。从产品经理、光学工程、结构工程师、算法工程师、应用工程师、运维工程师,当然也包括决策者:

    • 版本管理意识: 不光代码有版本管理,算法、数据、环境甚至硬件都要有版本管理的概念。

    • baseline意识: baseline也就是我们版本管理的起点,不断优化的基石。

    • 闭环意识: 既然用AI,数据驱动的工程,那么请问能够一次性给到我完美的数据集?如果不能,请具备闭环意识,做好更新迭代、持续优化的工作。

    • tradeoff意识: 精度和时间是tradeoff,准确率和召回率是tradeoff,虚检和漏检是tradeoff。tradeoff的意思就是要综合考虑。

    在进行需求挖掘和可行性分析的时候,有一些一些值得思考点

    • 用户理解上,建立一致性的期望。全员更加理性认识AI方案。

    • 用户可能给不出明确的需求,要共同发掘一致性的需求。

    • 需求、光学确定以后,建立标准测试集。

    • 对于算法难以界定的灰色地带,接不接受人工二次复检?

    • 是否涉及更换型号?

    • 什么是绝对不能容忍的错误,算法的下限在哪里?

    • 对时间上的要求?

    • 标准确认上,采用多人标注,便于评估数据的一致性。

    在这里插入图片描述

    🏞️9、算法积木

    在这里插入图片描述
    如上图所示,我们能用到的深度学习算法积木很多,首先是分类、分割、检测三大任务,这是我们的主菜。当然还有一些别的方法,例如分类算法中有细粒度分类,可以更加精准的提取微弱的特征,细粒度算法一般会用到打乱和注意力机制,对纹理上的缺陷识别会更优一点。另外,应用语义分割任务做缺陷检测,其实缺陷检测并不局限语义分割,它更像提取一张高斯热图,有缺陷的地方概率高,背景区域概率低。因此有一些热图回归的做法也可以应用。除了监督方案,在应对缺陷样本少的场景,我们还可以选择无监督学习方案。

    当然,上面也说了,数据场景复杂,一致性问题难以保证。而且面临的数据量比较大,因此你还可以使用一些半监督、弱监督的手段来降低标注的工作量。

    🏟️10、任务拆分

    任务拆分,可以降低算法的难度。多个结果进行分摊任务难度,另外不同阶段对数据的依赖不一样,多个阶段拆分更容易控制,尤其是在样本平衡方面。多个阶段对标的是端到端,可以做到精度方面的提升。
    在这里插入图片描述

    🏛️11、定制语义分割模型

    在这里插入图片描述
    语义分割容易扩展,可以输出最精准的逐像素特征,依赖样本更少(当然标注量比较大),非常适合来做缺陷检测任务。下面给出一些经常叫魔改也好,定制也好的特性。

    定制特性:

    • 多通道输入:适配多个光源的复杂场景

    • 骨架任意切换:resnet、effecientnet

    • 多个head:多任务,处理互斥类别

    • attention辅助head: aspp、danet、senet、non_local

    • 中继监督:增强梯度信息

    • refine module(Cascaded):结果精修,过滤虚检

    • 不对等输出:256256 > 88等,加速,牺牲定位精度,降低拟合难度

    • attention机制:通道、空间、nonlocal,提升全局感知能力

    • 通道剪枝:手动,network-slimming

    当然再配合一些训练tricks,可以达到事半功倍的效果:

    • 过采样:进行正负样本平衡,非常基础和常用的手段,经常使用crop的手段。

    • 动态平衡dataset:其实和过采样有异曲同工之妙,不过该方法是随着训练过程动态调整的,可以理解为作用在数据层面的难样本挖掘。

    • 标签平滑:语义分割标注是有偏差的,主要体现在边界上,所以可以进行标签平滑策略。

    • diceloss:样本不平衡神器,必须好好利用;

    难样本挖掘:

    • loss截断:同样应对标注偏差的情况

    • 对抗训练:预防对抗攻击

    🏗️12、dice loss 10 问

    在这里插入图片描述
    在这里插入图片描述
    众所周知,diceloss是语义分割,尤其是应对正负样本不平衡的一把利器。但是它也有一些槽点,因此必须整明白。下面提出diceloss十问,暂时不给出答案。之前也写过一个diceloss的深度解析,可以参考一下:

    皮特潘:语义分割之dice loss深度分析(梯度可视化)

    1、和ce的区别?

    2、label为0的像素区域有无监督?

    3、正常样本有无作用?

    4、正负样本比例的影响、怎么设置?

    5、epsilon的影响?

    6、有无梯度消失或饱和的现象?

    7、能否不使用sigmoid激活函数?

    8、能否通过权重初始化改善梯度消失?

    9、震荡的本质原因?

    10、预测边缘更锐利?

    🏘️13、定制分类

    分类是最简单的任务,当然缺陷检测可能会对它提出了更高的要求。例如下面这个方法

    皮特潘:DCL细粒度分类网络小记

    分类任务有时会结合交叉验证、多模型boosting、弱监督语义分割。

    🏚️14、定制目标检测

    很多技巧性的东西,都是通用的目标检测技巧,例如:尺度问题、形变问题等等;本文不再叙述。

    🏠15、正常样本建模

    传统方法:(场景受限,需要调参数,可用于防呆,明显缺陷没问题,微弱缺陷效果不行)

    • 对齐+对减

    • 对齐+GMM

    深度学习:

    • 基于特征统计

    • 基于GAN

    • 基于样本生成

    对场景进行筛选,从简单、对齐入手。注意:可以利用监督学习寻找算法的上限
    在这里插入图片描述

    🏡16、工具链

    在这里插入图片描述
    如上图,缺陷检测落地需要非常多的工具支撑:

    图像采集:相机、运动设备、光学控制;

    数据托管:服务器、数据库、版本管理、数据积累;

    数据处理:图像分析、定位、裁剪;

    数据标注:适配各种任务、半自动标注;

    数据清洗:半自动、交叉验证、一致性分析;

    缺陷生成:传统方法、融合、GAN;

    训练框架:分类、分割、检测、热图回归等;

    测试框架:多模型测试、指标统计、可视化;

    部署平台:模型融合、模型加速、平台移植;

    前端框架:GUI、数据持续收集、用户体验;

    难点:整合散乱的工具,甚至完全交给用户。市面是有很多做自动训练软件的,例如比较知名的VIDI,国内也有AIDI、Alpha等。可能大家选择的模型不是非常先进,但是从标注到训练,再到模型导出,用户体验和跨平台做的比较好。工业场景,特定场景特定算法,工具做好,不必追求SOTA模型,SOTA模型只是提高了自然场景精度的上限,而我们需要把握模型的下限。

    17、部署

    部署没啥可说的,可其他任务没有太大区别,这里列举一些总结的点吧!

    部署两大任务:

    • 平台移植

    • 模型加速

    • 模型加速

    • 模型轻量化:mobilenet, EfficientNet

    • 量化:INT8、INT16、2BIT

    • 剪枝:network-slimming

    • 蒸馏:Knowledge Distillation

    部署的两种方式:

    • 服务端:服务器、云端(微信小程序)、工控机

    • 边缘设备:jetson, NPU,rk, arm

    常用推理库:

    • c、c++原生态:darknet

    • pytorch原生态:libtorch、torch.jit

    • 中间转换:onnxruntime

    • GPU: tensorRT、onnxruntime-GPU、TVM

    • CPU: openvino、onnxruntime-CPU

    • ARM: ncnn TNN MNN等

    18、技术壁垒

    • 系统工程:硬件、光学、算法、部署,稳定、可靠

    • 数据积累:用户理解、场景理解、数据理解,在专用领域形成数据积累

    • 工具链:可以支撑项目快速落地

    • 成本控制:开发周期、硬件成本、运维成本

    所以缺陷检测不单单是一个算法模型的问题,而是整个系统工程。可能不需要非常前言的算法,但是需要成熟的工具链。即便是基础的算法、看似容易的场景,也可以形成技术壁垒。如果想复刻,也没有那么轻松。很多时候,不是不能做,而是值不值得做?

    Nothing is impossible, what you want is simply expensive

    在这里插入图片描述

    关注苏州程序大白,持续更新技术分享。谢谢大家支持

    在这里插入图片描述

    展开全文
  • 基于深度学习的工业零件缺陷检测算法研究.pdf
  • [皮特潘:AI 工业缺陷检测 —— 写在前面的话zhuanlan.zhihu.com(https://zhuanlan.zhihu.com/p/375383384) 主要内容还是围绕着场景分析与数据理解、方法论与算法设计、工具链与部署落地等方面进行展开。重点关注的...

    作者丨皮特潘
    编辑丨极市平台

    注意:本文从我的一个PPT整理而来,行文可能比较随意,很多细节没有写清楚,后续有时间会持续修改。

    上次说到,要写一个系列,最后整理才发现,还是合成一篇比较好一点。

    [皮特潘:AI 工业缺陷检测 —— 写在前面的话zhuanlan.zhihu.com(https://zhuanlan.zhihu.com/p/375383384)

    主要内容还是围绕着场景分析与数据理解、方法论与算法设计、工具链与部署落地等方面进行展开。重点关注的还是顶层设计,因此涉及到的很多具体的细节没有说太多,仁者见仁智者见智吧。在平时工作中和思考问题上,我喜欢用简单粗暴的手段去分析,比如:本质上,和某某没有区别,说白了就这等语气。目的就是透过现象看本质,抓住主要矛盾。

    皮特潘:谈一谈我对AI项目落地的看法zhuanlan.zhihu.com图标

    内容提要

    本文大致的脉络是按照场景、数据分析,方法论算法设计,工具链与部署等进行展开。行文中一些比较重要点的,会单独开篇幅进行展开。包含以下论点:

    • 主要难点
    • 场景分析
    • 缺陷归纳
    • 简单粗暴的可行性分析
    • 数据的四大难点
    • 数据生成
    • 场景VS数据
    • 方法论
    • 算法积木
    • 任务拆分
    • 定制分类模型
    • 定制语义分割模型
    • 语义分割利器dice loss
    • 定制目标检测模型
    • 正常样本建模
    • 工具链
    • 技术壁垒
    • 总结

    (一) 主要难点

    我认为缺陷检测没有啥难的,基本上都可以做。那为啥槽点还那么多?我认为很大一部分是AI的槽点,因为目前使用AI来做是主流,或者说只传统方法搞不定的,没办法,只有上AI的方法。AI的槽点有很多,例如:

    • 多少人工就有多少智能,太依赖于标注的数据;
    • 过拟合严重,泛化能力差;
    • 容易被攻击到,没有提取到真正的特征;
    • 提取特征太多抽象,可解释性差,大家都是“黑盒子”玩家;
    • 经验学、尝试学,没有建立起方法论,trick太多,很多都是马后炮强行解释;
    • “内卷”严重,nlp领域的sota 拿到CV,各种模改就work了?甚至都使用mlp进行返租现象,让我们一时半会摸不到方向。

    当然,学术界和工业界也有一条巨大的鸿沟。学术界在于新,有创新点,在开源数据上各种尝试。工业界强调的是精度、成本、落地。再者场景过于分散,没办法达成一致的共识,场景、数据、需求等均是如此。

    单单从工业界来看,在“缺陷检测”这一个细分的场景(其实也不是啥细分场景,所有找异常的都可以叫缺陷检测)。也有很多的槽点或者坑点,我认为原因如下:

    • 方法论没做好:例如迭代中涉及多个环节,管理容易混乱,或没有意识到baseline数据集的重要性,敏捷开发变成扯皮甩锅。
    • demo难做:业务场景分散,没有现成的可以直接展示。方案涉及光学硬件,做demo耗时耗力,关键的是最后不一定能拿下。
    • 更换型号难做:光学+标注+训练+部署一条龙,对工具链的用户体验要求非常高。有时别提用户体验了,甚至一个项目现做一套也不夸张。
    • 高度定制:还是那句话,业务场景分散,推广困难,复制基本等于重做。
    • 精度需求:用户期待高,动辄要求100%?超过人类?
    • 检测时间:人工一个小小的动作,自动化执行超级复杂。尴尬的是面对的产品价值可能很低,比如几毛钱的一个塑料制品。
    • AI+传统:AI信不过,传统来兜底。结果超参过多,运维困难。单纯AI有时也会存在模型过多的情况。

    从业务、工具、管理上来说,有三大难点:

    • 业务难点:场景分散,更换型号困难,大规模标注困难,理解数据需要一个过程。
    • 工具难点: 工具都有,但是整合困难。
    • 管理难点:更新迭代,敏捷开发,需要需求、光学、标注、算法、运维等多方人员协同完成。

    (二)场景分析

    本文讨论的是工业场景,那就先和自然场景比一比吧!如下:

    img

    当然有一个非常重要的特性没有说:

    自然场景一般是强语义信息,缺陷检测一般为弱语义信息。近期利用轻量级语义分割训练缺陷检测不好使有感而发。缺陷检测不需要特别大的感受野,一般为纹路上的缺陷,局部区域就可以判别。

    貌似难度比自然场景少不少,再仔细分析一下,工业场景其实有以下几个特点:

    • 业务场景过于分散 ,对标一下“人脸”,甚至“OCR”等领域,缺陷检测场景还是非常分散的,难以归纳。
    • 受限、可控 ,有比较的大人工干预空间。例如可以利用一些光学、机械结构等设计降低场景的复杂,使得我们面临的场景更加纯粹。
    • 一般面临目标比较微弱 ,这个目标缺陷的形态、颜色等有关。有时还会有一些例如黑色纹理上的黑色缺陷,强烈吃视角的缺陷等;
    • 需求不太明确,很多时候做不到非黑即白的“一刀切。其实仔细思考,并不是客户给不粗明确的需求,而是场景和数据本身的固有属性,需求在执行的时候很难做到一致性,这点下面的数据分析会细说。
    • 精度指标要求比较高,动辄100%还是比较夸张的。不过以我个人的经验,100%需求的地方,还是比较好做的。一般1个点的漏检,2到3个点的误检也算比较理想的结果了。不过有一点值得说明的是,非常明显的漏检和误检就是低级错误,要不得的。

    以上是工业缺陷检测场景的固有属性。针对该场景,主要有以下三点需求:

    • 捡出NG和GOOD,这个是最基础的任务,不然不能称之为缺陷检测;
    • 定位缺陷的位置,方便归因分析、指标统计、设备升级、维修等;
    • 给出缺陷的量化指标,例如面积、长度、对比度;一般对应的上层任务有缺陷分级、需求定制或变更。

    (三)缺陷归纳

    做好缺陷的归类,才容易下手。这里给出三种归纳方法:

    归纳一:

    • 纹理缺陷:替代原始样本纹路表现,位置、大小、形态不固定;划痕、脏污等;
    • 结构缺陷:与目标结构有关,其位置、形态较固定,可能不存在量化的概念(错漏反);
    • 其他缺陷:例如医学图像、一些红外热成像、超声波成像等,可能无法靠肉眼建立精准的对应关系
    • 综合以上

    归纳二(站在正常样本建模的角度):

    • 纹理(一般指重复的结构,可能存在颗粒比较大的纹理)
    • 非纹理对齐:与结构相关,但是可以做到对齐
    • 非纹理无法对齐:与结构无关,但是很难对齐
    • 综合以上

    归纳三(形态上):

    • 加法:脏污、异物、附着、
    • 减法:残缺、划痕、破损
    • 替换:混色、异色、杂质、混淆
    • 变形:扭曲、尺寸、褶皱

    (四)简单粗暴的可行性分析

    需求非常多,有时甚至来不及打光验证。因此我有一套简单粗暴的可行性分析办法。主要针对业务场景来说。当然这只是粗糙的可行性分析,只能建立大致的、初步的印象。具体能不能做,还要从光学、结构复杂度、成本、运维、打开市场、推广等多个维度进行评估。

    简单粗暴包括以下两个点:

    img

    • 明显:缺陷清晰可见,肉眼容易辨别,同时也是对光学成像提出要求;
    • 明确:缺陷标准定义明确,没有争议,是对需求进行筛选;

    基本上满足以上两点,就可以认为该case是可行的,基本可以做的。不过实际的情况是比较复杂的。仅仅靠“明显”和“明确”会把很多机会拦截在外。这种定义无可厚非,但是不够深入,给算法设限。缺陷检测,很难做到这两点的理想情况。且看下一小结数据的详细分析。

    (五)数据的四大难点

    难分、多样性、不平衡、数据脏。把握难点,针对举措。

    img

    5.1 数据难分

    直接后果就是标准难定,学术一点来说就是正负样本类间差距较小,不是非黑既白的一刀切能够搞定的,很难有一个一致性的标注将正负样本分开。也就是需求标准难定,即便是人工也很难保证。标准可能还比较好定,但是执行起来较为困难。

    这个放到第一点,因为它是场景和数据的固有属性,人工很难改变,这也是大家吐槽缺陷检测难做的主要原因。不管用任何手段去描述缺陷,都不能做到明显可分。比如按照面积、灰度值等绘制其直方图,中间过渡区域永远存在一定量的样本,处于灰色地带,模棱两可。不管你是多人标注也好,不管你是做量化指标也好,总很难有好的办法改变这一现状。

    有人可能会说,直接给阈值进行一刀切或两刀切,阈值交给客户来定。不过我们自己本身要想明白这个事情:不管是AI,还是人工,都会检出灰色地带。该场景存在这种情况,那么说明其需求本应该能够接受灰色地带的数据分错。

    标注测试集就很难做,例如甲方合同明确要给出准确率。该问题的存在,很难达到理想的指标。所以如果面临该场景,建议在统计指标上,给出明显漏、明显误等。不然会陷入“清洗数据”、“更改需求”、“重复试验”的死循环,无法解脱。

    能否给出对应的量化指标,也是很大的问题,比如明显的缺陷判分很低,微弱的缺陷置信度又很高。降低客户的期望也好,让客户理解AI判定过程也好,总之就是既然想让AI代替人工,我是可以做到。

    针对该场景,我们要做的是:易分样本(也就是明显缺陷和明显不是缺陷)不能出错,然后在漏检和误检的tradeoff寻求一个平衡。一般客户会有“直通率”这个概念,可以多次磨合,多次迭代,趋向用户期待。

    5.2 多样性不够

    这点表现为类内差异过大。比如同样是划痕,表现形式各种各样,有的发白,有的发黑,有的吃视角,有的发生在边缘地带等等,出现在不同位置,表现形式都不一样。因此导致一个问题:你很难收集到全部形态的缺陷样本,所以在测试集上很难有一个不错的表现。也就是你的训练集和测试集存在的明显影响性能的偏差,这里的偏差不是标注导致的,而是数据本身导致的。这种情况还是比较高频率能够遇到,比如和客户聊一个需求的时候,对于某一种缺陷,他会说比较大概率发生在A处,但是不能排除发生在其他地方的概率。问题就是目前很难收集到样本,即便收集到样本,也很难覆盖所有的情况。

    一般我们做一个任务,会有一份标准测试集,方便我们的方案、算法进行迭代。没有测试集,精度指标无从谈起。由于缺陷表现的多样性问题,我们的标准测试集可能就没有那么的“标准”。实际数据集构建的过程中,尽量保证较大的覆盖率。多样性图片拿不到,但是“缺陷描述”还是可以拿得到的。因此需要结合一些正常样本学习和数据生成的方法来降低“多样性不够”带来的影响。

    5.3 样本不平衡

    表现在3个方面:

    1. 从样本级别来看,是不平衡的,大量的都是正常样本,NG样本占比较小;每天会收集海量的图,有缺陷的比较少。
    2. 从缺陷实例级别来看,缺陷占整体较小,例如500w相机拍摄图片,25002000pix尺度上,缺陷尺度可能小到1010pix的水平。缺陷过小会带来一个严重问题。没办法进行resize(当然使用高分辨率的相机本意也是更精准的检测尺度小的缺陷)。导致的问题是:测试的时候,1是耗时,2是比较难控制误检的。例如siliding window检测,即便每一个patch预测准确率是99.9%,综合起来,性能下降的非常厉害。
    3. 从类别上来看是不平衡的,会存在某一类占比较大,有些缺陷占比较小。实践证明:只要有足够多的样本,即便是非常微弱的缺陷(这里的定义是肉眼可判别),网络也可以识别。应对方法很多,无外乎是数据生成、数据增强、过采样、loss上设计、训练策略上等等。

    5.4 数据脏

    工程上的问题,必须考虑数据脏的情况。

    数据脏就是标注的时候把标注类别搞错。搞错大家一般会认为是数据难分的原因,其实不然,数据难分,也就是标准难定或者无法清晰给出,因此这部分导致的原因不能单纯归纳为数据脏。但是这里为了便于分析,我们区别对待。脏数据会对网络训练带来不利的影响,强行训练会有过拟合的风险。因为网络提取通用特征,拟合不到缺陷只能去拟合其他噪声了。不过也有说法是,脏数据作为噪声,也能给网络带来好的收益,让网络搜索参数的时候增加扰动,避免陷入局部最优,却能防止网络过拟合。不过一般任务:数据还是越干净越好。

    那就是数据清洗,例如交叉验证。学术上也有一些噪声样本学习的方案。数据脏还比较好办,归根到底是数据标注的问题。随着训练迭代以及人工清洗,可以很好的改善这一情况。

    (六)数据生成

    虽然是工业场景,数据会源源不断过来。但是上文提到数据的几大问题,例如样本不平衡等,所以有时我们会需要生成一部分的数据。还有一种情况,在项目初期,我们往往“打样”。所谓demo阶段,是拿不到足够多的数据的。另外,数据肯定是多多益善,如果我们有生成数据的巧妙方法,训练从中受益的话,也很大程度上降低了数据收集、标注、清洗的成本。

    数据生成有传统方法和深度学习方法两种可用。传统方法可以进行一些图像融合,例如直接将缺陷裁剪下来到处贴,为了保证生成的逼真一点,还是需要一些融合的手段,例如泊松融合和边缘融合等。当然,有些场景,直接修改图片局部的灰度值也可以生成逼真的缺陷。我就单单利用修改图片的灰度和对比度就生成了很多以假乱真的图片。深度学习方法一般用GAN和VAE等生成模型可用,利用GAN可以直接从噪声生成数据,不过产生新的对网络训练有受益的信息比较有限。可以利用类似pix2pix的方案进行图片编辑。传统方法中的图片融合也可以利用GAN来做。

    img

    (七)场景VS数据

    前面主要说了场景和数据的一些东西,这里对比再看一下。场景是客观的,固有属性,你做与不做,它都在那里。

    数据是有主观的成分在里面:从其光学设计、标准执行等上来说,有很大人为因素。也是上文说的可控。具有很大的操作和设计空间。

    但是有时还要思考:值不值得做?可能是时间、成本、性价比、大规模推广等方面的原因。当然,大部分场景还是很容易做的,因为在工业领域,至少是受限的和可控的场景。关键要分清主要矛盾和次要矛盾。

    (八)方法论

    img

    缺陷检测是整个系统工程,每个阶段都有不同的人参与,而算法工程师几乎要从头打到尾。

    这里重要要建设四种意识,要进行全员建设。从产品经理、光学工程、结构工程师、算法工程师、应用工程师、运维工程师,当然也包括决策者:

    • 版本管理意识:不光代码有版本管理,算法、数据、环境甚至硬件都要有版本管理的概念。
    • baseline意识:baseline也就是我们版本管理的起点,不断优化的基石。
    • 闭环意识:既然用AI,数据驱动的工程,那么请问能够一次性给到我完美的数据集?如果不能,请具备闭环意识,做好更新迭代、持续优化的工作。
    • tradeoff意识:精度和时间是tradeoff,准确率和召回率是tradeoff,虚检和漏检是tradeoff。tradeoff的意思就是要综合考虑。

    在进行需求挖掘和可行性分析的时候,有一些一些值得思考点

    • 用户理解上,建立一致性的期望。全员更加理性认识AI方案。
    • 用户可能给不出明确的需求,要共同发掘一致性的需求。
    • 需求、光学确定以后,建立标准测试集。
    • 对于算法难以界定的灰色地带,接不接受人工二次复检?
    • 是否涉及更换型号?
    • 什么是绝对不能容忍的错误,算法的下限在哪里?
    • 对时间上的要求?
    • 标准确认上,采用多人标注,便于评估数据的一致性。

    (九)算法积木

    img

    如上图所示,我们能用到的深度学习算法积木很多,首先是分类、分割、检测三大任务,这是我们的主菜。当然还有一些别的方法,例如分类算法中有细粒度分类,可以更加精准的提取微弱的特征,细粒度算法一般会用到打乱和注意力机制,对纹理上的缺陷识别会更优一点。另外,应用语义分割任务做缺陷检测,其实缺陷检测并不局限语义分割,它更像提取一张高斯热图,有缺陷的地方概率高,背景区域概率低。因此有一些热图回归的做法也可以应用。除了监督方案,在应对缺陷样本少的场景,我们还可以选择无监督学习方案。

    当然,上面也说了,数据场景复杂,一致性问题难以保证。而且面临的数据量比较大,因此你还可以使用一些半监督、弱监督的手段来降低标注的工作量。

    (十)任务拆分

    任务拆分,可以降低算法的难度。多个结果进行分摊任务难度,另外不同阶段对数据的依赖不一样,多个阶段拆分更容易控制,尤其是在样本平衡方面。多个阶段对标的是端到端,可以做到精度方面的提升。

    img

    (十一)定制语义分割模型

    img

    语义分割容易扩展,可以输出最精准的逐像素特征,依赖样本更少(当然标注量比较大),非常适合来做缺陷检测任务。下面给出一些经常叫魔改也好,定制也好的特性。

    定制特性:

    • 多通道输入:适配多个光源的复杂场景
    • 骨架任意切换:resnet、effecientnet
    • 多个head:多任务,处理互斥类别
    • attention辅助head: aspp、danet、senet、non_local
    • 中继监督: 增强梯度信息
    • refine module(Cascaded):结果精修,过滤虚检
    • 不对等输出:256256 > 88等,加速,牺牲定位精度,降低拟合难度
    • attention机制:通道、空间、nonlocal,提升全局感知能力
    • 通道剪枝:手动,network-slimming

    当然再配合一些训练tricks,可以达到事半功倍的效果:

    • 过采样:进行正负样本平衡,非常基础和常用的手段,经常使用crop的手段。
    • 动态平衡dataset:其实和过采样有异曲同工之妙,不过该方法是随着训练过程动态调整的,可以理解为作用在数据层面的难样本挖掘。
    • 标签平滑:语义分割标注是有偏差的,主要体现在边界上,所以可以进行标签平滑策略。
    • diceloss:样本不平衡神器,必须好好利用;
    • 难样本挖掘:
    • loss截断:同样应对标注偏差的情况
    • 对抗训练:预防对抗攻击

    (十二)dice loss 10 问

    img

    img

    众所周知,diceloss是语义分割,尤其是应对正负样本不平衡的一把利器。但是它也有一些槽点,因此必须整明白。下面提出diceloss十问,暂时不给出答案。之前也写过一个diceloss的深度解析,可以参考一下:

    皮特潘:语义分割之dice loss深度分析(梯度可视化)zhuanlan.zhihu.com图标

    1. 和ce的区别?
    2. label为0的像素区域有无监督?
    3. 正常样本有无作用?
    4. 正负样本比例的影响、怎么设置?
    5. epsilon的影响?
    6. 有无梯度消失或饱和的现象?
    7. 能否不使用sigmoid激活函数?
    8. 能否通过权重初始化改善梯度消失?
    9. 震荡的本质原因?
    10. 预测边缘更锐利?

    (十三)定制分类

    分类是最简单的任务,当然缺陷检测可能会对它提出了更高的要求。例如下面这个方法

    皮特潘:DCL细粒度分类网络小记zhuanlan.zhihu.com图标

    分类任务有时会结合交叉验证、多模型boosting、弱监督语义分割。

    (十四)定制目标检测

    很多技巧性的东西,都是通用的目标检测技巧,例如:尺度问题、形变问题等等;本文不再叙述。

    (十五)正常样本建模

    传统方法:(场景受限,需要调参数,可用于防呆,明显缺陷没问题,微弱缺陷效果不行)

    • 对齐+对减
    • 对齐+GMM

    深度学习:

    • 基于特征统计
    • 基于GAN
    • 基于样本生成

    对场景进行筛选,从简单、对齐入手。注意:可以利用监督学习寻找算法的上限

    img

    (十六)工具链

    img

    如上图,缺陷检测落地需要非常多的工具支撑:

    1. 图像采集:相机、运动设备、光学控制;
    2. 数据托管:服务器、数据库、版本管理、数据积累;
    3. 数据处理:图像分析、定位、裁剪;
    4. 数据标注:适配各种任务、半自动标注;
    5. 数据清洗:半自动、交叉验证、一致性分析;
    6. 缺陷生成:传统方法、融合、GAN;
    7. 训练框架:分类、分割、检测、热图回归等;
    8. 测试框架:多模型测试、指标统计、可视化;
    9. 部署平台:模型融合、模型加速、平台移植;
    10. 前端框架:GUI、数据持续收集、用户体验;

    难点:整合散乱的工具,甚至完全交给用户。市面是有很多做自动训练软件的,例如比较知名的VIDI,国内也有AIDI、Alpha等。可能大家选择的模型不是非常先进,但是从标注到训练,再到模型导出,用户体验和跨平台做的比较好。工业场景,特定场景特定算法,工具做好,不必追求SOTA模型,SOTA模型只是提高了自然场景精度的上限,而我们需要把握模型的下限。

    (十七)部署

    部署没啥可说的,可其他任务没有太大区别,这里列举一些总结的点吧!

    部署两大任务:

    1. 平台移植
    2. 模型加速

    模型加速:

    1. 模型轻量化:mobilenet, EfficientNet
    2. 量化:INT8、INT16、2BIT
    3. 剪枝:network-slimming
    4. 蒸馏:Knowledge Distillation

    部署的两种方式:

    1. 服务端:服务器、云端(微信小程序)、工控机
    2. 边缘设备:jetson, NPU,rk, arm

    常用推理库:

    1. c、c++原生态:darknet
    2. pytorch原生态:libtorch、torch.jit
    3. 中间转换:onnxruntime
    4. GPU: tensorRT、onnxruntime-GPU、TVM
    5. CPU: openvino、onnxruntime-CPU
    6. ARM: ncnn TNN MNN等

    (十八)技术壁垒

    1. 系统工程:硬件、光学、算法、部署,稳定、可靠
    2. 数据积累:用户理解、场景理解、数据理解,在专用领域形成数据积累
    3. 工具链:可以支撑项目快速落地
    4. 成本控制:开发周期、硬件成本、运维成本

    所以缺陷检测不单单是一个算法模型的问题,而是整个系统工程。可能不需要非常前言的算法,但是需要成熟的工具链。即便是基础的算法、看似容易的场景,也可以形成技术壁垒。如果想复刻,也没有那么轻松。很多时候,不是不能做,而是值不值得做?

    Nothing is impossible, what you want is simply expensive

    (十九)总结

    1. 场景分散,硬件结构、光学强相关,复刻难度大,高度定制、推广成本高。任务可行性分析,系统工程层面(整套方案、数据)形成技术壁垒;
    2. 数据一致性问题:难分、类内差异大、样本不平衡、数据脏等,难以在一个标注测试集上输出比较好的指标。需求理解、数据理解、数据管理;
    3. 不需要特别前沿的算法;
    4. 问题模型定制、训练技巧、任务拆分;
    5. 工具链完善;

    最后,缺陷检测都是可以做的。那些非常难的,AI是目前最好的方案。

    展开全文
  • Datawhale干货方向:深度学习,应用:工业缺陷检测工业缺陷检测是当前深度学习落地的热门项目,近年来许多的比赛平台都举办了关于缺陷检测的比赛,如kaggle前不久举办的钢铁缺陷检...
  • 深度学习实现工业零件的缺陷检测

    万次阅读 多人点赞 2018-09-12 16:29:31
    工业零件在制造完成的时候,往往需要去检测其完整性和功能性。如下图所示,从左上到右下,分别是擦花、漏底、碰凹、凸粉。本篇博文主要讲解如何去识别这四类图像,所用框架为keras-2.1.6+tensorflow-1.7.0+GTX1060。...
  • 工业界表面缺陷检测方法综述

    千次阅读 2020-12-19 08:00:00
    点击上方蓝色字体,关注我们产品的表面缺陷检测是近年来制造业中格外关注的一项技术问题。作为生产制造过程中必不可少的一步,表面缺陷检测广泛应用于各工业领域,包括3C、半导体及电子、汽车、化工...
  • 通过利用机器视觉硬件组件的设计搭建和图像识别算法开发,可实现对产品外观质量快速、准确的智能化检测。完成对所有产品质量数据的全样本量化存储。基于产品质检数据与生产制造过程数据的闭环关联与分析挖...
  • Halcon 深度学习分类之工业缺陷检测

    千次阅读 热门讨论 2020-05-12 19:36:07
    是不是想要在工业缺陷检测上小试牛刀?作为一名视觉工程师,当然按捺不住内心的激动,想要应用在平时传统算法检测需要费九牛二虎之力的产品检测上。那么接下来将会详细介绍Halcon 深度学习分类之工业缺陷检测流程。 ...
  • 深度学习在安防、智慧城市、自动驾驶等领域已经落实应用,在工业缺陷检测方面,深度学习也是一个必然趋势,但仍然有很长一段路要走,这篇博文记录博主关于深度学习在工业缺陷检测应用中的一些思考。 工业领域与其他...
  • 写在前面的话:文章内容来源于但不限于网络、书籍、个人心得... 基于深度学习模型融合的工业产品(零部件)工艺缺陷检测算法简述 1、序言 随着信息与智能化社会的到来,工业产品生产逐渐走向智能化生产,极大地提...
  • 提升产品质量的思路有加强品质检验、提升工艺技术水准和规范生产作业等,其中加强品质检验是制造业生产中最常用的方式。影响产品品质的因素多种多样,例如外观品质、功能品质、性能品质等。用户和生产企业对产品质量...
  • 工业质检-缺陷检测数据集

    千次阅读 2021-01-13 15:23:49
    传统的基于机器 视觉的表面缺陷检测方法,往往采用常规图像处理 算法或人工设计特征加分类器方式。一般来说,通常利用被检表面或缺陷的不同性质进行成像方案的设计,合理的成像方案有助于获得光照均匀的图像,并将...
  • 基于图像处理技术的工业缺陷检测

    万次阅读 多人点赞 2018-10-21 22:16:59
    工业缺陷检测有很多应用的地方,如汽车轮毂制造的缺陷、手机壳的缺陷、太阳能电池板的缺陷等等。由于问题比较简单,这次针对太阳能电池板进行缺陷检测,即电池板上有很多条状撕裂细纹或者小斑点视为缺陷。由于图像很...
  • 目前,某工业产品是立体实心结构,内部质量抽检依靠扫描设备,从三个面对内部进行扫描成像后人工判读,但判读自动化程度比较低,测量尺寸需要在专业软件上人为操作鼠标进行图像测量,而检测缺陷则需要将扫描图像在...
  • 适合研究工业表面缺陷检测的学生和从业人员
  • GAN用于(无缺陷样本)产品表面缺陷检测

    万次阅读 热门讨论 2018-11-14 16:30:26
    还有以前写的误删的原版:GAN用于表面缺陷检测 今年的一篇会议论文,很不错的一个论文,作者使用GAN做无缺陷样本表面缺陷检测,效果还不错。 本人水平有限,表述不清楚或错误的地方请指出,一起进步! 前言 ...
  • 工业零件在制造完成的时候,往往需要去检测其完整性和功能性。如下图所示,从左上到右下,分别是擦花、漏底、碰凹、凸粉。本篇博文主要讲解如何去识别这四类图像,所用框架为keras-2.1.6+tensorflow-1.7.0+GTX1060。...
  • 工业零件缺陷图像

    2018-09-12 16:27:43
    工业缺陷零件图像,包括凸粉、漏底、碰凹、擦花四种。
  • 机器视觉工业缺陷检测的那些事(一、光源)

    千次阅读 多人点赞 2020-07-02 23:00:32
    机器视觉工业缺陷检测的那些事(一) 视觉工业检测大体分为工件尺寸测量与定位,和表面缺陷检测,及各种Logo标识的检测与识别等。 尺寸测量主要是检测物体的长、宽、高,比较常见主要是物体的二维尺寸(宽和高)...
  • 基于深度学习的工业自动化包装缺陷检测方法.pdf
  • 机器视觉工业缺陷检测的那些事(二) 2、相机的选择 (1)工业数字相机的分类: 工业相机按照芯片类型可以分为CCD相机、CMOS相机; 按照输出色彩可以分为单色(黑白)相机、彩色相机; 按照传感器的结构特性...
  • 这个例子演示了在Vision开发模块中使用Model Importer API来使用深度学习为缺陷检查应用程序执行对象检测特性 说明 这个例子使用了一个预先训练过的模型——SSD_MobilenetV1,它是在TensorFlow中训练的。使用模型...
  • 需求背景目前,某工业产品是立体实心结构,内部质量抽检依靠扫描设备,从三个面对内部进行扫描成像后人工判读,但判读自动化程度比较低,测量尺寸需要在专业软件上人为操作鼠标进行图像测量,而检测缺陷则需要将扫描...
  • 关于深度学习软件在工业缺陷检测中若干点拾遗 **1、**关于检测的产品表面的清洁度 ①产品取图是啥样就是啥样,不做任何处理。----此点存疑 ②让验证阶段的产品处理检测流程与最终设备设计的处理流程一致 ③让产品的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,528
精华内容 5,011
关键字:

工业产品缺陷检测