游乐游手机版
首页/AI热点日报/热点详情

人工智能技术实现钢筋数量自动统计方案

类型:热点整理2026-07-19
“AI数钢筋”——通过人工智能技术实现钢筋数量统计的整体方案解读。 导读:在社会智能化的大趋势下,越来越多的传统行业开始向数字化转型,建筑行业也不例外,正在被AI技术悄然改变。 钢筋是建筑业的核心材料,但庞大的数量、复杂的现场环境以及人工点验容易出错等问题,让钢筋计数成了棘手环节。那么,如何快速、准

“AI数钢筋”——通过人工智能技术实现钢筋数量统计的整体方案解读。

导读:在社会智能化的大趋势下,越来越多的传统行业开始向数字化转型,建筑行业也不例外,正在被AI技术悄然改变。

钢筋是建筑业的核心材料,但庞大的数量、复杂的现场环境以及人工点验容易出错等问题,让钢筋计数成了棘手环节。那么,如何快速、准确地完成这一对建筑施工至关重要的节点?今天就来聊聊“AI数钢筋”——借助人工智能技术实现钢筋数量统计的整体思路。

1 问题背景

钢筋数量统计贯穿钢材生产、销售和建筑施工的全链条。目前工地现场多采用人工计数:验收人员对进场车辆上的钢筋逐根清点,打捆后用不同颜色标记区分是否已计数,确认数量后车辆才能卸货。这种方式耗时耗力、效率低下,而且工人长时间高强度工作容易视觉疲劳、大脑迟钝,计数误差随之增大。人工计数已经无法满足钢筋生产厂家的自动化需求,也无法保证工地物料盘点的精准性。这种现状倒逼钢筋数量统计向智能化方向演进。

所谓“AI数钢筋”,就是利用多目标检测机器视觉方法,实现钢筋数量的智能统计,提升劳动效率和计数精确性。目标检测算法与摄像头结合,可以自动识别并计数钢筋,再辅以少量人工修正误检,就能智能、高效地完成这一任务。

2 算法介绍

2.1 目标检测介绍

先来看看什么是目标检测。

目标检测是图像分类任务的进阶版:不仅要识别出图片中各种类别的目标,还要把每个目标的位置找出来,用矩形框框住。

上图是目标检测的典型结果——检测出的目标被边界框圈出,框上方还显示出该目标属于该分类的置信度得分。

2.2 目标检测算法的基本流程

目标检测本质上要同时解决定位和识别两个问题。传统目标检测算法的基本流程是:给定待检测图片,先通过滑动窗口提取候选框;接着对每个窗口的局部信息进行特征提取;然后对候选区域作分类判定,判断当前窗口中的对象是目标还是背景;最后用非极大值抑制(NMS)筛选,去除重复窗口,找到最佳检测位置。

2.3 算法选择

本次钢筋计数任务选用单阶段目标检测YOLO系列算法。YOLO系列是目前使用最广的目标检测算法,最大特点就是检测速度快,而且检测精度(mAP)也在逐步提升,因此成为时下最热门的算法之一。YOLO系列共有五个版本,其中YOLO v1到v3由Joseph设计,YOLO v4到v5由其他作者完成。目前YOLO v1到v4已有论文和算法结构,YOLO v5则只有结构设计、尚未发表论文。因此我们选择较新的YOLO v5作为本次研究的对象。

YOLO算法将目标检测转化为回归问题,直接在输入图像的多个位置上回归出目标边框和类别。给定输入图像,将其划分为S×S网格,如果某目标的中心落在某个网格中,该网格就负责预测该目标。每个网格预测B个边界框及置信度(包含目标的可能性及边框准确性),此外还需预测多个类别的概率。完成预测后,根据阈值滤除低置信度的窗口,再用NMS去除冗余窗口,整个过程简洁高效,不需要中间的候选框生成网络。下图是YOLO v5的基本框架:

由图可知,YOLO v5主要由输入端、Backbone、Neck和Prediction四部分组成。各部分含义如下:

Backbone:在不同图像细粒度上聚合并形成图像特征的卷积神经网络。

Neck:一系列混合和组合图像特征的网络层,将图像特征传递到预测层。

Prediction(输出端):对图像特征进行预测,生成边界框并预测类别。

YOLO v5各组成部分包括的基础组件有:

CBL:由Conv+BN+Leaky_relu激活函数组成。

Res unit:借鉴ResNet中的残差结构,用于构建深层网络。

CSP1_X:借鉴CSPNet结构,由CBL模块、Res unit模块以及卷积层、Concate组成。

CSP2_X:借鉴CSPNet结构,由卷积层和X个Res unit模块Concate而成。

Focus:先将多个slice结果Concat,再送入CBL模块。

SPP:采用1×1、5×5、9×9和13×13的最大池化,进行多尺度特征融合。

YOLO v5各组成部分详细介绍

(1) 输入端

YOLO v5使用Mosaic数据增强操作提升训练速度和网络精度,并提出了自适应锚框计算与自适应图片缩放方法。

Mosaic数据增强:利用四张图片,按照随机缩放、随机裁剪和随机排布的方式拼接成一张新图片,每张图片都有对应的框,拼接后获得新图片及其对应的框,然后将其传入网络学习。这样一次相当于传入四张图片,极大地丰富了检测物体的背景,并且在标准化BN计算时一次计算四张图片的数据,因此对batch size的依赖较小。

自适应锚框计算:YOLO系列算法针对不同数据集需要设定特定长宽的锚点框。训练时,模型在初始锚点框基础上输出预测框,计算与GT框的差距并反向更新参数。YOLO v3和v4需要单独运行程序获得初始锚点框,而YOLO v5将此功能嵌入代码中,每次训练时根据数据集名称自适应计算出最佳锚点框。用户可以根据需求选择关闭或打开此功能。

自适应图片缩放:不同图片的长宽不同,常用方法是将原始图片统一缩放到标准尺寸再送入网络YOLO v5通过自适应添加最少的黑边进一步提升推理速度步骤如下:① 根据原始图片大小和网络输入图片大小计算缩放比例

② 根据原始图片大小与缩放比例计算缩放后的图片大小

③ 计算黑边填充数值

其中416表示YOLO v5网络要求的图片宽度,312表示缩放后图片的宽度。先相减得到需要填充的黑边长度104,再对104取余(104%32=8,32是因为整个网络执行了5次下采样),最后除以2,将填充区域分散到两边。这样将416×416的图片缩小为416×320,极大提升了推理速度。

(2) Backbone网络

Focus结构:对图片进行切片操作,每隔一个像素取一个值,类似于邻近下采样,得到四张互补的图片(没有信息丢失),将W、H信息集中到通道空间,输入通道扩充为4倍(从RGB的3通道变成12通道),再经过卷积操作,最终得到没有信息丢失的二倍下采样特征图。例如,原始输入608×608×3,经Slice和Concat后输出304×304×12,再经过通道数32的Conv层,输出304×304×32。

CSP结构:将feature map拆成两部分,一部分卷积,另一部分与卷积结果Concate。分类问题中使用CSPNet可降低计算量,但准确率提升很小;目标检测中作为Backbone则提升较大,能有效增强CNN学习能力并降低计算量。YOLO v5设计了两种CSP结构:CSP1_X用于Backbone网络,CSP2_X用于Neck网络。

(3) Neck网络

YOLO v4开始使用FPN-PAN结构,FPN自顶向下传达强语义特征,PAN自底向上传达定位特征。

YOLO v5的Neck仍沿用FPN+PAN结构,但做了改进:YOLO v4中采用普通卷积,YOLO v5则采用CSPNet设计的CSP2结构,加强了网络特征融合能力。

(4) 输出端

YOLO v5采用CIOU_LOSS作为边界框损失函数,分类分支和conf分支均采用BCE损失。

YOLO v5最有亮点的是正样本定义方式的改变。YOLO v3中正样本区域(anchor匹配策略)比较粗暴:保证每个gt bbox有一个唯一对应anchor,匹配规则是IOU最大,且某个gt不可能在多个预测层同时匹配。但从FCOS等论文可知,增加高质量正样本anchor能加速收敛并提高召回。YOLO v5对此做出改进,提出匹配规则:

采用shape匹配规则,将ground truth的宽高与anchor的宽高求比值,如果宽高比例小于设定阈值,则该GT与anchor匹配,认定为正样本;否则滤掉,不参与bbox与分类计算。

将GT的中心最邻近网格也作为正样本anchor的参考点,因此bbox的xy回归分支取值范围不再是0-1,而是-0.5-1.5(0.5是网格中心偏移),以实现跨网格预测。

YOLO v5算法根据网络大小分为5n、5s、5m、5l、5x,具体的参数量、单帧检测速度和mAP如下图所示。

3 训练模型

3.1 数据集选择

本次选用公开钢筋计数数据集进行模型训练,数据来源为现场手机采集。钢筋车辆进库时,用手机拍摄成捆钢筋的截面(一般保证较小倾角,尽量垂直于截面)。数据包含直径12mm-32mm等不同规格的钢筋图片。训练集共250张图像,测试集200张。

由于数据集规模较小且只有一类检测目标(钢筋),为降低训练难度、防止过拟合,算法模型选择较小的yolov5s。如果采用其他数据集,可根据实际情况灵活选择模型。

3.2 模型训练

首先从GitHub获取YOLO v5源码(https://github.com/ultralytics/yolov5),项目文件包括:

data:存放超参数配置文件及官方测试图片。

models:网络构建配置文件和函数,包含五个版本(5n/5s/5m/5l/5x)。

utils:工具类函数(loss、metrics、plots等)。

weights:训练好的权重参数。

detect.py:利用训练好的权重进行目标检测(支持图像、视频、摄像头)。

train.py:训练自建数据集的函数。

test.py:测试训练结果的函数。

requirements.txt:环境依赖包。

YOLO v5各组成部分详细介绍

接下来是具体的训练步骤,包括环境搭建、数据集准备及修改配置、模型配置修改、下载预训练模型、开始训练和模型测试。

(1) 环境搭建

创建一个虚拟环境,打开conda powershell prompt执行:

conda create -n yolov5 python==3.8

激活虚拟环境后,切换工作路径至yolov5文件夹,安装所需模块:

python -m pip install -r requirements.txt -i http://pypi.douban.com/simple/ --trusted-host=pypi.douban.com/simple

如果没有安装CUDA,默认安装pytorch-cpu版;有GPU则安装pytorch-gpu版。

(2) 数据集准备及修改数据集配置

将下载好的数据集分类存放,结构如下:

然后修改data目录下的yaml文件。复制coco.yaml并重命名(如gangjin.yaml),打开修改参数:

修改结果如下图所示:第一个框填写训练集、测试集和验证集的目录地址,第二个框填写检测目标类别数,第三个框填写待检测类别名称。

(3) 修改模型配置参数

由于选择yolov5s模型训练,并使用官方yolov5s.pt预训练权重,需要修改模型配置文件。复制yolov5s.yaml并重命名:

打开重命名文件,修改第一行的检测目标类别数:

(4) 下载预训练模型

在官网(https://github.com/ultralytics/)选择所需模型下载,这里选择yolov5s.pt。

下载完成后将xx.pt复制到yolov5文件夹下。

(5) 开始训练

在yolov5文件夹下打开终端输入命令:

Python train.py --weights yolov5s.pt --data data/gangjin.yaml --workers 1 --batch-size 8

至此,模型训练正式开始。

(6) 模型测试

训练完成后,将runs/exp/weights下的best.pt复制到yolov5文件夹下,然后执行测试:

python detect.py --weights best.pt --source ../datasets/gangjin/images/val --sa ve-txt

其中--weights指定训练好的模型路径,--source指定测试数据路径。测试结果保存在runs/detect/exp文件夹下。

4 测试结果及问题分析

4.1 测试结果

算法的输入为较为清晰的成捆钢筋图片,输出为result.txt文件和预测结果图。result.txt中显示每个检测框的位置、类别及置信度,并给出检测框的总个数,实现钢筋自动计数。

从测试结果来看,YOLO v5算法对该场景中的钢筋计数具有很好的准确性,且置信度较高。

对更多图片场景进行钢筋计数,将实际位置与识别效果图对比,观察算法效果。

从测试结果可以确认,YOLO v5算法同样表现出良好的准确性和较高的置信度。

4.2 问题分析

当然,YOLO v5算法并非十全十美,在钢筋检测中也存在一些问题:

误判:将其他物体误判为钢筋头。

重复检测:一个钢筋头被多个检测框标注。

这些问题需要后续进一步优化。

5 总结

以上是对“数钢筋”问题的全面介绍,主要从问题背景、算法介绍和模型训练三部分展开。首先阐述了钢筋计数的现实痛点,然后介绍了目标检测算法的流程和YOLO v5的基础知识,最后给出了模型训练的详细步骤,并通过数据集验证了算法在钢筋计数上的效果。

来源:https://m.elecfans.com/article/2235646.html

相关热点

继续查看同栏目近期热点。

延伸阅读

补充最近整理过的热点入口。