3.1 序言
传统的工业生产制造,由于科学技术的限制仍然主要采用人工检测的方法去检测产品表面的缺陷,这种方法由于人工的限制和技术的落后,不仅检测产品的速度慢、效率低下,而且在检测的过程中容易出错,从而导致了检测结果的不精确。
通过人工智能算法结合机器视觉技术,利用影像数据,实时对产品的斑点、凹坑、划痕、色差、缺损等缺陷进行检测,并支持工业摄像头、超声、微波、红外及激光全息和X摄像照相机等不同的图像信源,实现精确检测。
3.2 研究背景
当今社会,随着计算机技术,人工智能等科学技术的出现和发展,以及研究的深入,出现了基于机器视觉技术的表面缺陷检测技术。这种技术的出现,大大提高了生产作业的效率,避免了因作业条件,主观判断等影响检测结果的准确性,实现能更好更精确地进行表面缺陷检测,更加快速的识别产品表面瑕疵缺陷。
产品表面缺陷检测属于机器视觉技术的一种,就是利用计算机视觉模拟人类视觉的功能,从具体的实物进行图象的采集处理、计算、最终进行实际检测、控制和应用。产品的表面缺陷检测是机器视觉检测的一个重要部分,其检测的准确程度直接会影响产品最终的质量优劣。由于使用人工检测的方法早已不能满足生产和现代工艺生产制造的需求,而利用机器视觉检测很好地克服了这一点,表面缺陷检测系统的广泛应用促进了企业工厂产品高质量的生产与制造业智能自动化的发展。
3.3 研究意义
工业产品缺陷检测这块市场空间很大,目前除了传统的机器视觉厂商在做以外,深度学习创业巨头涉及的比较少。缺陷检测可以为工厂带来以下好处:
1、优化人力:人工检测易受经验和心里等因素的影响,精度低,稳定性差;解决劳动力短缺的问题;
2、非接触处理:避免二次损伤,提高可靠性;
3、降低成本:改善产线自动化,提高生产效率;协助作业人员消除生产错误、降低内部生产损失;早期就报废劣质产品,减少浪费节约成本;提高生产的柔性和自动化程度;
4、提高品质:产品品质均一,提升品牌竞争力。通过图像分析,可检测各种瑕疵位置、尺寸、形状和类型等;
5、高精度检测:某些要求精密度较高的检查领域、在配了合适的相机后,检测精度可达到u级,人眼无法检测可使用机器完成;
6、对缺陷进行分类:通过图像分析,检测出图像上各种瑕疵的位置、大小和形状,解析图像,并对其进行分类;
7、分析无规律图像、复杂图像:通过深度学习算法,系统可自动学习瑕疵特征,是无规律图像的分析变得可能;
3.4 产品缺陷检测模型介绍
Mask R-CNN的方法通过添加一个与现有目标检测框回归并行的,用于预测目标掩码的分支来扩展Faster R-CNN,通过添加一个用于在每个感兴趣区域(RoI)上预测分割掩码的分支来扩展Faster R-CNN,就是在每个感兴趣区域(RoI)进行一个二分类的语义分割,在这个感兴趣区域同时做目标检测和分割,这个分支与用于分类和目标检测框回归的分支并行执行,如下图(图1)所示(用于目标分割的Mask R-CNN框架):
掩码分支是作用于每个RoI的小FCN,以像素到像素的方式预测分割掩码,可是要在ROI区域进行一个mask分割,存在一个问题,Faster R-CNN不是为网络输入和输出之间的像素到像素对齐而设计的,如果直接拿Faster R-CNN得到的ROI进行mask分割,那么像素到像素的分割可能不精确,因为应用到目标检测上的核心操作执行的是粗略的空间量化特征提取,直接分割出来的mask存在错位的情况,所以作者提出了简单的,量化无关的层,称为RoIAlign(ROI对齐),可以保留精确的空间位置,可以将掩码(mask)准确度提高10%至50%。
3.5 实验分析
3.5.1 产品缺陷数据集
Kaggle钢铁表面缺陷检测数据集,数据集中,钢铁表面图像可以不具有缺陷、单个类别的缺陷或多个类别的缺陷,缺陷类别分为4类。
3.5.2 数据集转换方法
COCO数据集Json格式
{
"info": info,
"licenses": [license],
"images": [image],
"annotations": [annotation],
}
info{
"year": int,
"version": str,
"description": str,
"contributor": str,
"url": str,
"date_created": datetime,
}
license{
"id": int,
"name": str,
"url": str,
}
image{
"id": int,
"width": int,
"height": int,
"file_name": str,
"license": int,
"flickr_url": str,
"coco_url": str,
"date_captured": datetime,
}
annotations字段是包含多个annotation实例的一个数组,annotation类型本身又包含了一系列的字段,如这个目标的category id和segmentation mask。segmentation格式取决于这个实例是一个单个的对象(即iscrowd=0,将使用polygons格式)还是一组对象(即iscrowd=1,将使用RLE格式)。如下所示:
annotation{
"id": int,
"image_id": int,
"category_id": int,
"segmentation": RLE or [polygon],
"area": float,
"bbox": [x,y,width,height],
"iscrowd": 0 or 1,
}
COCO数据集的RLE都是uncompressed RLE格式(与之相对的是compact RLE)。 RLE所占字节的大小和边界上的像素数量是正相关的。RLE格式带来的好处就是当基于RLE去计算目标区域的面积以及两个目标之间的unoin和intersection时会非常有效率。 上面的segmentation中的counts数组和size数组共同组成了这幅图片中的分割 mask。其中size是这幅图片的宽高,然后在这幅图像中,每一个像素点要么在被分割(标注)的目标区域中,要么在背景中。很明显这是一个bool量:如果该像素在目标区域中为true那么在背景中就是False;如果该像素在目标区域中为1那么在背景中就是0。对于一个240x320的图片来说,一共有76800个像素点,根据每一个像素点在不在目标区域中,我们就有了76800个bit,比如像这样(随便写的例子,和上文的数组没关系):00000111100111110...;但是这样写很明显浪费空间,我们直接写上0或者1的个数不就行了嘛(Run-length encoding),于是就成了54251...,这就是上文中的counts数组。
3.5.3 实验环境
本文的实验环境如表5.1所示。
表5.1 实验环境
项目 说明
处理器 Intel Core i7
内存 32GB
系统类型 Ubuntu 16.01
显卡 GTX 1081ti
硬盘 256GB SSD
开发工具 Pycharm
开发语言 Python
3.5.4 实验结果
模型对单一背景的表面缺陷能较好的检测,复杂背景效果不好,模型还需要针对复杂背景进一步调优。