论文《基于深度学习的表面缺陷检测方法综述》学习笔记

《基于深度学习的表面缺陷检测方法综述》学习笔记

  • 前段时间完成了《基于图像的零部件缺陷识别系统设计》毕业课程设计,过程中收获了很多,老师也分享了很多论文,在此记录一下学习的收获。

  • 本文的论文引用:陶显, 侯伟, 徐德. 基于深度学习的表面缺陷检测方法综述. 自动化学报, 2021, 47(5): 1017−1034 doi: 10.16383/j.aas.c190811

  • 文章链接:http://www.aas.net.cn/cn/article/doi/10.16383/j.aas.c190811

  • 在机器视觉领域中,表面缺陷检测是其一项重要的研究内容。它利用机器视觉设备获取图像并判断采集的图像中是否存在缺陷。传统的基于机器视觉的表面缺陷检测方法主要采用常规图像处理算法或者人工设计特征加分类器方式。

  • 成像方案设计:
    (1)针对被测表面颜色选择光源。
    (2)依据被测表面反射性质选择不同成像方案(明场成像、暗场成像、混合成像)。

  • 现实复杂环境下缺陷检测的困难:
    (1)缺陷与背景差异小。
    (2)对比度低。
    (3)缺陷尺度变化大且类型多样。
    (4)图像存在大量噪声。
    (5)缺陷咋自然环境下成像存在大量干扰。

一、定义

  • 缺陷:人们经验概念。
  • 缺陷检测:监测需要分为3个层次。
    (1)分类任务——缺陷是什么?(反馈图像中缺陷的类别信息)
    (2)定位任务——缺陷在哪里?(严格意义的缺陷检测,既反馈图像中缺陷的类别信息,又反馈缺陷的具体位置)
    (3)分割任务——缺陷有多少?(将缺陷逐像素从背景中分割出)
    三个阶段相互包含且可以相互转换!

二、表面缺陷检测深度学习方法

深度学习方法按照数据标签的不同划分为以下3类:
(1)全监督学习模型
(2)无监督学习模型
(3)其他方法(半监督学习模型与弱监督学习模型)
论文《基于深度学习的表面缺陷检测方法综述》学习笔记_第1张图片

  • 全监督学习模型:已知原始数据及标签
  • 1、表征学习:将缺陷检测问题作为计算机视觉中的分类任务,包含粗粒度的图像标签分类或区域分类,及像素分类。
  • 1.1 分类网络:AlexNet、VGG、GoogleLeNet、ResNet、DenseNet、SENet、ShuffleNet、MobileNet。
  • 1.1.1 直接利用网络进行分类
  • 1.1.1.1 原图分类:直接将采集的完整缺陷图像放入网络进行学习训练。
  • 1.1.1.2 定位感兴趣区域(ROI)后分类:由于某些场合下只需关注某个固定区域中是否存在缺陷,因此在得到ROI后将其输入网络进行缺陷类别判断。
  • 1.1.1.3 多类别分类:首先采用一个基础网络对缺陷样本与正常样本进行二分类,然后在同一个网络上共享特征提取部分,修改或者增加缺陷类别的分类分支。这种方法通过正常样本与缺陷样本之间的二分类给后续的多目标缺陷分类网络准备了一个预训练权重参数。
  • 1.1.2 利用网络进行缺陷定位:结合不同的技巧与方式,分类网络也可以实现缺陷定位与逐像素的分类。
  • 1.1.2.1 滑动窗口:缺陷粗定位。对于分辨率较大的的图像,通过较小尺寸的窗口在图像中进行亢余滑动,并将滑动窗口中的图像输入到分类网络中进行缺陷识别,最后将所有的滑动窗口进行全连接,即可进行缺陷的粗定位。
  • 1.2.2.2 热力图:这是一种反映图像中各区域重要性程度的图像,颜色越深代表越重要。在缺陷检测领域,颜色越深表示其属于缺陷的概率越大。
  • 1.2.2.3 多任务学习网络:在设计的分类网络中加上额外的分割分支,两分支共享特征提取的**骨架(backbone)**结果,网络最终就有了分类与分割两个输出,就构成了多任务学习网络。
  • 1.1.3 利用网络作为特征提取器:由于CNN强大的特征提取能力,将图像输入到预训练网络中获取图像表征特征,再将获取的特征输入到常规的机器学习分类器(如SVM)中进行分类。
  • 1.2 检测网络:当前,基于深度学习的目标检测方法有很多,**1)以Faster R-CNN为代表的两阶段网络;2)以SSD或者YOLO为代表的一阶段网络。**它们的区别在于两阶段网络需要首先生成可能包含缺陷的候选框,再进一步进行目标检测;而一阶段网络直接利用网络中提取的特征来预测缺陷的位置和类别。基于一阶段的模型主要应用在检测速度有需求的场合,基于两阶段的模型在检测精度方面有需求的场合。
  • 1.2.1 基于两阶段的缺陷检测网络:两阶段检测网络(Faster R-CNN)首先通过Backbone网络获取输入图像的特征图,利用区域生成网络(RPN)计算锚框(anchor box)置信度,获取Proposal区域。然后对该区域的特征图进行ROIPooling后输入网络,通过对初步检测结果进行精细调整,最终得到缺陷的定位和类别结果。因此,经常对Backbone的结构或其特征图、锚框比例、ROIPooling和损失函数等方面进行改进。
  • 1.2.2 基于单阶段的缺陷检测网络:单阶段检测网络(SSD和YOLO)都是利用整个图像作为网络的输入,直接在输出层回归边界框(Bounding box)的位置及其所属的类别。SSD的特点在于它引入了特征金字塔检测方式,从不同尺度的特征图中预测目标位置与类别。它使用6个不同特征图检测不同尺度的目标,一般底层特征图用于预测小目标,高层特征图预测大目标。
  • 1.3 分割网络:分割网络是将表面缺陷检测任务转化为缺陷与正常区域的语义分割甚至是实例分割问题,它不但能精细分割出缺陷区域,而且可以获取缺陷的位置、类别以及相应的几何属性(长度、宽度、面积、轮廓、中心等)。与分类和检测网络相比,它在缺陷信息获取上占有优势,但需要大量的标注数据,其标注信息是逐像素。
  • 1.3.1 全卷积神经网络(FCN)方法:是图像语义分割的基础,首先利用卷积操作对输入图像进行特征提取和编码,再通过反卷积操作或者上采样将特征图逐渐恢复到输入图像尺寸大小。
  • 1.3.1.1 常规FCN
  • 1.3.1.2 Unet:它不但是一种经典的FCN结构,也是典型的编码器——解码器(Encoder-decoder)结构。特点在于其引入了跳层连接,将编码阶段的特征图与解码阶段的特征图进行融合,有利于分个细节的恢复。
  • 1.3.1.3 SegNet:它也是典型的编码器——解码器(Encoder-decoder)结构。特点在于解码器中上采样操作利用了编码器中最大池化操作的索引。
  • 1.3.2 Mask R-CNN方法:是目前最常用的图像实例分割方法之一,可视为一种基于检测和分割网络相结合的多任务学习方法。当多个同类型缺陷存在粘连或者重叠时,实例分割能将单个缺陷进行分离并进一步统计缺陷数目,而语义分割往往将多个同类型缺陷作为整体进行处理。目前大部分文献都是直接将Mask R-CNN框架应用于缺陷分割。
  • 2、度量学习:它是利用深度学习直接学习输入的相似性度量,在缺陷分类任务中,往往采用孪生网络(Siamese network)进行度量学习。不同于表征学习输入单幅图像转换为分类任务,孪生网络的输入通常为两幅或多副成对图像,通过网络学习出输入图像的相似度,判断其是否属于同一类。孪生网络损失函数的核心思想是让相似的输入距离尽可能小,不同类别输入的距离尽可能大。一半原始孪生网络的输入是两幅成对图像,网络的“连体”是通过共享权值实现的。除了缺陷分类,也能用于缺陷定位与检测。度量学习可以近似视为学习样本在特征空间进行聚类,表征学习可以近似视为学习样本在特征空间的分界面。因此,度量学习的方法常用在缺陷分类任务中。
  • 无监督学习模型:已知数据未知标签
  • 1.正常样本学习:当前在表面缺陷检测中常采用基于正常样本学习的方法(One-class learning)。正常样本学习的网络只接受正常(无缺陷)样本进行训练,因此它具备强大的正常样本分布的重建和判别能力。所以当输入的样本存在缺陷时,会产生与正常样本不同的结果。对比于有监督学习模型,这种学习方式能够检测到偏离预期的模式或者没有见过的模式,即缺陷或异常。
  • 1.1 基于图像空间的方法:在图像空间上对缺陷进行检测,不仅可以实现图像级别的分类和识别,还能够获取到缺陷的具体位置。
  • 1.1.1 利用网络实现样本重建与补全:这种方法的原理与去噪编码器类似,当输入任意样本图像到网络中,都可以得到其重建后对应的正常(无缺陷)样本。因此该网络可以视为是具备自动修复或者补全缺陷区域的能力。用输入图像分别减去这些重建或者修复图像可以获得残差图像,即重建误差。当重建误差过大时,可以认为输入图像存在缺陷,差异过大的区域即为缺陷区域。当重建误差很小时,可以认为输入图像为正常样本。
  • 1.1.2 利用网络实现异常区域分类:通常采用GAN的判别器。原理是训练生成对抗网络GAN以生成类似于正常表面图像的伪图像,这表明训练完成的GAN可以在潜在特征空间中很好的学习正常样本图像。所以GAN的判别器可以自然的用于分类器,用于分类缺陷和正常样本。
  • 1.2 基于特征空间的方法:这是一种在特征空间中通过正常样本与缺陷样本特征分布之间的差异(异常分数)来进行缺陷检测,当异常分数高于某个值时,即认为出现缺陷。
  • 当前,基于正常样本学习的方法经常用于简单统一的纹理表面缺陷检测,但在复杂的工业检测环境下,它的检测效果没有监督学习方法检测效果好。
  • 其他方法(弱监督与半监督学习)
  • 当前,相对于全监督和无监督的学习方法,弱监督和半监督方法在表面缺陷检测中的应用相对较少。基于弱监督的方法是指采用图像级别类别标注(弱标签)来获取分割/定位级别的检测效果。

三、表面缺陷检测的关键问题及解决办法

1、小样本:
(1)数据扩增、合成与生成

  • 数据扩增:对原始数据图像进行镜像、旋转、平移、扭曲、滤波、对比度调整。
  • 数据合成:将单独缺陷融合叠加到正常(无缺陷)样本上构成缺陷样本。
  • 数据生成:生成缺陷并融合至正常样本(GAN应用于表面缺陷样本生成)。

(2)网络预训练与迁移学习(较常用)
(3)合理的网络结构设计
(4)采用无监督与半监督模型方法
2.实时性:
采用基于深度学习的缺陷检测方法在工业应用中包括三个主要环节:

  • (1)数据标注
  • (2)模型训练
  • (3)模型推断
  • 工业应用中的实时性更加关注模型推断这一环节。
  • 加速模型的方法:
    1)模型权重量化
    2)模型剪枝

四、缺陷检测的数据集

(1)分类任务
1)钢材表面:NEU-CLS:http://faculty.neu.edu.cn/yunhyan/NEU_surface_defect_database.html
2)太阳能板:elpv-dataset:https://github.com/zae-bayern/elpv-dataset
3)金属表面:KolektorSSD:http://www.vicos.si/Downloads/KolektorSDD
4)木材表面:wood deect database:http://www.ee.oulu.fi/Olli/PROjecTS/LUmbeR.GRadiNg.hTml
(2)定位任务
1)钢材表面:NEU-DET:http://faculty.neu.edu.cn/YUNhYaN/NEU_SURface_defecT_daTabaSe.hTml
2)铸件X射线图像:GDXray Casting:https://domingomery.ing.puc.cl/maTeRial/gdXRaY/
(3)分割任务
1)磁瓦表面:Magnetic-tile-defect-datasets:https://github.com/abiN24/MagNeTic-Tile-defecT-daTaSeTS
2)钢轨表面:RSSDs dataset:http://icn.bjtu.edu.cn/ViSiNT/ReSOURceS/RSDDS.aSPX
3)地面裂纹:Crack_Dataset:https://drive.google.com/dRiVe/fOldeRS/1cPlcUBmgHfD82YQTWNN1dSSK2Z_XRPjX
4)桥梁裂缝:Bridge Cracks:https://github.com/maWeifei/BRidgeCRack_Image_DaTa
(4)孪生网络
1)PCB板:PCB Dataset:https://github.com/tangsanli5201/DeepPCB
(5)无监督学习
1)多种材质缺陷:MVTec AD:http://www.mvtec.com/cOmPaNY/ReSeaRch/daTaSeTS
2)扫描隧道显微镜成像SEM材料表面:Nano TWICE:http://www.mi.imati.cnr.it/eTTORe/NaNOTWICE/
(6)弱监督学习
2)纹理缺陷:DAGM 2007:https://hci.iwr.uni-heidelberg.de/node/3616

基于滑动窗口和多类别分类相结合的网络达到99.8%的分类准确率,是目前基于深度学习的缺陷分类方法在该数据集上的最高水平!

五、当前需要解决的问题

(1)网络结构设计
(2)网络训练学习
(3)异域书记联邦学习

你可能感兴趣的:(深度学习,目标检测,计算机视觉,机器学习,人工智能,深度学习)