本发明涉及深度学习技术领域,特别涉及一种基于yolo3网络的布匹瑕疵检测方法。
背景技术:
在布匹的实际生产过程中,由于各方面影响,会产生污渍、破洞、毛粒等各种瑕疵,为保证产品质量,需要对布匹进行瑕疵检测。布匹疵点检验是纺织行业生产和质量管理的重要环节,但是由于布匹疵点种类繁多、形态变化多样、观察识别难道大,导致布匹疵点智能检测是困扰行业多年的技术瓶颈。
传统的人工检测的方法易受主观因素影响,缺乏一致性;并且检测人员在强光下长时间工作对视力影响极大。
近年来,随着人工智能技术突飞猛进,尤其是深度学习的技术已经成功的应用到很多领域中,例如图像识别、语音识别、nlp和目标检测等领域中,在工业质检场景中也取得了不错的成果。纺织行业迫切希望借助最先进的技术,实现布匹疵点智能检测。
针对以上情况,本发明提出了一种基于yolo3网络的布匹瑕疵检测方法。
技术实现要素:
本发明为了弥补现有技术的缺陷,提供了一种简单高效的基于yolo3网络的布匹瑕疵检测方法。
本发明是通过如下技术方案实现的:
一种基于yolo3网络的布匹瑕疵检测方法,其特征在于:利用python语言实现,以yolo3网络为框架,利用回归损失函数和分类损失函数,对已标注的布匹样本进行训练,得到训练好的模型,通过训练好的模型检测布匹是否包含疵点,以及疵点的具体位置和类别。
该基于yolo3网络的布匹瑕疵检测方法,包括以下步骤:
第一步,准备布匹图像数据,对布匹图像数据中瑕疵位置以及瑕疵种类进行人工标注;
第二步,利用python中opencv包对标注后的图像数据进行图像增光;
第三步,将增光后图像数据转为pascalvoc数据集格式,并通过yolo3网络进行目标检测训练;
第四步,保存训练好的模型,并利用保存的模型对新的布匹图像数据进行预测,判断是否有瑕疵,并标定相应类别即可。
所述第一步中,使用labelimg工具对布匹图像数据进行人工标注,包括布匹缺陷类型c,以及缺陷位置坐标p=(x1,y1,x2,y2),其中(x1,y1),(x2,y2)分别代表图像左上角与右下角坐标。
所述第二步中,对标注后的布匹图像进行增光处理,包括进行水平与垂直翻转、模糊处理、亮度变换和扩充图像训练数据,同时注意增广后图像缺陷坐标转换。
所述第三步中,将进行增光处理后得到的的布匹图像数据集拆分为训练集和验证集,以80%数据作为训练集进行训练,剩下20%数据作为验证集进行验证。
所述第三步中,使用smoothl1loss函数作为回归损失函数,使用focalloss函数作为分类损失函数,对模型进行训练。
所述第三步中,对缺陷位置坐标p采用smoothl1loss函数作为回归损失函数,所述smoothl1loss函数公式如下:
其中,δ=3,x=p-p*;p(x1,y1,x2,y2)为缺陷位置实际坐标,p*(x1*,y1*,x2*,y2*)为缺陷位置预测坐标,对p和p*四个坐标点分别作差得到四个x,四个x分别求出其smoothl1损失,最后加和即可得到上述公式中的σsmoothl1(x)。
所述第三步中,对缺陷类型c采用focalloss函数作为分类损失函数,所述focalloss函数公式如下:
fl(pt)=-(1-pt)γlog(pt)
其中,p表示预测(predict)结果,y表示真实参考标准(groundtruthlabel)。
本发明的有益效果是:该基于yolo3网络的布匹瑕疵检测方法,利用yolo3网络架构进行缺陷检测,模型泛化能力强,可迁移性强,不仅革新了质检流程,能够自动完成质检任务,而且使用focalloss作为分类损失函数,解决了检测中正负样本比例严重失衡的问题,提高了检测精度。
附图说明
附图1为本发明基于yolo3网络的布匹瑕疵检测方法示意图。
具体实施方式
为了使本技术领域的人员更好的理解本发明中的技术方案,下面将结合本发明实施例,对本发明实施例中的技术方案进行清楚,完整的描述。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
yolo(youonlylookonce:unified,real-timeobjectdetection),是基于单个神经网络的目标检测系统,是一个可以一次性预测多个box位置和类别的卷积神经网络,能够实现端到端的目标检测和识别,其最大的优势就是速度快。事实上,目标检测的本质就是回归,因此一个实现回归功能的cnn并不需要复杂的设计过程。yolo没有选择滑动窗口(sildingwindow)或提取proposal的方式训练网络,而是直接选用整图训练模型。这种处理方式可以更好的区分目标和背景区域,相比之下,采用proposal训练方式的fast-r-cnn常常把背景区域误检为特定目标。
python语言是一种计算机程序设计语言,具体的说,是一种完全面向对象的动态类型语言。函数、模块、数字、字符串都是它的对象,并且完全支持继承、重载、派生、多继承,有益于增强源代码的复用性。python支持重载运算符和动态类型。
作为一种解释型脚本语言,python语言可以应用于web与internet开发、科学计算和统计、教育、桌面界面开发、软件开发以及后端开发等多个领域。
该基于yolo3网络的布匹瑕疵检测方法,利用python语言实现,以yolo3网络为框架,利用回归损失函数和分类损失函数,对已标注的布匹样本进行训练,得到训练好的模型,通过训练好的模型检测布匹是否包含疵点,以及疵点的具体位置和类别。
该基于yolo3网络的布匹瑕疵检测方法,包括以下步骤:
第一步,准备布匹图像数据,对布匹图像数据中瑕疵位置以及瑕疵种类进行人工标注;
第二步,利用python中opencv包对标注后的图像数据进行图像增光;
其中,opencv是一个计算机视觉和机器学习的开源库。拥有2500+个优化算法,是一套非常全面的既经典又最先进的计算机视觉和机器学习算法的集合。
第三步,将增光后图像数据转为pascalvoc数据集格式,并通过yolo3网络进行目标检测训练;
第四步,保存训练好的模型,并利用保存的模型对新的布匹图像数据进行预测,判断是否有瑕疵,并标定相应类别即可。
所述第一步中,使用labelimg(图像标注工具)工具对布匹图像数据进行人工标注,包括布匹缺陷类型c,以及缺陷位置坐标p=(x1,y1,x2,y2),其中(x1,y1),(x2,y2)分别代表图像左上角与右下角坐标。
所述第二步中,对标注后的布匹图像进行增光处理,包括进行水平与垂直翻转、模糊处理、亮度变换和扩充图像训练数据,同时注意增广后图像缺陷坐标转换。
所述第三步中,将进行增光处理后得到的的布匹图像数据集拆分为训练集和验证集,以80%数据作为训练集进行训练,剩下20%数据作为验证集进行验证。
所述第三步中,使用smoothl1loss函数作为回归损失函数,使用focalloss函数作为分类损失函数,对模型进行训练。
所述第三步中,对缺陷位置坐标p采用smoothl1loss函数作为回归损失函数,所述smoothl1loss函数公式如下:
其中,δ=3,x=p-p*;p(x1,y1,x2,y2)为缺陷位置实际坐标,p*(x1*,y1*,x2*,y2*)为缺陷位置预测坐标,对p和p*四个坐标点分别作差得到四个x,四个x分别求出其smoothl1损失,最后加和即可得到上述公式中的σsmoothl1(x)。
所述第三步中,对缺陷类型c采用focalloss函数作为分类损失函数,所述focalloss函数公式如下:
fl(pt)=-(1-pt)γlog(pt)
其中,p表示预测(predict)结果,y表示真实参考标准(groundtruthlabel)。
以上对本发明实例中的一种基于yolo3网络的布匹瑕疵检测方法进行了详细的介绍。本部分采用具体实例对发明的原理及实施方式进行了阐述,以上实例仅用于帮助理解本发明的核心思想,在不脱离本发明原理的情况下,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。