一、项目前言:解决建筑工地的传统计数痛点
在建筑施工场景中,PVC管道、水泥袋、混凝土涵管等堆叠物料的人工盘点,一直是低效且高误差的刚需工作。数百根堆叠管道人工清点耗时数分钟,多人统计结果往往不一致,极易引发物料损耗、到货数量争议等问题,隐性成本极高。
作为兼具土木工程与深度学习从业经验的开发者,作者结合行业痛点,搭建了一套YOLO26+SAHI切片推理的施工现场物料自动计数系统。无需复杂设备,仅通过手机拍照上传,即可秒级完成密集物料统计,密集管道堆叠场景准确率可达97%,彻底替代人工盘点。
该方案通用性极强,不仅适配PVC管道,还可快速迁移至水泥袋、钢筋、砖块等各类堆叠式建筑物料计数场景,将盘点耗时从分钟级压缩至秒级。
二、核心方案:为什么YOLO必须搭配SAHI?
2.1 纯YOLO模型的致命缺陷
常规YOLO模型推理前,会将原图统一缩放至固定尺寸(本项目为960px)。施工现场高清原图往往达到4000px以上,堆叠物料后排的管道端头会被压缩至5-10像素,丢失全部纹理特征,模型无法识别,最终导致漏检严重、统计数值偏小,且无任何报错提示,难以排查问题。
2.2 SAHI切片推理核心原理
SAHI(切片辅助超推理)并非独立模型,而是高效的推理优化策略,专门解决密集小目标漏检问题,完美弥补YOLO短板,核心流程如下:
图像切片:将完整大图分割为512×512的重叠子切片;
分块推理:对每一块切片单独执行YOLO推理,小尺寸物料在切片中像素占比大幅提升,可精准识别;
合并去重:将所有切片检测结果映射回原图坐标,通过NMS非极大值抑制剔除切片边界重复检测目标。
通俗来说:YOLO是人眼,SAHI是放大镜,让模型看清画面每一处细节。唯一权衡是推理速度略有下降,但对于计数场景,准确率优先级远高于速度。
三、数据集方案:规避从零标注的低效问题
项目无需手动标注海量数据,直接复用Roboflow Universe开源数据集:p15-pipe管道数据集。包含4500+张多角度、多堆叠密度的管道标注图像,支持数据增强,采用CC BY 4.0开源协议,可直接用于模型训练。
初期尝试调用Roboflow在线训练模型,频繁出现404模型缺失、CUDA依赖报错等问题。为保障项目可控性与稳定性,最终选择本地Colab自主训练,全程自定义参数、规避依赖冲突,适配施工现场真实场景。
四、模型训练:Colab踩坑与最优参数配置
本项目基于YOLO26-Nano轻量化模型,在Google Colab T4 GPU上完成训练,全程解决三大核心报错与性能瓶颈,整理出可直接复用的工业级训练配置。
4.1 训练核心障碍与解决方案
障碍1:内核静默崩溃(内存溢出)
默认高分辨率、大批次参数会超出Colab免费内存上限,导致训练无报错直接重启。优化后内存安全配置:
| Plain Text model.train( data=DATA_YAML, epochs=100, imgsz=960, # 由1280下调,降低显存占用 batch=4, # 由8下调,适配免费GPU内存 workers=2, # 降低并行加载线程 cache=False, max_det=1000, # 密集计数核心参数 patience=25, ) |
障碍2:默认检测上限导致计数封顶
YOLO默认单图最大检测数为300,面对施工现场300+密集管道场景,即便模型识别全部目标,计数也会强制锁定在300,且无任何提示。max_det=1000是密集计数项目的关键参数,必须手动放开限制。
障碍3:Colab训练中断丢失权重 Colab免费算力存在时长限制,训练中途极易强制终止。通过谷歌云端硬盘断点续训解决,自动保存权重,中断后可无缝恢复训练:
| Plain Text model = YOLO('/content/drive/MyDrive/runs_boru/faz1/weights/last.pt') model.train(resume=True) |
4.2 最终训练效果
模型训练至68轮提前停止,核心指标优异,适配计数场景需求:
mAP@50:0.948(目标识别准确率极高,满足计数核心需求) mAP@50-95:0.668(边框定位精度一般,对计数结果无影响)
重点:物料计数场景无需极致边框精度,只需完整识别目标,因此该模型指标完全满足落地要求。
五、精度突破:无需重训练,准确率72%→97%优化实战
模型初次测试效果极差:132根密集管道仅识别95根,准确率仅72%,漏检集中在阴影、斜角、边缘管道。区别于常规“加数据、加轮数”的优化思路,本项目通过推理参数调优+图像预处理实现质的飞跃,全程无需重新训练模型。
5.1 多维度参数遍历扫描
对置信阈值、切片尺寸、重叠率进行组合遍历测试,筛选最优推理参数:
降低置信阈值:适配模糊、遮挡、阴影管道的弱特征识别; 优化切片尺寸与重叠率:平衡小目标识别精度与推理效率。
参数优化后,准确率从72%提升至89%(118/132)。
5.2 关键突破:图像超分辨率放大
核心踩坑点:低分辨率原图会静默禁用SAHI切片功能。当切片尺寸大于原图尺寸时,模型会直接全局推理,切片优化完全失效。
解决方案:对低分辨率图像进行3倍立方插值放大,不新增图像信息,但统一物料像素比例,为SAHI切片提供有效操作空间:
| Plain Text big = cv2.resize(img, None, fx=3, fy=3, interpolation=cv2.INTER_CUBIC) |
优化后最终效果:132根管道精准识别128根,准确率突破97%。
六、端到端部署:Streamlit轻量化网页应用
为适配施工现场移动端使用需求,基于Streamlit搭建极简网页端,仅100行左右代码,无需专业设备,手机即可实时操作,实现算法落地。
6.1 应用核心功能
图片上传/手机拍照实时推理; 自动低分辨率图像放大预处理; 可自定义置信度、切片大小、重叠率; 输出物料总数+逐目标标注效果图。
6.2 部署踩坑与解决方案
部署平台选型:Vercel/Netlify仅支持静态页面,无法承载PyTorch、OpenCV运行环境,最终选用Streamlit Community Cloud免费一键部署;
系统依赖报错:云端Linux镜像缺失OpenCV依赖库,通过新增packages.txt声明系统依赖libglib2.0-0t64解决版本兼容问题;
隐私权限问题:默认部署需登录访问,手动开启公开权限,支持全员免密使用;
密钥安全处理:开源代码脱敏,替换Roboflow密钥为占位符,原始密钥纳入.gitignore保护。
七、本地快速运行教程
7.1 环境安装
| Plain Text git clone https://github.com/fhattat/YOLO-construction-material-counter.git cd YOLO-construction-material-counter pip install -r requirements.txt |
7.2 启动网页应用
| Plain Text streamlit run streamlit_app.py |
7.3 自定义模型训练
项目提供完整Colab训练笔记pipe_counter_training.ipynb,支持免费T4 GPU训练,内置断点续训、数据集下载、SAHI测试全流程,替换个人Roboflow密钥即可直接运行。
八、项目核心总结与实战经验
优先复用开源数据:Roboflow开源数据集可节省数周标注时间,精准匹配场景的公开数据,优于盲目自建数据集;
密集计数必配SAHI:纯YOLO无法解决密集小目标漏检,切片推理是低成本、高精度的最优方案;
参数细节决定精度:max_det默认上限、图像分辨率、切片尺寸匹配度,是计数项目最容易忽略的核心关键点;
先优化推理再重训模型:参数调优、预处理优化可零成本提升精度,无需消耗GPU算力重新训练;
部署是落地关键:算法可用≠项目落地,系统依赖、权限配置、移动端适配是工业落地的必备环节。
九、项目迭代路线图
✅ 一期:实现PVC管道高精度自动计数;
二期:适配混凝土涵洞管道计数;
三期:实现水泥袋、砖块、钢筋等多类建筑物料通用计数;
四期:基于现场阴影、斜角样本微调模型,进一步提升复杂场景精度。
核心价值:整套 YOLO26+SAHI+Streamlit 架构可通用所有堆叠式物料计数场景,迁移学习可快速适配新类别,大幅降低工业视觉计数项目开发成本。
274