张欣宇,张 楠,王希彦,吴 玉,刘 鹏,谢 斌,张文硕,王延忠
(1.北京航空航天大学 机械工程与自动化学院,北京 100191;2.中国兵器工业新技术推广研究所,北京 100089;3.重庆铁马变速箱有限公司,重庆 400050)
随着智能制造技术的逐渐发展,装配产线自动化程度越来越高,但仍然有部分检测工作无法使用自动化设备替代,依旧需要采用人工检测的方式,不但会造成装配效率的降低,而且检测过程易产生错误。以减速器中制动器装配为例,装配过程需交替装配摩擦片和钢片两种零件,且装配顺序和数量唯一,操作不当会造成错装、漏装等错误,进而导致售后问题,影响制动器的使用性能,产生经济损失,甚至造成不必要的后果。制动器装配后由于其结构紧凑、密封性好等特点,人工检测装配不方便,需要花费大量的时间,而且存在错误的风险。针对这些问题,本文提出了一种在装配过程中实时检测零件装配情况的检测方法,帮助提高装配的准确性。
计算机视觉是赋予计算机类似于人的特征,通过对获取的图片、视频等图像数据进行分析处理,产生一定自主判断能力[1]。目前,计算机视觉已经可以代替人力,进行一些检测、识别、判断等工作任务[2-3]。本文使用的是计算机视觉中的目标检测技术[4],目标检测是计算机视觉中重要的研究方向之一,应用范围广泛,目前已经可以应用于机器人、工业检测、视频监控等领域[5]。2016年后,目标检测算法发展迅速,国内外学者相继提出算法SDD[6](Single Shot Multi-Box Detector)系列和YOLO[7-9](You Only Look Once)系列。2021年,Ultralytics公司推出了YOLOv5算法,YOLOv5是基于原有YOLOv4架构的基础上进行各方面的优化改进[10]。相比其他目标检测算法,YOLOv5因其高速和高精度而受到广泛关注,YOLOv5网络具备快速推理、高准确率和小尺寸等优点,非常适合应用在制动器装配检测中。
YOLOv5算法依据网络模型宽度和深度的不同,按照从小到大依次递增排序,有4种版本:YOLOv5s、YOLOv5m、YOLOv5l以及YOLOv5x。在这些算法中,YOLOv5s模型小、实时性好、具有最快的识别速度。因此,本文选取YOLOv5s算法作为制动器装配检测的训练模型。YOLOv5s算法主要包括输入端、主干网络、Neck模块和输出端4个部分。
输入端主要包括3个部分:Mosaci数据增强、图片尺寸缩放和自适应锚框计算。Mosaci数据增强随机从数据集中选取4张照片,经过随机的缩放、裁剪等处理后,将图像拼接为一张包含4张不同图像的大图像,此操作增强了数据集的多样性,丰富了数据集素材;图片尺寸缩放是在图像中添加最少的黑边,以提高模型的计算速度,减少训练计算量;自适应锚框计算通过对初始锚框的计算,将其与实际框架进行比较,并将二者之差进行逆向更新,通过多次迭代,获得最佳锚框架参数,减少样本影响,提高检测准确率。
主干网络包含Focus和CSP结构[11]。Focus结构包括切片与卷积,将具有高分辨率图片中的像素点加到低分辨率的图片中,堆叠形成新图片,对新图片进行卷积运算,从中提取出图像中的关键信息。CSP结构是将输入的特征图分为两部分处理,一部分输入到下一层做卷积处理,另一部分通过子网络处理,最后将两部分结合起来作为下一层的输入。使用不同类型的特征抽取模块抽取检测目标零件,产生目标检测零件的语义信息,提高神经网络在训练集合中的学习与推理的速度。
Neck模块使用FPN(Feature Pyramid Network)+PAN(Path Aggregation Network)结构[12]。FPN结构通过从上到下的方式,对各特征进行上层到下层的融合。PAN是在FPN基础上进行的,通过自下而上的方式,可以很好地把下层的位置信息传递给上层,从而增强对目标的探测。FPN+PAN结构如图1所示。
图1 FPN+PAN结构图
输出端用来检测大、中、小物体的网格,以CIOU Loss[13]为损失函数,在进行多轮操作的同时,使用NMS(Non-max Suppression)方法对相应的参数进行持续的调整,使得计算出的锚框和实际锚框之间的误差值达到最小,最后获得最佳的模型。
本文检测系统搭配摄像头可用于制动器零件检测,以摩擦片和钢片检测为例,具体流程如图2所示。将摄像头安装在制动器装配工位,用于实时检测制动器的装配过程,另一端连接检测计算机,将拍摄的图像反馈给计算机;调用检测程序,使检测系统处于等待检测的状态;摄像头在装配过程中每隔10 ms保存一张视频帧图片,传输给计算机分析是否检测已经开始;当检测到装配工作进行,检测识别系统开始工作,调用YOLOv5s算法程序对图片进行计算,自动识别装配零件的类型,根据检测到的结果进行分析对比,输出检测结果的标注框信息,并存贮到记录中;若装配过程为摩擦片和钢片各交替安装5个,且总数为10个,则证明装配正确,检测系统提示装配正确并输出装配顺序;若检测到装配相邻两零件为同一类型的零件,则跳出检测系统,输出装配顺序并发出警告,提示存在错装;若装配顺序正确但装配总数没达到要求,检测系统将在最近零件装配后等待30 s,超时没检测到下一零件装配,则跳出检测系统,输出装配顺序并发出警告,提示存在漏装。
图2 装配检测流程图
环境的搭建依赖NVIDIA驱动安装与更新,根据电脑的显卡版本登录官网下载对应的驱动更新,安装完成后在命令框输入:nvidia-smi,用于查看最高支持的CUDA版本,并根据此版本安装深度学习环境。
虚拟环境的搭建需要Anaconda软件完成,在Anaconda的终端上输入命令:conda create-n pytorch python=3.8,即建立一个名为pytorch的虚拟环境,python的版本是3.8,执行命令:conda activate pytorch,用于激活环境;进入Pytorch的官方网站,按照显卡的型号、CUDA的最大支持版本,将方块中的命令语句(见图3)拷贝到命令窗口中,即可下载该环境所需的相关软件包;最后,下载Pycharm程序并在其上建立一个与之前所建立的虚拟环境,可确认是否已经完成了配置。
图3 虚拟环境软件包下载
为方便数据集素材和处理结果的存储,创建一个名为“VOC2007”的文件夹,在其中建立一个“JPEGImages”文件夹,用来存储需要标记的图像文件;建立一个标签文件,命名为“Annotations”来存储注释;建立一个名为“predefined_classes”的txt文件,用来存储标注的分类名。
将要标注的图片放在“JPEGImages”文件夹中,素材越多,准确度也会越高,本次数据集包含每种零件在不同光照强度、位置、角度等因素的照片500~600张,总数超过1 000张(见图4a)。图像处理应用labelimg软件,命令控制台输入:pip install labelimg,自动下载软件相关的数据包。在命令行键入:labelimg JPEGImages predefined_classes.txt,打开labelimg,选择每个图片中的目标对象,并标记分类,处理过程如图4b所示,结果存储到“Annotations”文件中(见图4c),处理后的文件格式为xml文件,为方便深度学习环境训练,编写python程序将其转为txt文件,并按照比例将数据集划分为80%的训练集和20%的验证集。
a)数据集素材
本文利用YOLOV5算法训练数据集,其代码结构如下:data用于存放yaml文件,为数据集和验证集提供配置信息,可以根据需求修改所检测目标的类别数和对应的名称;weights用于存放数据集训练好权重;models包含4个不同的s、m、l、x的项目版本,按照如上顺序检测速度升高,准确度下降;算法的实现主要依赖于3个python程序,分别为train.py、detect.py、test.py,用于训练数据集、目标检测识别和测试结果;“requirements.txt”文本文件包含yolov5的依赖库,可以根据需要安装到环境中。
将2.2节制作好的数据集文件导入到工程文件中,按照本次检测需求分别修改data文件夹和models文件夹的yaml配置文件。将data文件夹中的voc.yalm文件复制,填写数据集中用于训练和测试的图片集路径,填写所需检测目标零件的英文名,并按照所需检测零件数量修改检测类别数;找到models文件夹中yolov5s.yaml文件,复制并按需修改参数。在train.py中分别填入修改后data和models的yaml配置文件路径,填写weights路径到对应权重参数,更改训练轮次为300轮,启动程序开始训练,训练时,可以使用tensorbord来查看实时参数。在训练完成后,将产生一个best.py文件,可以使用此文件来识别目标。
本文采用Astra Pro摄像机与目标检测程序相结合,将2.3节所述产生的best.py文件嵌入到检测程序中,在生产线安装检测摄像机连接计算机,实时检测制动器装配过程,输出所检测零件的英文名字和置信度(即代表有多大概率可以确定是所要检测的目标零件)。图5和图6所示分别为装配过程中摩擦片和钢片的实时检测结果,以图5a为例,方框中即表示为所要检测的目标零件,标签“steelPlate”表示其类别为钢片,0.95为检测结果的置信度,表示算法模型计算判断该物体有95%的概率是钢片,系统默认置信度超过0.5即可接受,本文将该参数设置为0.8,仍可顺利完成目标检测任务,提高了检测精准性,降低了检测失误率。
a)置信度为0.95
a)置信度为0.97
根据实际生产线装配实验结果,检测目标零件正确率可达到99%以上。本文检测系统会自动将识别的装配零件加入到装配顺序中,同时将同一装配序列零件所检测到的图片储存到一起,以便后续查到。针对装配过程中易发生的错装和漏装问题,分别作出相应处理,若检测到相邻装配流程装配的是同一装配序列零件时,立刻跳出检测系统,输出装配顺序并发出警报,提示检查是否错装,系统恢复等待检测状态;若从零件开始装配,直到装配停止,检测系统检测零件未达到数量要求,则同样输出装配顺序并发出警报,提示检查是否漏装,系统恢复等待检测状态。
本文设计了一种基于YOLOv5s算法的制动器防错装检测系统,以制动器中摩擦片和钢片为实验对象,采用对生产线零件图片收集的方式制作数据集,应用labelimg软件对数据集进行标注处理,编写代码将文件格式转化,并划分为训练集和验证集,使用YOLOv5算法完成对数据集的训练,最后将检测程序与外接摄像头相接,根据实际生产线装配需求,完成制动器防错装检测系统。
实验结果表明,该检测系统可以对生产线装配进行实时监测,对装配过程中存在的错装和漏装问题进行警报提示,可代替人工检测,减少成本,降低产品装配失误率,提高产品一次合格率,避免错装产品流入市场。