当前位置: 首页 > news >正文

一种基于深度学习的织物缺陷检测方法

第一节:介绍

织物缺陷检测是织物生产过程中的重要步骤。人工用眼睛检查织物缺陷是织物工业中使用的传统方法,目视检查可以识别和定位缺陷。然而,人类的检测率只能达到每分钟12米,并且是一项单调的工作,重复率高,浪费人力资源和成本增加,使其不适合在批量生产中使用。随着CNN(卷积神经网络)的出现,以及深度学习和机器视觉的发展,许多结合深度学习和机器视觉优势的检测方法已经出现,取代了传统的手动方法和图像处理。

首先,分析K均值聚类算法,根据本文的目的选择最优锚点值。然后,分析了原始YOLOv4的SPP网的结构,总结了其缺点。针对上述不足,提出一种改进的YOLOv4算法,该算法具有改进的SPP(空间金字塔池化)和CLAHE(对比度限制自适应直方图均衡化)。最后,将改进后的YOLOv4与四种经典算法进行了比较:带有CLAHE的YOLOv4,原始的YOLOv4,Faster R-CNN和SSD(单发MutiBox检测器),其中maP是主要的性能评估指标。此外,还呈现了缺陷图像和检测效果图像,具有鲜明的对比度。

YOLOv4的最终预测部分在三个特征图中进行,每个特征图都有一个带有三个锚点的网格点。YOLO提前获取BBox(边界框)的宽度和高度参数。在回归预测阶段,只需要调整宽度和高度参数,而无需重新构建 BBox。因此,设置好的锚点参数可以加快网络训练的收敛速度。

YOLOv4的网络结构如下图所示,其中CSPdarknet53是引用ResNet 中残余块的骨干,并将CSPNet与YOLOv3的Darknet53相结合。YOLOv4还参考了SPP-Net和FPN-Net的思想,这些想法得到了改进,更适合缺陷检测。

 本文的其余部分组织如下:第二节回顾了深度学习和YOLOv4算法。第三节介绍了改进的YOLOv4算法和图像增强。第四节给出了改进后的YOLOv4与其他三种算法的实验结果:SSDFaster R-CNN和原始YOLOv4第五节总结了本文的一些要点。

第二节:相关资料

YOLO(你只看一次)是一种端到端的神经网络算法,从YOLOv1不断改进为YOLOv5。许多研究论文表明,YOLO比其他算法具有更好的速度和准确性。FPS(每秒帧数)和精度被综合考虑。提出一种基于YOLOv4的改进算法,对数据集中的图像进行提前增强,并将图像处理与深度学习相结合,提高检测结果。

首先,与常见缺陷相比,织物缺陷具有其自身的显着特征。在各种织物缺陷中,有一些在图像中占比比较大的缺陷,如纬线,翘曲,污渍,浮子和裂纹,通常是一个非常大的斑点,或者斑点与图像具有相同的宽度。然而,对于小目标,特别是只有几个像素的孔,检测缺陷非常困难,因为正负样本数量的不均匀使得单级网络难以学习小目标的特征。虽然这个问题也可能存在于两级网络中,但大量的负样本对检测的影响很小,因为区域建议网络(RPN)消除了许多负样本。为了解决单级网络中正样本和负样本数量不平衡的问题,何凯明提出焦损法(焦点损失),该方法可以降低大样本损失的权重,增加小样本在总损失中的权重。然而,焦损在实际应用中并不有效,并且降低了mAP。因此,两级网络的精度一般要高于单级网络。但是,以Faster R-CNN为代表的的两阶段网络总体上比其他网络低。因此,本文不采用两级网络。

作为典型的一阶算法之一,YOLO已经经过了许多人的改进。YOLO算法发展迅速,包括具有各种极限精度问题的YOLOv1,在YOLOv2 和YOLOv3中得到了进一步改进。与YOLOv1,YOLOv2和YOLOv3相比,YOLOv4具有更好的性能,并使用技巧来提高准确性。例如,采用镶嵌数据增强、MISH激活函数、K均值聚类算法、FPN-net、PAN-net、SPP-net和CSPdarknet53作为骨干。与二阶算法相比,YOLO表示的单阶算法可以满足实时检测的要求。

对于原始 YOLOv4,如果416×416 图像用作主干的输入,特征图的生成大小为(52,52,256),(26,26,512)和(13,13,1024),并将在最终预测中恢复为原始大小。原始YOLOv4骨干的底部特征图是(13,13),经过三次卷积后通过SPP结构。YOLOv4的原始SPP结构与SPP-net不同,SPP-net只有三个最大池化分支,并将结果转换为一维向量,然后进行全连接分类。原始YOLOv4中的SPP结构使用四个分支。在最终输出中,四个通道的结果被叠加,最终通道数被翻了两番。经过三次卷积后,通道数减少,然后输出到FPN结构。

原来的SPP使用Maxpool,为每个部分最大化池化,并解决了输入CNN的图像大小应该固定的问题。SPP结构可以有效地扩大感受场,并且通过组合具有不同内核大小的池化层可以更全面地获得上下的特征。池化层是CNN网络的关键组成部分,因为网络所需的参数大大减少,可以增加后续卷积的感受场。大多数框架采用Max Pooling或AVG Pooling(平均池化)。例如,SPP 结构采用三个具有不同内核大小的最大池化筛选器,但最大池化在从特定范围中选择最大值时会导致一些问题(例如3×3 ).虽然最大池可以减少参数的数量,但在选择过程中会丢失大量信息。此外,您不知道背景或目标的信息是否丢失,因为它仅选择具有最明显特征的点作为邻域的代表。如果背景与目标相似,则很容易丢失有用的信息。在织物缺陷的检测中,由于缺陷与背景非常相似,在SPP中使用max pooling会影响检测性能,并有失去重要特征的风险。相比之下,虽然AVG池化考虑了邻域的所有特征并保留了更多的背景信息,但该区域的目标特征强度会降低,并且在取平均值后会忽略明显的特征。

第三节:改进的YOLOv4和图像增强

如果使用大量的最大池化,例如SPP结构,则缺陷位置的准确性将受到影响,这对于目标与背景相似的织物缺陷的分类任务非常具有破坏性。由于使用了最大池化,具有三个SPP结构的YOLOv4的mAP很可能低于具有一个SPP的对应物。改进后的SPP结构如下图所示。

 改进的 SPP 使用软池化,该软件池根据元素的相应值按比例选择特征图,从而避免了 Maxpool 缺少某些细节的优势。此外,在骨干输出三个特征图后,采用改进的SPP;结构如下图所示。

 改进后的YOLOv4采用基于softmax的改进型SPP,在改进的SPP的上部和中间增加了三个卷积,利用梯度信息提高训练效果,提高了计算速度,减少了运行内存。

为了将PANet(路径聚合网络)输入到具有改进的SPP结构的所有特征图中,在改进的SPP的上部和中间添加3个卷积,并将结果调整为(52,52,128)和(26,26,26,256)。为了减少参数并提高网络速度,从两个骨干分支中删除了$1\乘以1$Conv,这允许输入到改进的SPP结构中的数据包含更详细的信息。

与最初的YOLOv4相比,改进的网络将mAP升级了约6%。Stergiou、Poppe 和 Kalliatakis 提出的软池化可以有效解决最大池化中缺少细节的问题。软池类似于随机池化和S3Pool(随机采样池化),后两者采用根据概率值选择特征图元素的想法,即选择的概率越大,元素值越大,这与最大池化不同,只选择具有最大值的元素。这种选择方法可以产生随机效果,有时是好的,有时也是坏的。因此,本文采用一种更好、更快的基于softmax的软池来代替max pooling。权重的显著性在于,该点的值越大,对结果的影响越大。数学表达式:

软池化的优点是软池化中填充0的方法与反向传播阶段的软池化不同,后者在具有梯度信息以提高训练效果方面有所不同。此外,运行速度和占用的内存小于最大池中的运行速度和内存。

 本文检测的面料图片与YOLOv4中COCO数据集的默认毛面有很大不同,因为这些锚点只代表了20个类的锚点值。因此,多次执行K-means,得到多组参数,其中宽度和高度参数平均,得到最合适回归的锚点。

数据集

 使用的数据来自于私人数据集,部分缺陷图片和类别如图:

总共分为四类瑕疵:LINE(线条)缺陷、FLOATS(浮毛)缺陷 、HOLE(破洞)缺陷、STAINS(污点)缺陷。重新分类的数据集将使用功能翻转和模糊增加样本总数。缺陷类别的数量如图:

 来自数据集的图像被增强以突出对比度,这明显提高了检测精度。对于图像增强,许多相对方法试图突出显示背景中的缺陷形式;采用Canny边缘检测运算符和Gabor滤波器来增强图像。但是,没有参数选择的最佳方法。最后,采用对比限制自适应直方图均衡化方法,mAP提高约0.6%。

CLAHE是HE(直方图均衡)的增强版本,是一种简单有效的图像增强方法,可以通过调整图像的灰度分布来增加图像的对比度。如果原始图像的像素值相对集中在灰色直方图中,HE可以增加像素之间的灰度差异范围,以获得更清晰的图像。HE的效果如下:(左HE,右原图)

 虽然HE处理的图像更清晰,对比度更强,但增强图像的某些灰度会消失,从而导致细节信息的丢失。此外,HE会导致过度增强,例如一些亮度非常低且对比度过大的区域,并在HE处理图像后成为噪声点。

通过对比可以得出结论,HE处理的图像的灰度直方图在整个范围内分布更均匀,即原始图像中的像素值被重新分布,并且某些灰色范围内的像素数大致相同。

 HE与CLAHE对比图:(左HE,右CLAHE)

 基于上述分析,采用以下方案:将灰度图像作为输入,然后通过高斯滤波进行处理以消除噪声,然后由CLAHE进一步处理以获得最终图像。

第四节:实验

实验方法

本文采用的深度学习框架是基于Windows 10平台的PyTorch 1.2。编程语言为Python3.6,图像处理采用OpenCV。骨干图像大小、learning_rate和decay_rate参数分别设置为416 x 416、0.001和0.93。学习率为o.93表示每个时代的学习率为前一个时代的0.93倍。训练1000个epoch,网络通过冻结训练NECK部分500个epoch,通过解冻训练骨干epoch。参数batch_size的设置已经根据最优batch_size在2到32之间进行了多次调整。冻结前设置Batch_size为16,解冻后根据计算机配置重置为4。改进的SPP架构需要测试来衡量它的改进;有些技巧,如Mosaic数据增强和余弦依赖调度器,有时运行良好,有时不稳定。经过1000次迭代后,损失值在0.4左右波动,证明本文提出的模型具有良好的性能,并且收敛。

利用VOC数据集中的索引mAP显示织物疵点检测结果,评价模型的准确性;不评估每个检测框的可视化。在评价目标检测模型的性能时,通常采用精度和召回率这两个指标,并预先设定IOU的阈值。当预测框与真实框的重叠程度大于IOU的阈值时,对应的样本称为正样本;或者,相应的样本称为负样本。查准率和查全率两个指标的数学表达式为:

 其中Tp为真实阳性样本数,Fp为假阳性样本数,FN为假阴性样本数。这两个指标不能单独评价性能,因此引入AP指标,其数学表达式如下:

 其中P表示准确率,R表示查全率,AP为PR的曲线积分。AP表示程度,是模型在分类任务中预测的结果。为了获得整体的预测程度,需要计算mAP指数。公式如下:

 其中N为类的总数,mAP在o到1之间。mAP越大,模型性能越好。本文设置的IOU阈值为0.5,相当于AP.5,在COCO数据集中称为AP50。

数据对比

本文对mAP、precision和recall三个性能指标进行了评价。共对改进SPP和CLAHE的YOLOv4、CLAHE的YOLOv4、原YOLOv4、Faster RCNN和SSD五种算法进行比较,结果如下表所示。因为原YOLOv4和改进后的YOLOv4的mAP和FPS是重点,理论上SSD和Faster R-CNN的FPS必须小于YOLOv4对应的部分,所以没有测试这两个的FPS。

改进的YOLOv4对数据集验证集上每个类的检测性能:

 原始YOLOv4对数据集验证集上每个类的检测性能:

通过上面两张表可以看出,与原YOLOv4相比,本文提出的改进后的YOLOv4有了较大的改进。对于小的织物缺陷HOLE,改进后的YOLOv4大大提高了召回率和准确率。然而,无论是原始的YOLOv4还是改进的YOLOv4都没有有效的提高召回率,这说明缺陷LINE与背景相似,这意味着BBox与GT BBox的重叠程度较低。虽然它正确地检测到目标,导致回忆率过低。最重要的是,具有3种SPP结构的YOLOv3-SPP3与具有1种SPP结构的YOLOv3-SPP1相比,mAP仅增加了o.9%;然而,推理速度降低了10毫秒。与之形成鲜明对比的是,三种SPP结构的改进的YOLOv4在提高mAP的同时降低FPS,幅度变化很小。改进后算法的损失函数曲线如下图所示:(左原始,右改进)

 经过 1000 次迭代后,模型的最终总损失稳定在大约 0.4,值集的损失稳定在大约 6。模型的缺失呈现下降趋势,这证明我们的模型正在学习。在后期阶段,我们手动调整学习速率,以进一步减少损失。所有算法的检测效果如图:

 对于同一图像的检测时间,原始YOLOv4需要42ms,而改进的YOLOv4需要48ms,两者都很短。

上述检测结果进一步证明,改进后的YOLOv4具有稳定和更高的精度,原来的YOLOv4和改进的YOLOv4具有相同的检测精度0.98。但对于其他缺陷,改进的YOLOv4在不同程度上提高了检测精度。

第五节:结论

本文提出的模型针对接近背景形状的小布料缺陷区域进行了改进,克服了传统人工检测效率低下的特点。与原来的YOLOv4相比,改进的YOLOv4将mAP提升了6%,而FPS仅降低了2个。

首先,我们根据缺陷的特征重新划分锚点,并取平均值,使锚点更适合应用。然后,我们使用CLAHE处理图像以删除不相关的颜色信息并突出显示图像中的对比度。最后,我们通过使用软池化而不是最大池化来改进 SPP 结构。

相关文章:

  • 工厂如何实现智能制造?有哪些需要注意的?
  • 如何提高自己的软件测试水平之bug定位
  • 2、一起探讨MySQL 安装
  • 北大肖臻老师《区块链技术与应用》系列课程学习笔记[26]以太坊-TheDao
  • openlayers 绘制tin数据导文
  • Web字体的使用
  • [设计模式]单例模式的详解与用法
  • Polygon zkEVM zkASM编译器——zkasmcom
  • 社交媒体用户信息回避行为的影响因素分析
  • 你期待在海上坐高铁吗?中国首条跨海高铁——福厦高铁来了
  • 种草营销怎么玩?如何借小红书KOL、KOC笔记种草提升转化效果
  • GBase 8s 的导入导出工具介绍
  • Delegation in C++
  • 软考高级系统架构设计师系列论文一:论软件架构的选择与应用
  • TS学习笔记
  • “大数据应用场景”之隔壁老王(连载四)
  • 2017 年终总结 —— 在路上
  • Apache的基本使用
  • css布局,左右固定中间自适应实现
  • git 常用命令
  • Hexo+码云+git快速搭建免费的静态Blog
  • Javascript 原型链
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • PHP 的 SAPI 是个什么东西
  • PHP变量
  • Spark RDD学习: aggregate函数
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 工作中总结前端开发流程--vue项目
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 人脸识别最新开发经验demo
  • 如何解决微信端直接跳WAP端
  • 时间复杂度与空间复杂度分析
  • 提醒我喝水chrome插件开发指南
  • 一、python与pycharm的安装
  • 一个完整Java Web项目背后的密码
  • 用element的upload组件实现多图片上传和压缩
  • 责任链模式的两种实现
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • 阿里云移动端播放器高级功能介绍
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • !!Dom4j 学习笔记
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • .NET Core Web APi类库如何内嵌运行?
  • .net mvc部分视图
  • .NET 回调、接口回调、 委托
  • .netcore 如何获取系统中所有session_如何把百度推广中获取的线索(基木鱼,电话,百度商桥等)同步到企业微信或者企业CRM等企业营销系统中...
  • .Net环境下的缓存技术介绍
  • .NET中 MVC 工厂模式浅析