罗纯坤
(西南交通大学, 四川成都 610031)
螺栓连接相比于焊接、铆接等连接方式,具有安装方便、质量可靠等优点,故广泛运用于众多领域,尤其是在钢桥中[1]。螺栓连接的质量直接关乎着整个结构的安全性,所以应在施工和运营阶段始终保证其质量安全可靠。但是,在实际运营过程中,由于各种复杂作用的综合影响,螺栓难免会长期处于振动和负荷状态,甚至受到冲击,因此螺栓可能会出现脱落现象,危及整个结构的安全[2]。螺栓脱落问题一直是桥梁工程领域研究的重点,准确的螺栓脱落检测方法可以极大地保证桥梁的安全运营。
传统的螺栓脱落检测技术主要靠人工巡检,该方法主要由人工来操作,不仅费时费力,而且不能实现实时检测。近年来,深度学习的兴起,促进了螺栓脱落检测技术的发展,基于深度学习的方法成本低,属于无损检测,识别的准确率高且易于部署,克服了传统螺栓检测技术的弊端。
采用消费级相机在带螺栓拼接板上采集螺栓脱落图像,采集时需要变换拍摄角度、距离等,以保证螺栓图像的多样性。共采集螺栓图像230张,图像示例如图1所示。
图1 螺栓脱落图像数据示例
为提高螺栓脱落检测模型的鲁棒性,对采集的原始图像进行一定的预处理,主要为螺栓图像筛选和图像尺寸统一化。采集的螺栓图像总共230张,因部分图像之间是相似的,从中挑选出200张图像作为螺栓脱落数据集。最后采用Python将螺栓图像的分辨率压缩到640像素×480像素,以方便输入到网络进行训练。
经过图像预处理后,采用labelImg对螺栓脱落图像进行标注。对标注完成得到的图像进行数据集划分,按7∶2∶1的比例对数据集进行随机划分,得到训练集、验证集和测试集。
目标检测的任务是为了能在给定的图像中准确找到物体的位置,并给出物体的类别。目前常见的目标检测算法众多,可分为2类,即单阶段和两阶段的目标检测。常用单阶段目标检测算法有Yolo系列、SSD和RetinaNet等;常用两阶段目标检测算法有R-CNN、SPP-NET、Fast R-CNN和Faster R-CNN等。两阶段的目标检测精度高但检测速度慢,单阶段的目标检测速度快但精度稍逊。由于本文只需要对1~2个类别进行检测,故选择单阶段目标检测算法精度就足够了,最终确定选择Yolo网络来进行螺栓脱落检测。
Yolo是基于深度学习的回归方法,其核心思想是将整张图作为输入,直接在输出层回归目标框的位置和目标所属的类别。Yolo系列主要有Yolov1~ Yolov5等多个版本的算法,对比各个版本的检测准确率和速度,最终选择采用Yolov5深度学习模型来检测螺栓脱落。Yolov5s是由输入端、Backbone、Neck、Prediction 4个部分所构成,其网络结构如图2所示。
图2 Yolov5s网络结构
(1)输入端包括Mosaic数据增强、自适应锚框计算、自适应图片缩放这3个部分。Mosaic数据增强的核心思想是随机选取4张图片,将4张图片进行随机裁剪、随机缩放、随机排布的方式进行拼接。可以丰富数据集,让网络的鲁棒性更好,且可以直接计算4张图片的数据,使得Mini-batch大小并不需要很大,可以减小GPU。自适应锚框是指Yolov5s模型中会预设锚定框,当自定义数据集输入后,Yolov5s会按照自定义数据集的标签来自动学习预设锚定框的尺寸。在网络训练过程中,会在预设框的基础上输出预测框,再与真实框对比,反向更新误差,迭代网络参数继续训练,在一定程度上可以提高检测的精度。自适应图片缩放是指将输入图片统一缩放到一个标准尺寸,长宽比不同的图片会对原始图像自适应的添加最少的黑边,填充的黑边越少,目标检测速度越快。
(2)Backbone主干网络结构主要包括Focus结构和CSP结构。Focus结构的原理是图片进入Backbone前对其进行切片操作,具体操作类似于邻近下采样,将宽、高的信息集中到通道上,然后再使用卷积进行特征提取。其作用是为了在下采样过程中不丢失信息,且可使特征提取更加的充分,但与普通卷积下采样相比计算量会增加一点点。Yolov5s中含有2种CSP结构,如网络结构图所示,CSP1_X结构应用在Backbone主干网络中,CSP2_X结构应用在Neck中。其主要作用为增强CNN的学习能力,使得在轻量化的同时还能保持准确率,还可以降低计算瓶颈,降低内存成本等。
(3)Neck网络结构主要包括SPP模块和FPN+PAN的结构。在目标检测中,通常会在Backbone主干网络和输出层之间插入一些层,这个部分就称为Neck,其主要作用是为了更好地对融合特征进行提取,且Neck中使用CSP2_X结构加强了网络特征融合的能力。
(4)输出端Prediction主要包括边界框的损失函数计算和nms非极大值抑制。Yolov5采用了CIOU_Loss作为损失函数,使得预测框回归的速度和精度都更高一些。目标检测的后处理过程中,需要对很多的目标框进行筛选,通常需要nms非极大值抑制操作来实现。
随着计算机视觉的不断发展,在一些领域已经取得了显著的成就,但是这些成功的背后都是靠大量的数据支撑,尤其在深度神经网络的训练中,若想要获得不错的效果,需要几十万甚至上百万的数据[3]。在实际运用中,因为收集到的相关数据集过小,根本不可能实现从零开始训练整个网络,为此可采用迁移学习来解决数据量不足的问题。迁移学习是指用一个已经训练好的模型进行另一个模型的训练[4],这个训练好的模型是在非常大的数据集上已经预训练好了的。很明显,若2个数据集之间存在较强的相关性,迁移学习的效果就越好,采用较少的数据就可以训练得到较好的结果。
预训练Yolov5s的模型的原始训练数据集是COCO数据集,起源于微软于2014年出资标注的Microsoft COCO数据集,与ImageNet 竞赛一样,被视为是计算机视觉领域最受关注和最权威的比赛之一。COCO数据集包含200 000张图像,含有80个类别,超过500 000个目标标注,是一个最广泛公开的目标检测数据库。由于本文只需对少类别目标进行检测,用其训练好的权重作为预训练权重,可以实现利用较少图像得到不错的检测效果。
螺栓目标检测模型的搭建和训练在PyTorch平台上进行,编程语言为Python,编译器为PyCharm 2020.1。模型训练的硬件和软件配置如表1所示。
表1 软硬件配置
螺栓目标检测模型的预训练权重使用Yolov5官方提供的yolov5s.pt,大部分超参数设置成模型中给定的初始值,主要设置的训练参数设置如表2所示。
表2 训练参数设置
模型训练到300次时停止训练,此时准确率达到98.32%,损失值为0.014 91,训练过程的准确率和损失曲线如图3所示。训练得到2个权重文件,分别为best.pt和last.pt,最好的训练结果是在epoch为114次时到达,用best.pt权重文件进行螺栓图片检测,可以发现螺栓脱落检测效果良好,检测效果如图4所示。
图3 螺栓脱落检测训练过程准确率和损失曲线
图4 螺栓脱落检测结果
(1)螺栓脱落检测训练过程中,在迭代训练50次左右开始到达稳定,114次达到最优,300次时准确率为98.32,损失值为0.014 91,可见模型训练参数设置合理,模型收敛较快。
(2)利用训练完成后的模型进行螺栓脱落检测准确率高、速度快、鲁棒性良好,可运用于实际结构中螺栓脱落的实时检测。
(3)本文算法还可结合无人机或外接摄像头,用于桥梁结构螺栓脱落的实时检测。