计算机系统应用  2022, Vol. 31 Issue (4): 68-80   PDF    
改进YOLOv5算法的钢筋端面检测
王超1, 张运楚1,2, 孙绍涵1, 张汉元1,2     
1. 山东建筑大学 信息与电气工程学院, 济南 250101;
2. 山东省智能建筑技术重点实验室, 济南 250101
摘要:钢筋是基建行业不可或缺的结构材料, 无论是钢筋生产过程、还是施工现场, 对钢筋进行准确计数是必不可少的环节. 成捆钢筋存在端面密集、直径尺度不统一、端面边界粘连、端面与背景融合、端面之间存在遮挡等问题. 针对上述问题, 提出了一种改进的YOLOv5模型框架, 以降低密集小目标漏检率、误检率. 针对钢筋端面数据集稀缺、没有公开的大型数据集并且钢筋端面特征较弱的问题, 自建了钢筋端面数据集, 使用半自动标注法对数据集进行标注, 并采用数据增强算法对钢筋端面数据集进行扩充. 修改了YOLOv5中的主干网络, 增加空间金字塔池(spatial pyramid pooling, SPP)和小目标检测层, 以获取更大的特征图; 使用特征金字塔模型(feature pyramid network, FPN)和路径聚合网络(path aggregation network, PAN)对多尺度特征图融合, 提高密集小目标检测精度. 在Data Fountain钢筋盘点竞赛数据集和自建钢筋数据集上设计了多组对照试验. 实验结果表明, 提出的改进算法YOLOv5-P2模型对钢筋端面的检测效果最佳, 钢筋端面平均精度均值(mean average precision, mAP)达到了99.9%, 相比于YOLOv3、YOLOv4、ScaledYOLOv4以及YOLOv5主流算法, 模型的mAP分别提升了9.6%、7.9%、7.0%、1.1%, 在工厂真实环境条件下进行测试时都有较稳定的表现, 在测试集上相对于原始模型检测精度提升了2.1%. 通过修改YOLOv5的主干网络中SPP模块位置和增加检测层都能够显著提升密集小目标检测精度, 更好的提取到钢筋端面的边缘特征, 取得99.9%的平均精度均值.
关键词: 深度学习    YOLOv5    数据增强    钢筋计数    密集小目标检测    检测方法    卷积神经网络    
Steel-bar End Face Detection Based on Improved YOLOv5 Algorithm
WANG Chao1, ZHANG Yun-Chu1,2, SUN Shao-Han1, ZHANG Han-Yuan1,2     
1. School of Information and Electrical Engineering, Shandong Jianzhu University, Jinan 250101, China;
2. Shandong Key Laboratory of Intelligent Buildings Technology, Jinan 250101, China
Abstract: A steel bar is an indispensable structural material in the infrastructure industry, and accurate counting of steel bars is an essential link in both the steel-bar production process and the construction site. There are some problems in steel-bar bundles, such as dense end faces, non-uniform diameter scale, end-face boundary adhesion, fusion of end face and background, and end-face occlusion. To solve the above problems, this study proposes an improved YOLOv5 model framework to reduce the missed detection rate and the false detection rate of dense small targets. Considering the scarcity of the steel-bar end face dataset, the absence of a large public dataset in this field, and the weak feature of the steel-bar end face, we built a steel-bar end face dataset with the semi-automatic labeling method for dataset labeling and the data enhancement algorithm for dataset expansion. Moreover, the backbone network in YOLOv5 was modified, and the spatial pyramid pooling (SPP) and the small target detection layer were added to obtain larger feature maps. The feature pyramid network (FPN) and path aggregation network (PAN) were used to fuse multi-scale feature images to improve the accuracy of dense small target detection. Several groups of control tests were designed based on the Data Fountain steel-bar stocktaking competition dataset and the self-built steel bar dataset. The experimental results show that the improved algorithm YOLOv5-P2 model has the best performance on the steel-bar end face detection, and the mean average precision (mAP) of the steel-bar end face reaches 99.9%. Compared with the mainstream algorithms of YOLOv3, YOLOv4, ScaledYOLOv4, and YOLOv5, the proposed model has its mAP increased by 9.6%, 7.9%, 7.0%, and 1.1%, respectively. When tested in the real environment of factories, the model has stable performance, and its detection accuracy is improved by 2.1% compared with the original model on the test dataset. The position modification of the SPP module in the backbone network of YOLOv5 and the adding of detection layers can all significantly improve the detection accuracy of dense small targets with better edge feature extraction of the steel-bar end face and an mAP of 99.9%.
Key words: deep learning     YOLOv5     data enhancement     rebar counting     dense small target detection     detection method     convolutional neural network    

钢筋作为不可或缺的结构材料, 广泛应用于建筑、桥梁、交通等基建行业. 无论是钢筋生产过程、还是施工现场, 对钢筋进行准确计数是必不可少的环节.

在钢筋生产过程中, 经轧制、冷却、剪切生产的散状钢筋, 在传送链床上进行计数分钢、收集打捆、卸料, 然后对每捆钢筋数量进行复核计数、称重, 最后挂牌入库. 散状钢筋常采用视频动态计数, 通过融合多帧视频图像中钢筋端面检测和跟踪结果来实现. 成捆钢筋的复核计数, 则通过检测单帧图像中钢筋端面的数量来完成, 准确度要求高, 以捆为单位不低于98%, 同时检测时间应小于100 ms/捆. 在施工现场, 需对进场成捆钢筋的数量进行复验, 目前多采用人工计数, 劳动强度大、工作效率低、出错率高, 无法满足智慧工地的管理要求.

视觉成捆钢筋计数技术的关键, 在于对钢筋端面的检测与分割, 主要有基于传统图像处理的钢筋计数方法和基于深度学习的钢筋计数方法.

基于传统图像处理的钢筋计数方法主要利用图像增强、滤波、阈值分割进行钢筋端面检测和计数[1], 或者对预处理后的图像进行模板覆盖以及空间相关性计算对钢筋端面进行检测计数[2]. 罗山等人[3]利用二值化后图像的面积法对成捆钢筋的根数进行统计, 臧晶等人[4]首先利用双边滤波算法去噪声. 然后采用最大类间方差(Otsu)算法对钢筋端面分割, 再使用连通区域法对钢筋进行标记. 袁中锦等人[5]运用直方图均衡化增强对比度后, 再用高斯模板计算空间相关性, 使钢筋截面特征更加显著, 通过统计相关矩阵中的二维局部极大值点个数来得到最终计数.

近年来, 基于深度学习的卷积神经网络(convolutional neural networks, CNN)在目标检测领域得到了快速发展, 如YOLOv3[6]、YOLOv4[7]、YOLOv5、SSD[8]等单步目标检测算法和Fast R-CNN[9]、Faster R-CNN[10]等两步目标检测算法.

石京磊[11]利用卷积神经网络与红外相机对钢筋进行静态与动态检测, 通过改进ResNeXt101网络获得了一种级联式目标候选头网络对成捆钢筋端面进行静态检测和计数. Wu等人[12]通过深度学习语义分割来实现钢筋计数, 对弱监督标注的数据集训练语义分割, 主干网络采用改进的U-net预测3层不同的mask, 推断得到语义分割二值图像, 再使用轮廓提取算法找到各个钢筋端面. 谢海桢[13]提出了基于全卷积网络的密集多目标识别算法MSFCN, 在自建数据集上准确率和召回率均达到95%以上, 相较传统算法精准度高出10%. 唐楚柳[14]提出了一种由Inception-RFB-FPN和改进ResNet34-FCN组成的SWDA-CNN网络用于钢筋计数, 实验表明该网络提高了定位精度并节省推理时间. 明洪宇等人[15]提出了一种基于RetinaNet目标检测框架, 采用基于EM算法的高斯混合聚类方法解决检测歧义, 改进后的模型mAP值为93%. 王志丹[16]基于Faster R-CNN算法利用微调后的预训练模型对增强后的数据集进行训练, 得到98.3%的mAP值, 较原始Faster R-CNN提高了2.1%, 但该模型的计算复杂度较高, 在实际应用中难以达到实时检测.

由于剪切的钢筋端面颜色接近, 打捆后挤在一起, 彼此之间界线不显著, 且端面参差不齐、面积大小不一、形状不很规则等原因, 基于传统图像处理的钢筋计数方法准确度和鲁棒性难以提高.基于深度学习的单步目标检测算法对密集小目标的漏检率较高, 两步目标检测算法的实时性差.

本研究主要应用于两大场景, 第一是钢筋生产企业入库复检, 仓库的环境通常是一个整体偏暗的环境, 需要灯带进行打光, 除了需要打光之外在某些比较苛刻的工况下, 需要定制固定的工位来进行检测, 真实场景如自建数据集所示; 第二是建筑工地计数, 卡车运载着大量的钢筋进场, 现场的验收人员需要对其进行盘点, 该场景中拍照角度存在偏移, 现场光照的不均, 拍摄距离的远近不同导致钢筋面存在尺度不一致, 真实场景如公共数据集所示.

本文提出一种基于改进YOLOv5的钢筋端面识别计数算法, 主要贡献如下:

(1)提出一种半自动数据标注方法, 在公开数据集DataFountain钢筋盘点竞赛数据集上训练YOLOv5初始模型, 对工厂环境下的自建数据集进行检测标注, 自动生成标注文件, 然后进行手工校正, 大大提升数据集的标注效率.

(2)通过增加采样融合扩大特征图的尺度、增加模型检测层个数、改变SPP模块在主干网络中的位置, 获取更充足的端面纹理特征, 丰富端面间轮廓信息, 提升端面识别率.

(3)在公开数据集与自建数据集上与多个主流检测算法进行消融实验(ablation experiment), 改进后的算法平均精度均值mAP达99.9%, 高于所有其他模型, 比原始YOLOv5模型提升了1.1%, 精准度Precision达95%, 召回率Recall达99.8%.

1 YOLOv5的改进及钢筋端面检测

本节对成捆钢筋端面检测的难点进行了总结并简要阐述了单阶段YOLO系列检测算法框架, 对YOLOv5初步实验后存在的问题进行分析, 并提出改进思路.

1.1 成捆钢筋端面的特点及检测难点

成捆钢筋的端面一种密集型小目标, 在检测时具有目标类别单一、目标分布较为集中、彼此区分度低等特点. 采用深度学习模型对成捆钢筋端面进行检测计数会面临以下难点:

(1)钢筋端面尺寸不一. 钢筋端面直径视规格型号差距较大, 本文涉及钢筋端面直径在12–32 mm之间.

(2)每捆钢筋数量差异较大, 视钢筋规格型号有95、290、380根.

(3)应用场景复杂. 拍摄的距离、角度和光线不完全受控, 切割端面形状差异较大、端面锈蚀颜色和亮度差异较大且存在边界粘连, 部分钢筋端面窜出或缩进造成遮挡等问题.

(4)计数精度和准确度要求高. 钢筋产量和使用基数很大, 如果检测结果中出现了误检和漏检, 需要人工从大量的标记点中找出. 只有达到极高的计数精度和准确度, 才能保证验收人员的使用体验.

1.2 YOLO系列目标检测框架

YOLO系列为单步目标检测框架, 对输入图像直接进行分类概率回归和包围框坐标回归实现目标检测. 从YOLOv3开始摒弃了池化层和全连接层, 使用Darknet53代替Softmax对目标特征进行多尺度预测. YOLOv4是对YOLOv3的改进, 网络结构主要包括主干特征提取网络CSPDarknet53、空间金字塔池化(SPP[17])、路径聚合网络(PANet[18]), 同时使用了多种数据增强技术来提升检测性能, 相较于YOLOv3模型mAP值提升10%. 2020年Ultralytics发布了YOLOv5, 其性能与YOLOv4相当但推理速度更快, 且模型框架更便于工程部署. YOLOv5使用C3Darknet作为主干网络从输入图像中提取丰富的信息特征, 使用PANet作为Neck来聚合特征, 模型检测层与YOLOv3相同, Conv卷积模块的激活函数采用SiLU[19]函数. 此外, YOLOv5通过设置depth_multiple和width_multiple两个参数调节主干网络的深度和宽度并划分出4个量级的模型: YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x.

1.3 YOLOv5算法与改进方式

由于钢筋数据集中钢筋端面分布密集、类内差异较大、钢筋端面半径小且不统一, 因此采用YOLOv5x这个较深层次的网络作为原始检测模型.

1.3.1 K-means聚类锚点框

YOLOv5算法中, 预测部分分为3个特征层, 每个特征层含有3个大小不同的先验框, 先验框是通过K-means聚类算法对数据集中标注检测目标聚类得到的. 在聚类过程中, 通过随机化初始K个聚类中心位置、计算目标标注框与聚类中心点的交并比、分配交并比最大的聚类中心、重新计算聚类中心、直到聚类中心不再发生改变. 最终聚类好K个先验锚点框(anchor)的宽、高. 具体的目标函数D为:

$ D = \min \sum\limits_{i = 1}^n {\sum\limits_{j = 1}^k {\left[ {1 - \frac{{bo{x_i} \cap ce{n_j}}}{{bo{x_i} \cup ce{n_j}}}} \right]} } $ (1)

式中, $bo{x_i}$ 为检测目标中的第 $i$ 个标注框的区域面积; $ce{n_j}$ 是第j个聚类中心的区域面积; $bo{x_i} \cap ce{n_j}$ 为标注框与聚类中心区域交集的面积; n为检测目标的数量, k为聚类中心个数.

聚类时以准确率(Accuracy)作为聚类结果的评价指标, 计算公式为:

$ \begin{split} &Accuracy = \\& \dfrac{1}{n}\sum\limits_{i = 1}^n {\max \left( {\frac{{bo{x_i} \cap ce{n_1}}}{{bo{x_i} \cup ce{n_1}}}, \frac{{bo{x_i} \cap ce{n_2}}}{{bo{x_i} \cup ce{n_2}}}, \cdots, \frac{{bo{x_i} \cap ce{n_k}}}{{bo{x_i} \cup ce{n_k}}}} \right)} \end{split} $ (2)

使用K-means算法对自建钢筋数据集的真实包围框进行聚类来确定性能最佳的K值, 结果由图1所示. 当K=12时, Accuracy=91.57, 指标处于较好性能. 图2给出了K值分别为6、9、12、15时数据集的真实框聚类结果图.

1.3.2 改进YOLOv5算法

在自建数据集上对原始YOLOv5模型进行初步实验, 自建数据集的构建将在第2节介绍, 训练参数设置将在第3.1节给出, 模型评价指标详见第1.4节.

图 1 Accuracy-K折线图

图 2 样本包围框K-means聚类可视化图

训练结果如图3所示, 由曲线图可以看到精准度只有80%左右, 当IOU值为0.5时的平均精度均值(mAP)为98.8%. 对测试集进行检测的结果如图4图5所示, 图中部分遮挡目标存在漏检和误检情况, 原因是YOLOv5模型只有3个检测层各对应3组初始化anchor, 当输入图像尺寸为640×640时, 主干网络C3Darknet第3层对应的检测层大小为80×80, 此时该层对应的感受野最小, 只能用来检测大小在8×8以上的目标. 主干网络第5层对应的检测层的大小为40×40, 只能用来检测尺度在16×16以上的目标. 主干网络第7层对应的检测层的大小为20×20, 此时对应的感受野最大, 只能用来检测32×32以上的目标.

图 3 原始YOLOv5模型训练曲线图

图 4 模型自建数据集检测效果图

因此, 当被检测目标尺度小于8×8时, 无法被检测器准确检测到, 为了避免这种情况, 在Neck结构的第17层后, 继续对特征图进行上采样等处理, 使特征图继续扩大, 同时在Neck第20层, 将获取到的大小为160×160的特征图与主干网络第2层特征图进行Concat融合, 以此获取更大的特征图进行小目标检测. 改进后的YOLOv5-P2模型结构如图6所示, 其中主干Backbone红色箭头加粗虚线是新增采样对应于Head层160×160预测头. 由K-means算法对数据集聚类得到效果最佳的K值为12, 当anchor的数量为12时能够得到更精确的anchor的宽高值. 所以网络模型改进思路的正确性得到初步验证.

为了找到适配数据的最佳感受野大小, 另一种改进方法是把SPP模块当作变量, 添加在主干网络的不同位置. 本文在主干网络第6层与第7层之间加入SPP模块, 增大感受野提取重要的特征, 来提升钢筋端面小目标检测精度. SPP模块置于位置如图6加粗红色虚线处所示, 得到改进的YOLOv5-SPP模型.

1.3.3 YOLOv5改进模型损失函数

损失函数反映了预测框与真实框之间的差值, 是衡量检测模型性能的重要指标. YOLOv5模型中损失函数 $ Loss $ 包括预边界损失函数 ${L_{\rm box}}$ 、置信度损失函数 ${L_{\rm conf}}$ 、分类损失函数 ${L_{\rm cls}}$ , 因此损失函数可以表示为:

$ Loss = {\lambda _{\rm box}}{L_{\rm box}} + {\lambda _{\rm conf}}{L_{\rm conf}} + {\lambda _{\rm cls}}{L_{\rm cls}} $ (3)

式中, λboxλconfλcls分别是坐标损失权重, 置信度损失权重和分类损失权重.

图 5 Data Fountain数据集检测效果图

图 6 改进后的 YOLOv5-P2 模型网络结构图

$ {L_{\rm box}} = \sum\limits_{i = 0}^{{S^2}} {\sum\limits_{j = 0}^B {I_{ij}^{\rm obj}\left[ {1 - IOU\left( {{b_i}, {{\hat b}_i}} \right) + \frac{{{\rho ^2}\left( {{b_i}, {{\hat b}_i}} \right)}}{{{c^2}}}} \right]} } $ (4)

式中, $I_{ij}^{\rm obj}$ 表示包含目标的第i个单元的第j个锚点; bi ${\hat b_i}$ 分别代表预测框和真实框; IOU[20]表示预测框与真实框的交并比; ρ是真实框与预测框中心点之间的欧氏距离[21]; c是能包围预测框与真实框的最小框的对角线长度.

$ {L_{\rm conf}} = {\lambda _{\rm obj}}\sum\limits_{i = 0}^{{S^2}} {\sum\limits_{j = 0}^B {I_{ij}^{\rm obj}{{\left( {{C_i} - {{\hat C}_i}} \right)}^2}} } + {\lambda _{\rm noobj}}\sum\limits_{i = 0}^{{S^2}} {\sum\limits_{j = 0}^B {I_{ij}^{\rm noobj}{{\left( {{C_i} - {{\hat C}_i}} \right)}^2}} } $ (5)

式中, ${C_i}$ 表示预测框的置信度得分, ${\hat C_i}$ 表示真实框的置信度得分; $I_{ij}^{\rm obj}$ , $I_{ij}^{\rm noobj}$ 分别代表第i个单元的第j个锚点.

分类损失函数采用二值交叉熵损失, 损失函数公式为:

$ {L_{\rm cls}} = \sum\limits_{i = 0}^{{S^2}} {\sum\limits_{j = 0}^B {I_{ij}^{\rm obj}\sum\limits_{c \in classes} {\left[ {{{\hat p}_i}\left( c \right)\log \left( {{p_i}\left( c \right)} \right) + \left( {1 - {{\hat p}_i}\left( c \right)} \right)\log \left( {1 - {p_i}\left( c \right)} \right)} \right]} } } $ (6)

其中, c是当前检测到的目标类别, classes是所有目标类别; ${\hat p_i}\left( c \right)$ ${p_i}\left( c \right)$ 分别是预测类别和真实类别.

1.4 检测模型评价指标

mAP (mean average precision)是多个验证集的平均精度均值, 在目标检测任务中作为衡量检测精度的重要指标. AP (average precision)为平均精度, 是P-R (precision-recall)曲线与坐标轴围成的面积值. P-R曲线是以RecallPrecision作为横纵坐标的二维曲线. PrecisionRecall的定义如式(7)和式(8):

$ Precision = \frac{{TP}}{{TP + FP}}$ (7)
$ {{{Re}}} call = \frac{{TP}}{{TP + FN}}$ (8)

式中, TP为正确划分为钢筋的数量, FP为错误划分为钢筋的数量, FN为被错误地划分为非钢筋的数量.

绘制P-R曲线来计算单个类的AP值, 再计算各类AP值的平均值, 得到整个模型的mAP值:

$ AP = \int_0^1 {p\left( r \right)} dr $ (9)
$ mAP = \sum\limits_{n = 1}^C {A{P_n}} $ (10)

式中, $p$ 为准确率, $r$ 为召回率, C为类别总数. 本文是对钢筋的单类目标检测, 所以计算所得AP值就是mAP

除了mAP外, 目标检测算法的另一个重要性能指标是速度. 衡量速度的一个常用指标是每秒帧数(FPS), 即每秒可以处理的图片数量.

2 数据集的构造及增强 2.1 数据集的获取

本文使用的数据集由两部分组成, 一部分是由Data Fountain的智能盘点钢筋数量AI识别比赛标注好的数据集, 共有标注图片250张, 图片规格是2666×2000; 另一部分是自建的企业私有数据集, 使用HIKVISION摄像机拍摄钢厂链条上成捆钢筋所得, 共有未标注的图片958张, 图片规格为1600×1200.

2.2 数据集的半自动标注方式

钢筋数据集手工标注耗时费工, 为提高工作效率, 本文利用已经标注好的智能盘点钢筋数据集, 训练得到初步模型, 然后使用该模型检测未标注的自建数据集, 生成XML标注文件, 再使用LabelImg数据集标注软件进行手工修正标注框, 以防止漏标和误标, 如图7.

2.3 数据集增强

原始数据集共有1208张图像, 为避免模型训练产生过拟合, 本文采用数据增强扩充数据集. 通过水平/垂直镜像、亮度/色彩调节、随机裁剪等方式对数据集进行扩充, 并自动生成扩充后的XML标注文件, 最终的数据集被扩充为3295张图像. 图8给出了数据增强得到的样本及其自动标注示例.

图 7 图像半自动标注示例

图 8 数据增强得到的样本及其自动标注

2.4 数据集划分

本文使用数据集中包含了日间室外逆光、顺光和夜晚室内灯带打光等场景.

将数据集以8:1:1比例划分训练集、验证集和测试集. 选取数据集中2636幅图像作为训练数据集, 选取未经过数据增强的图片330张作为测试集. 对划分的训练集真实目标分布情况进行可视化, 结果如图9所示.

3 实验及结果分析

本实验硬件配置使用Intel Core i7-9800X CPU @3.80 GHz 处理器、NVIDIA GTX 2080 Ti显卡、32 GB RAM、3 TB机械硬盘, 操作系统是Windows 10 64位系统. 编程语言为Python, 深度学习框架为PyTorch, GPU加速库为CUDA10.2和CUDNN8.0.

图 9 训练集的目标分布统计图

3.1 模型训练

YOLOv5钢筋端面检测模型使用的深度学习框架为PyTorch. YOLOv5算法训练的初始参数设定为: 优化器使用随机梯度下降SGD[22]和余弦学习速率衰减策略来训练网络, 初始学习率(learning rate)为0.01, 最终衰减速率为0.001, 迭代次数(epochs)为1000. 批处理大小(batch size)为8, 动量因子为0.937, 输入图像分辨率为640×640, 设置损失权值 ${\lambda _{\rm box}} = 0.05$ ${\lambda _{\rm conf}} = 1$ ${\lambda _{\rm cls}} = 0.5$ ${\lambda _{\rm obj}} = 1$ ${\lambda _{\rm noobj}} = 0.5$ .

批量处理多张训练图片时, 同YOLOv4算法类似采用了Mosaic[23]、Cutout[24]等方法, 此外还使用了图像扰动, 改变亮度、对比度、饱和度、色调, 加噪声、随机缩放、随机裁剪(random crop)、翻转、旋转、随机擦除等数据增强方式.

3.2 实验结果分析

本文通过在模型Head层修改检测层个数、增加采样融合扩大特征图的尺寸提升模型的性能. 首先, 为了改善钢筋端面密集小目标的检测效果, 在原始主干网络上增加P2采样层, 并在head层增加第4个输出层. 与原始模型相比, 改进后的YOLOv5-P2模型的mAP和FPS如表1所示.

表 1 模型添加小目标检测层的测试结果

表1可知, 改进后模型在主干网络增加P2采样层、Head输出增加为4层时, 模型的输出特征图增大, 在Neck层提取到更多轮廓特征, 提升了小目标检测精度, mAP值由98.8%提升到99.9%, Precision由原始模型的80%改进后提升到95%. 尽管检测速度有所降低, 仍能满足实际需要.

为了找到适配数据的最佳感受野大小, 本文在主干网络的第6层与第7层之间加入SPP模块, 得到YOLOv5-SPP模型, 增大感受野提取重要的特征, 来提升钢筋端面小目标检测精度. 对比结果如表2所示.

表 2 模型改变SPP模块位置的测试结果

本文的检测目标是钢筋端面. 在增强后的训练数据集上, 将检测的钢筋端面预测框的平均精度均值mAP作为检测效果的衡量标准.

为了能够更好的观察各个检测层的输出以及模型各检测层的特征提取效果, 对改进前后模型的检测层的特征图(feature map)进行了可视化. 如图10所示, 其中图10(a)为原图, 图10(b)–图10(d)为原始模型的检测层可视化结果, 图10(e)–图10(h)为改进模型检测层可视效果. 由改进前后的图10(b)、图10(e),即小目标特征图可以看出改进后的图10(e)的可视化效果更佳, 与原始图像具有空间上的对应关系, 目标间的轮廓信息更丰富, 此时的感受野最小, 能够提升对小目标的检测效果.

本文除了将改进模型与原始YOLOv5模型进行对比外, 还与YOLOv3、YOLOv3-SPP以及YOLOv4和ScaledYOLOv4[25]等主流实时目标检测算法进行消融实验对比, 结果如表3所示. 表中, Augmentation代表是否进行数据增强, K-means表示模型是否对锚点进行聚类, epoch表示训练迭代的次数, 通过控制不同的变量来验证改进算法的效果.

未进行K-means聚类之前默认的锚点框为[10, 13], [16, 30], [33, 23], [30, 61], [62, 45], [59, 119], [116, 90], [156, 198], [373, 326], 进行K-means聚类之后锚点框为[18, 30], [18, 34], [19, 23], [19, 27], [20, 31], [22, 29], [22, 33], [32, 42], [39, 67], YOLOv5-P2模型使用的锚点框为[17, 31], [17, 22], [18, 27], [19, 32], [19, 30], [20, 24], [20, 36], [21, 28], [21, 31], [24, 33], [33, 43], [39, 67].

与目前主流的目标检测算法相对比, 本文改进的算法在Precision以及mAP均取得最优. 其原因如下: (1)平滑的激活函数允许更好的信息深入神经网络, 从而得到更好的准确性和泛化. 相较于YOLOv3, YOLOv4模型, 本文模型使用了SiLU激活函数, 与Lekey-ReLU相比, SiLU梯度更平滑, 保持准确性更好且更准取得地传播信息. (2) Neck网络与YOLOv4模型相似本模型使用SPP与PANet结构. SPP利用4个池化核大小分别为13×13、9×9、5×5、1×1进行处理, 该结构能分离出最显著的上下文特征, 是强有力的特征提取, 池化后再进行堆叠; PANet结构是一种反复提取特征的实例分割算法, 过程包括上采样、再堆叠卷积重复, 之后再进行下采样、堆叠. 此外本文算法还采用Mosaic数据增强, 扩充了数据集, 均衡大中小目标数量: 随机使用多张图片随机拼接, 且通过随机缩放可以获得很多小目标, 让网络的鲁棒性更好. 通过以上几点对密集小目标检测效果有了很大提升, 这也证明了本文模型的训练效果.

图 10  特征图可视化

表3中所示, 分别对几大主流目标检测模型采用相同的数据集进行训练, 其中YOLOv3模型、YOLOv3-SPP模型均在Windows 10环境下进行的, 输入图片尺度为640×640, batch size为8训练的迭代次数epoch为200. YOLOv4模型与YOLOv4-CSP模型均在Linux环境下训练的, 其中YOLOv4模型的输入图片尺度为608×608, YOLOv4-CSP模型输入图片尺度为640×640, batch size为4, 训练的迭代次数epoch为500. 训练得到的模型分别在330张测试集上设置置信度参数conf=0.15, 非极大值抑制阈值IOU=0.45进行检测得到mAP值以及FPS.

图11给出了3个钢筋端面检测模型的mAP值以及P-R曲线图, 其中蓝色曲线1代表YOLOv5-P2模型, 绿色曲线2代表YOLOv5模型, 红色曲线3代表YOLOv3模型. 由曲线图可知改进后的YOLOv5-P2模型检测效果优于另外两个模型.

表 3 不同检测算法消融实验检测精度对比

图 11 各个模型P-R曲线与mAP

图12给出了为本文改进后的YOLOv5-P2模型的训练曲线图, 主要指标为mAP@0.5、精准率Precision、召回率Recall以及训练集、验证集的目标与包围框损失曲线, 由于本文设计的是单类目标检测器因此分类损失函数恒为零.

使用TensorBoard对训练过程进行可视化, 可视化结果由图13所示, 模型输入图片尺度为640×640, batch-size=8时的训练曲线图. 图13(a)是mAP@0.5 (IOU=0.5)曲线图, 即IOU=0.5时, 计算所有图片每一类的AP值; 图13(b)是mAP@0.5:0.9曲线图: 表示在IOU不同阈值(从0.5到0.9, 步长0.05)的mAP值; 图13(c)表示训练集预测框损失曲线图; 图13(d)表示验证集目标损失曲线图; 图13(e)表示验证集预测框损失曲线图; 图13(f)表示训练集目标损失曲线图.

图13可以看出, 改进后的两个模型在mAP@0.5曲线(曲线1、曲线2)以及mAP@0.5:0.95曲线图中表现最优, 这是衡量检测器的首要标准. 图13中曲线1代表YOLOv5-P2模型, 曲线2代表YOLOv5-SPP模型, 曲线3代表YOLOv5x模型, 曲线4代表YOLOv3模型, 曲线5代表YOLOv5s模型. 在训练损失以及验证损失曲线图中YOLOv5-P2模型(曲线1)比YOLOv5-SPP模型(曲线2)损失更低, 说明模型预测框与真实框更接近.

图12给出了置信度阈值一致时训练的3种模型, 在自建数据测试集设置置信度阈值conf=0.15, NMS阈值IOU=0.25时钢筋端面检测的效果. 从图中可以看到, 对于目标边界存在粘连的情况, YOLOv3、YOLOv5出现漏检, 改进后的YOLOv5-P2则能够准确检测出, 说明改进后的模型对小目标的检测效果有很大提升.

图13给出了当超参数设置一致时训练的3种模型, 在Data Fountain测试数据集上设置置信度阈值conf=0.15, NMS阈值IOU=0.25时钢筋端面检测的效果, 从圈出的细节图可以看出, YOLOv3模型和YOLOv5对存在遮挡、光线过强的目标有漏检、误检情况, 而YOLOv5-P2模型能够准确的检测到钢筋目标, 说明改进后的模型对两个数据集同时具有很强的自适应性和健壮性.

改进后YOLOv5-P2模型相较于改进前YOLOv5模型, 增加了网络上增加P2采样层, 并在head层增加第4个输出层, 目标间的轮廓信息更丰富, 锚点框由9个增加到了12个, 感受野减小特征图增大能够提升对小目标的检测效果. 与YOLOv3模型相比优化了激活函数和Mosaic增强以及网络结构改良, 因此对于实例中目标检测效果有较大提升.

图 12 YOLOv5-P2 模型训练曲线图

图 13 各模型训练曲线对比图

为了进一步说明改进后的模型在应用于中的优越性, 在330张训练集上设置相同的置信度阈值和非极大值抑制阈值对模型进行测试得到的结果如表4所示, 改进后的算法模型在测试集上检测的误检率和漏检率明显降低, 正确率相对于改进前提升了2.1%.

4 结论与展望

钢筋是建筑施工领域一种重要的材料, 精准、快速的盘点出钢筋的数量代替人工盘点是一项具有重要意义的工作. 本文根据钢筋端面的特点, 基于改进的YOLOv5模型框架, 设计了一种钢筋端面检测计数算法. 本文的主要贡献为: (1)针对目前钢筋数据集稀缺且实际应用场景复杂的问题, 创建了一个新的钢筋端面数据集, 并使用水平、垂直镜像、亮度色彩调节、随机裁剪等方法进行数据增强; 使用预训练模型对数据进行半自动标注. (2)通过改进YOLOv5网络结构, 使输出特征图感受野扩大, 路径聚合网络(PANet)能够提取更多的目标边缘特征, 从而提升了密集小目标的检测精度. 实验结果表明, 本文方法在钢筋端面检测中的mAPPrecision等指标均有所提高, 能满足实时检测的基础上显著提升密集成捆钢筋的检测精度. 未来工作将考虑进一步改进网络结构对深层网络进行剪枝, 在保证精度的基础上提升检测速度.

表 4 在测试集多个模型检测结果对比

参考文献
[1]
皮琳琳. 图像识别技术在棒材计数中的应用. 城市建设理论研究: 电子版, 2013(1): 1-4.
[2]
周群, 胡光锐. 基于模板覆盖法的钢筋在线计数方法. 上海交通大学报, 1999, 33(11): 1462-1464. DOI:10.3321/j.issn:1006-2467.1999.11.034
[3]
罗山, 黄欢, 刘继红. 一种基于图像处理的成捆钢筋计数方法. 微计算机应用, 2008, 29(6): 94-97. DOI:10.3969/j.issn.2095-347X.2008.06.019
[4]
臧晶, 刘冠楠, 杨慧英. Otsu算法的打捆钢筋计数方法研究. 沈阳理工大学学报, 2017, 36(6): 47-50, 60. DOI:10.3969/j.issn.1003-1251.2017.06.010
[5]
袁中锦, 刘宇, 时娟. 基于空间相关性的成捆钢筋图像计数算法研究. 电脑与信息技术, 2019, 27(4): 10-13. DOI:10.3969/j.issn.1005-1228.2019.04.004
[6]
Redmon J, Farhadi A. YOLOv3: An incremental improvement. arXiv: 1804.02767, 2018.
[7]
Bochkovskiy A, Wang CY, Liao HYM. YOLOv4: Optimal speed and accuracy of object detection. arXiv: 2004.10934, 2020.
[8]
Liu W, Anguelov D, Erhan D, et al. SSD: Single shot MultiBox detector. Proceeding of the 14th European Conference on Computer Vision. Amsterdam: Springer, 2016. 21–37.
[9]
Girshick R. Fast R-CNN. Proceedings of the IEEE International Conference on Computer Vision. Santiago: IEEE, 2015. 1440–1448.
[10]
Ren SQ, He KM, Girshick R, et al. Faster R-CNN: Towards real-time object detection with region proposal networks. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2017, 39(6): 1137-1149. DOI:10.1109/TPAMI.2016.2577031
[11]
石京磊. 基于卷积神经网络的钢筋计数算法研究[硕士学位论文]. 武汉: 华中科技大学, 2019.
[12]
Cheng ZH, Wu YX, Xu ZH, et al. Segmentation is all you need. arXiv: 1904.13300, 2019.
[13]
谢海桢. 复杂场景下的棒材计数算法研究与应用[硕士学位论文]. 成都: 电子科技大学, 2020.
[14]
唐楚柳. 基于卷积神经网络的钢筋端面定位与分割[硕士学位论文]. 桂林: 广西师范大学, 2020.
[15]
明洪宇, 陈春梅, 刘桂华, 等. 基于RetinaNet的密集型钢筋计数改进算法. 传感器与微系统, 2020, 39(12): 115-118.
[16]
王志丹. 基于小数据的钢筋检测方法的研究. 邮电设计技术, 2020(2): 39-44. DOI:10.12045/j.issn.1007-3043.2020.02.009
[17]
He KM, Zhang XY, Ren SQ, et al. Spatial pyramid pooling in deep convolutional networks for visual recognition. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2015, 37(9): 1904-1916. DOI:10.1109/TPAMI.2015.2389824
[18]
Liu S, Qi L, Qin HF, et al. Path aggregation network for instance segmentation. 2018 IEEE/CVF Conference on Computer Vision and Pattern Recognition. Salt Lake City: IEEE, 2018. 8759–8768.
[19]
Elfwing S, Uchibe E, Doya K. Sigmoid-weighted linear units for neural network function approximation in reinforcement learning. Neural Networks, 2018, 107: 3-11. DOI:10.1016/j.neunet.2017.12.012
[20]
Yu JH, Jiang YN, Wang ZY, et al. UnitBox: An advanced object detection network. Proceedings of the 24th ACM international conference on Multimedia. Amsterdam: ACM, 2016. 516–520.
[21]
Ratner B. Pythagoras: Everyone knows his famous theorem, but not who discovered it 1000 years before him. Journal of Targeting, Measurement and Analysis for Marketing, 2009, 17(3): 229-242. DOI:10.1057/jt.2009.16
[22]
Paras. Stochastic gradient descent. Optimization, 2014.
[23]
Zhang HY, Cisse M, Dauphin YN, et al. mixup: Beyond empirical risk minimization. arXiv: 1710.09412, 2017.
[24]
DeVries T, Taylor GW. Improved regularization of convolutional neural networks with cutout. arXiv: 1708.04552, 2017.
[25]
Wang CY, Bochkovskiy A, Liao HYM. Scaled-YOLOv4: Scaling cross stage partial network. arXiv: 2011.08036, 2020.