缺陷检测是工业视觉领域非常重要的应用之一。几乎所有的工业产品在流入市场之前都会有缺陷检测的环节,目的是确保产品是合格的。
对产品进行缺陷检测时,分为人工目视检测和工业视觉检测。利用工业视觉做缺陷检测时,常用的解决思路如下:
Ⅰ、传统图像算法
用传统图像算法做缺陷检测时,方法有二:
①特征工程
特征工程是缺陷检测中最常用的方法。特征工程是通过传统图像算法分析图像灰度值、方差、均值、颜色、型状、轮廓、面积等特征去检测缺陷,方法非常灵活,开发速度也快。在应用层面,一般会将缺陷特征的相关参数开放到软件端,供使用者灵活调整。
②模板匹配
模板匹配是通过预设一些图像模板,将图像模板与待测图像进行比较,以达到识别缺陷的目的。这种算法应用有限,举个例子,做某品牌饮料瓶标签的缺陷检测,会利用方法①特征工程的技术识别部分缺陷类型,但也会利用模板匹配,通过预设一些标签图像模板去匹配待测图像,以判断标签是否有缺陷。
Ⅱ、CV算法
计算机视觉算法即CV(Computer Vision)算法,是指让计算机理解图像的一种技术,属于AI(Artificial Intelligence)算法的分支之一。
在工业视觉领域,处理对象是图像,故提到AI算法便是CV算法。也许AI算法听起来高级,所以在工业视觉领域,大家一般多说AI算法,不怎么提CV算法。
图像分类、目标检测、语义分割、实例分割、目标跟踪、OCR、人脸识别、图像生成、异常检测、等都属于CV算法。其中,在工业视觉缺陷检测领域应用较多的CV算法为图像分类、目标检测、实例分割。
①图像分类
图像分类,顾名思义,是对图像进行分类并确定图像类别的一种算法。根据分类任务不同,图像分类又分为单标签分类和多标签分类。常用的分类网络有ResNet、MobileNet、EfficientNet等。
在工业视觉领域,理论上讲,可以利用图像分类算法对整张图像直接分类,以确定其缺陷类别。由于工业相机拍摄的视野问题,会使整张图像除了目标区域外,还会包含很多无关的背景,这些无关的背景会干扰图像分类模型的训练,导致图像分类算法的准确率低,因此实际项目中,极少利用图像分类算法直接对整张图进行分类。
②目标检测
目标检测算法是在图像中对所有感兴趣的目标,用检测框定位目标的位置和类别,如下图1所示。这种方法简单粗暴,即通过标注大量缺陷数据集,训练一个具有缺陷检测能力的目标检测模型。
图1 目标检测示例
最经典目标检测算法首推YOLO系列,准确率高且推理速度快,属于非常优异的算法。在实际应用中,需要对图像进行尺寸的缩放,使图像大小符合目标检测模型所要求的尺寸。如果原图很大,缺陷很小,使缺陷在原图中占比很小,比如点状的微小缺陷,可能会使图像在预处理缩放过程中,将缺陷丢失。因此,如果有此类问题的风险,一般会将原图进行裁剪为多份,比如10000*5000分辨率的图像,拆分为10张2000*2500分辨率的图像,然后对这10张图像单独进行检测,最后将检测结果汇总。
此类方法也有弊端,那就是数据集,成也数据集,败也数据集。因为目标检测算法属于有监督学习,依赖大量的数据集,如果数据集不够,会导致算法准确率低。实际项目中,往往需要持续收集数据,反复多次迭代模型,才能达到理想效果。
③实例分割
实例分割是目标检测的升华版本,即在目标检测的基础上用更精细的mask进行定位,而非检测框,如图2所示。
图2 实例分割示例
YOLO算法的原创作者Joseph Redmon在他YOLOv3论文的最后写了这样一句话:Boxes are stupid anyway though, I’m probably a true believer in masks except I can’t get YOLO to learn them。由此可见,Joseph Redmon是认可mask而非box。
将实例分割算法应用到缺陷检测上,可以获得比目标检测算法更加精准的缺陷定位,这是有利于缺陷检测的。另一方面,当不同的缺陷离得很近,并且出现交叉或者包含的情况,目标检测算法很难获得较好的类别区分,但是实例分割算法并没有这个困境。若用实例分割算法在尺寸很大的图像上进行缺陷检测时,处理方法与目标检测算法一致,也是将图像拆分。
实例分割算法和目标检测算法一样,都属于有监督学习,需要依赖大量的数据集。相比于目标检测算法拉框式的标注,实例分割算法标注的更为精确,标注工作量更大。实际项目中,实例分割算法往往也需要持续收集图像数据,反复多次迭代模型,才能达到理想效果。
PS:此处致敬一下Joseph Redmon大神,摘选他YOLOv3论文惊人敬佩的结束语,如下图3所示:
图3 YOLOv3论文摘选
Ⅲ、传统图像算法+CV算法
这种方法将传统图像算法和CV算法结合在一起,也是常用的策略。
通常是利用传统图像算法先定位缺陷,然后再将缺陷ROI图像传给AI分类算法进行分类。这种方法解决了传统图像算法定位容易,但是分类困难的问题。
结束语
工业视觉缺陷检测算法有很多,本文罗列了三大类主流方法,除了上述三大类,也有无监督学习算法、图像异常检测算法,读者感兴趣可自行检索研究。
任何一种缺陷检测算法都有自己的技术边界,在使用的时候,要具体情况具体分析,好的策略是将多种不同的算法组合使用,形成“绝对检测”。