题目: 基于深度学习的表面缺陷检测方法综述
作者: 陶显,侯伟,徐德
收稿日期: 2019-11-27
网络首发日期: 2020-04-02
1 缺陷检测问题的定义
缺陷的定义: 在机器视觉任务中, 缺陷倾向于是人类经验上的概念, 而不是一个纯粹的数学定义。
第
一种有监督的方法体现在利用标记了标签(包括类别、矩形框或逐像素等)的缺陷图像输入到网络中进行训练. 此时\缺陷"意味着标记过的区域或者图像。
第二种是无监督的缺陷检测方法, 通常只需要正常无缺陷样本进行网络训练, 也被称为one-class learning. 该方法更关注无缺陷(即正常样本)特征, 当缺陷检测过程中发现没有见过的特征(异常特征)时, 即认为检测出缺陷. 此时\缺陷"意味着异常, 因此该方法也被称作异常检测(Anomaly Detection).
缺陷检测的定义: 对比计算机视觉中明确的分类、检测和分割任务, 缺陷检测的需求非常笼统. 实际上, 其需求可以划分为三个不同的层次: \缺陷是什么"、 \缺陷在哪里"和\缺陷是多少". 第一阶段\缺陷是什么"对应计算机视觉中的分类任务, 如图2中分类三种缺陷类别: 异色、空洞和经线, 这一阶段的任务可以被称为\缺陷分类", 仅仅给出图像的类别信息. 第二阶段\缺陷在哪里"对应计算机视
觉中的定位任务, 这一阶段的缺陷定位才是严格意义上的检测. 不仅获取图像中存在哪些类型的缺陷,而且也给出缺陷的具体位置, 如图2中将异色缺陷用矩形框标记出来. 第三阶段\缺陷是多少"对应计算机视觉中的分割任务, 如图2中缺陷分割的区域所示,将缺陷逐像素从背景中分割出来, 并能进一步得到缺陷的长度、面积、位置等等一系列信息, 这些信息能辅助产品高一级的质量评估, 例如优劣等级的判断. 虽然缺陷检测的三个阶段的功能需求和目标不同, 但实际上三个阶段互相包含且能相互转换. 例如第二阶段\缺陷定位"包含第一阶段\缺陷分类"这
一过程, 第三阶段\缺陷分割"同时也能完成第二阶段\缺陷定位". 第一阶段\缺陷分类"也能通过一些方法实现第二阶段和第三阶段的目标. 因此, 在后文还是按照传统工业习惯统称为缺陷检测, 只是在针对不同网络结构和目标功能时, 才有所区分.
2 表面缺陷检测深度学习方法
本节总结概述基于深度学习的表面缺陷检测方法. 如图3所示, 依据数据标签的不同, 将其整体分为全监督学习模型、无监督学习模型和其他方法(半监督学习模型和弱监督学习模型). 在全监督模型中, 依据输入图像方式和损失函数的差异, 分为基于表征学习和度量学习的方法. 在表征学习中, 根据网络结构的不同可以进一步细分为分类网络、检测网络和分割网络. 目前大量的研究工作都是着眼于全监督学习方向, 但无监督学习同样是一个值得研究的方向. 从图3中可以看出, 本文按照每类方法的处理特点又细分为若干种不同的子方法。
2.1 表征学习
现阶段大部分基于深度学习的表面缺陷检测是基于有监督的表征学习方法. 表征学习的本质是将缺陷检测问题看作计算机视觉中的分类任务, 包括粗粒度的图像标签分类或区域分类, 以及最精细的像素分类.
2.1.1 分类网络
在真实的工业生产中, 检测对象形状、尺寸、纹理、颜色、背景、布局和成像光照的巨大差异使复杂环境下的缺陷分类成为一项艰巨的任务. 由于CNN强大的特征提取能力, 采用基于CNN的分类网络目前已成为表面缺陷分类中最常用的模式.通常CNN分类网络的特征提取部分由级联的卷积层+pooling层组成, 后面连接全连接层(或averagepooling层)+softmax结构用于分类. 一般来说,现有
表面缺陷分类的网络常常采用计算机视觉中现成的网络结构, 包括AlexNet[5], VGG[6], GoogLeNet[7],ResNet[8], DenseNet[9], SENet[10], Shu†eNet[11],
MobileNet[12] 等. 或者针对实际问题搭建简易的网络结构, 通过输入一张测试图像到分类网络中, 网络输出该图像的类别和其类别的置信度. 依据分类网络方法实现任务的差异, 我们将其细分为三个小类:直接利用网络做分类、利用网络做缺陷定位和利用网络作为特征提取器.
a.直接利用网络做分类
1)原图分类即直接将收集的完整缺陷图像放入网络进行学习训练
2)定位ROI后分类.它在许多工业应用中较为常见. 通常来说, 针对获取到的整张图像中, 我们常常只关注某个固定区域中是否存在缺陷, 因此往往预先获取到感兴趣的区域(ROI), 然后将ROI输入网络进行缺陷类别的判断.
3)多类别分类.
当待分类的缺陷类型超过2类时, 常规的缺陷分类网络与原图分类方法一样, 即网络的输出节点为缺陷类型的数目+1(包括正常类别). 但多类别分类方法往往先采用一个基础网络进行缺陷与正常样本二分类, 然后在同一个网络上共享特征提取部分, 修改或者增加缺陷类别的分类分支. 通过该方式相当于给后续的多目标缺陷分类网络准备了一个预训练权重参数,这个权重参数是通过正常样本与缺陷样本之间二分类训练得到
b.利用网络做缺陷定位
一般认为, 分类网络只能完成图像标签级别的分类, 实际上结合不同的技巧和方式, 分类网络也可以实现缺陷的定位与逐像素的分类. 根据采用的手段不同, 它进一步可以分为滑动窗口、热力图(heatmap)和多任务学习网络三种形式.
1)滑动窗口
是最简单和直观的实现缺陷粗定位的方法. 一般工业表面缺陷检测处理的图像分辨率较大, 通过较小尺寸的窗口在原始图像上进行冗余滑动, 将滑动窗口中的图像输入到分类网络中进行缺陷识别.最后将所有的滑动窗口进行连接, 即可获得缺陷粗定位的结果.
2)热力图(heatmap)
是一种反映图像中各区域重要性程度的图像, 颜色越深代表越重要.在缺陷检测领域, 热力图中颜色越深的区域代表其属于缺陷的概率越大。在热力图基础上运用Otsu大津法[34]和图割算法进一步得到准确的缺陷轮廓区域. 在计算机视觉领域, 常采用CAM(Class Activation Mapping)[35]和GradCAM[36]方法获得heatmap,
. 3)多任务学习网络.
单纯的分类网络不加其他技巧的话, 一般只能实现图像级别的分类. 因此, 为了精细定位缺陷位置, 往往设计的网络会加上额外的分割分支, 两个分支共享特征提取的backbone结果, 这样网络一般有分类和分割两个输出, 构成多任务学习网络
c.利用网络做特征提取器
在早期基于深度学习的缺陷分类方法中, 不少文献利用CNN特征提取的强大功能, 先将图像输入到预训练网络中获取图像表征特征, 再将获取的特征输入到常规的机器学习分类器(例如SVM等)中进行分类.
2.1.2 检测网络
目标定位是计算机视觉领域中最基本的任务之一, 同时它也是和传统意义上缺陷检测最接近的任务, 其目的是获得目标精准的位置和类别信息. 目前, 基于深度学习的目标检测方法层出不穷, 一般来说, 基于深度学习的缺陷检测网络从
结构上可以划分为: 以Faster R-CNN[43]为代表的两阶段(two stage)网络和以SSD[44]或YOLO[45]为代表的一阶段(one stage)网络. 两者的主要差异在于两阶段网络需要首先生成可能包含缺陷的候选框(proposal), 然后在进一步进行目标检测. 一阶段网络直接利用网络中提取的特征来预测缺陷的位置和类别
a.基于两阶段的缺陷检测网络
两 阶 段 检 测 网 络(Faster R-CNN)的 基 本 流程是首先通过backbone网络获取输入图像的特征图, 然后利用RPN计算锚框(anchor box)置信度, 获 取proposal. 然 后 对proposal区 域 的 特 征图进行ROIpooling 后输入网络, 通过对初步检测结果进行精细调整, 最终得到缺陷的定位和类 别 结 果.
b.基于单阶段的缺陷检测网络
单阶段检测网络分为SSD和YOLO两种, 两者都是利用整张图作为网络的输入, 直接在输出层回归bounding box(边界框)的位置及其所属的类别.SSD的特点在于引入了特征金字塔检测方式, 从不同尺度的特征图中来预测目标位置与类别. 它使用6个不同特征图检测不同尺度的目标, 一般底层特征图用于预测小目标, 高层特征图预测大目标.
2.1.3 分割网络
分割网络将表面缺陷检测任务转化为缺陷与正常区域的语义分割甚至实例分割问题, 它不但能精细分割出缺陷区域, 而且可以获取缺陷的位置、类别以及相应的几何属性(包括长度、宽度、面积、轮廓、中心等). 按照分割功能的区别, 其大致可以分为: FCN[60](Fully Convolutional Networks)方法和Mask R-CNN[61]方法两种
a.FCN方法
全卷积神经网络(FCN)是图像语义分割的基础, 目前几乎所有的语义分割模型都是基于FCN.FCN首先利用卷积操作对输入图像进行特征提取和编码, 然后再通过反卷积操作或上采样将特征图逐渐恢复到输入图像尺寸大小. 依据FCN网络结构的差异, 其缺陷分割方法可以进一步细分为常规FCN、Unet[62]和SegNet[63]三种方法.1)常规FCN方法. Wang[64]等人提出一种基于FCN的
轮胎X射线图像缺陷分割方法, 相比于原始FCN方法, 文章通过融合多尺度采样层的特征图来细化分割轮胎图像中的缺陷. Yu等人[65]提出了一个基于FCN的两阶段表面缺陷分割模型, 第一阶段采用一个轻量级的FCN快速获取粗略缺陷区域, 然后第一阶段的输出作为第二阶段FCN的输入用于细化缺陷分割结果, 该方法在公共数据集DAGM2007上取得了95.9934%的平均像素准确率. Dung等人[66]采用基于VGG16编码器的FCN网络对混凝土表面裂缝进行分割, 其平均像素准确率达到90%.
2)Unet方法. Unet不仅是一种经典的FCN结构, 同时也是典型的编码器-解码器(encoder-decoder)结构. 它的特点在于引入了跳层连接,将编码阶段的特征图与解码阶段的特征图进行融合, 有利于分割细节的恢复.
3)SegNet方法. 它也是一种经典的编码器-解码器结构. 其特点在于解码器中的上采样操作利用了编码器中最大池化操作的索引
b.Mask R-CNN方法
Mask R-CNN是目前最常用的图像实例分割方法之一, 可以被看作是一种基于检测和分割网络相结合的多任务学习方法. 当多个同类型缺陷存在粘连或重叠时, 实例分割能将单个缺陷进行分离并进一步统计缺陷数目, 然而语义分割往往将多个同类型缺陷当作整体进行处理. 目前大部分文献都是直接将Mask R-CNN框架应用于缺陷分割, 例如路面缺陷分割[82]、工业制造缺陷[83]、螺栓紧固件缺陷[84]和皮革表面缺陷[85].相比分类和检测网络方法, 分割方法在缺陷信息获取上有其优势. 但它与检测网络一样, 需要大量的标注数据, 其标注信息是逐像素, 往往花费大量的标注精力和成本
2.2 度量学习
度量学习是使用深度学习直接学习输入的相
似性度量. 在缺陷分类任务中, 往往采用孪生网
络(Siamese network)进行度量学习. 不同于表征学
习输入单张图像转化为分类任务, 孪生网络的输入
通常为两张或多张成对图像, 通过网络学习出输入
图片的相似度, 判断其是否属于同一类. 孪生网络损
失函数的核心思想是让相似的输入距离尽可能地小,
不同类别的输入距离尽可能地大
**孪生网络:**一般原始孪生网络的输入是两张成
对的图像, 网络的\连体"是通过共享权值来实现的.
Kim等人[86]设计了一个基于CNN结构的孪生网络对
钢表面缺陷图像进行分类, 首先将两张图像输入到
共享权值的CNN中完成特征提取, 然后利用基于相
似度函数的对比损失计算两个特征之间的差异程
度.
2.3 正常样本学习
目前最常用于表面缺陷检测的无监督学习模型
是基于正常样本学习的方法. 由于只需要正常无缺
陷样本进行网络训练, 该方法也常被称为one-class
learning. 正常样本学习的网络只接受正常(无缺陷)样本进行训练, 使得其具备强大的正常样本分布
的重建和判别能力. 因此, 当网络输入的样本存在缺
陷时, 往往会产生与正常样本不同的结果. 相比于有
监督学习模型, 它能够检测到偏离预期的模式或没
有见过的模式, 这些模式都可以被称为缺陷或者异
常. 依据处理空间的不同, 本文将该缺陷检测方法分
为基于图像空间和特征空间两种. 通常该方法采用
的网络模型为自编码器(autoencoder, AE)和GAN
2.3.1 基于图像空间
基于图像空间的方法是在图像空间上对缺陷进
行检测. 因此, 该方法不仅能实现图像级别的分类
和识别, 也可以获取到缺陷的具体位置. 该方法常用
的手段有两种, 1)利用网络实现样本重建与补全.
其原理类似去噪编码器, 当输入任意样本图像到网
络中, 都可以得到其重建后对应的正常(无缺陷)样
本, 因此, 网络可以看作具备自动修复或者补全缺
陷区域的能力. 用输入图像分别减去这些重建或修
复图像可以获得残差图像, 这些残差图像也被称为
重建误差. 它能作为判断待检测样本是否异常的指
标. 当重建误差过大时, 可以认为输入图像认为存
在缺陷,差异过大的区域即为缺陷区域. 当重建误差
很小, 即认为输入图像是正常样本.
2)利用网络实现异常区域分类. 这类网络通常
采用GAN的判别器. 该方法原理是训练生成对抗网
络GAN以生成类似于正常表面图像的伪图像, 这意
味着训练好的GAN可以在潜在特征空间中很好地
学习正常样本图像. 因此, GAN的判别器可以自然
地用作分类器, 用于分类缺陷和正常样本.