开头部分:直接切入智慧工地材料识别话题,结合无人机巡检场景,说清楚是什么、解决什么问题、适合谁看。然后按标准骨架展开。
1. 项目整体设计与技术选型
1.1 需求拆解:从"人眼看料"到"算法识料"
我第一次接到这个需求的时候,其实没有想得那么复杂。施工现场的物料管理,说白了就是三件事:进场物资有没有到位、堆场里的材料还剩多少、材料的使用和消耗是否合规。过去这些全靠材料员拿台账去现场点数,一垛砖一垛砖地数,一堆钢管一根根地核,既慢又容易出错,遇到夜间进场或者多标段同时施工的时候,台账和实物对不上是家常便饭。
"智慧工地"这个概念喊了很多年,真正落地到材料识别这个环节,核心其实就是把"人眼识别、手工记录"这个链路替换成"摄像头/无人机采集、AI算法识别、系统自动出账"。
这个项目标题里提到的砖块识别、木材识别、钢材识别,再加上无人机巡检,对应的正是工地现场最典型的三类散装物资和一条空中采集通道。
我在方案设计阶段明确了一个原则:不要试图做一个"万能识别系统",而是聚焦在"看得清、分得准、数得对"这三个层级上。看得清靠采集端,分得准靠标注和模型,数得对靠后处理算法。这个需求拆解的思路很关键,它避免了后期陷入"什么都想识别、什么都识别不好"的泥潭。
从业务场景上划分,材料识别大概可以分成两类:一类是静态堆场识别,即无人机悬停或环绕拍摄后,对堆场内的砖块、木材、钢材进行检测计数;另一类是动态进出场识别,比如车辆装载的砖块是不是符合报验单上的数量。这个项目先解决的是静态堆场识别,动态识别留给二期,这样能快速看到效果,也方便后续迭代。
1.2 方案选型:为什么选择无人机加轻量级检测模型
工具选型上,我做了几组对比。
第一是采集端。固定摄像头在工地场景里其实很常见,但固定机位覆盖范围有限,塔吊、脚手架、临时堆场都在不停变化,一个摄像头很难覆盖整个工地。无人机恰好能解决这个问题,它视角灵活,可以从正上方俯拍堆场,也可以低空斜拍材料侧面,而且现在消费级或行业级无人机的拍照分辨率完全能满足识别需求。这个项目最终选了四旋翼行业级无人机,带RTK定位模块,可以按预设航线自动巡检,采集效率比手持拍摄高很多。
第二是识别模型。工地材料识别属于典型的目标检测任务。我在评估了实际部署环境后,放弃了重模型方案,选了轻量级检测模型。原因很简单:工地现场的网络环境不稳定,边缘计算设备算力有限,模型要实时跑起来才有人用。你不能在工棚里架一台服务器专门做推理,更现实的做法是把模型部署在边缘计算盒子上,就近处理无人机回传的图片。
关于模型的具体选型,YOLO系列在工业界的生态最成熟,无论是训练工具链还是部署方案都有大量现成经验可以参考。最新版本在训练速度、推理速度和精度上都有明显提升,小目标检测能力也改善了不少,非常适合这种"需要快速落地、后续持续迭代"的项目。考虑到无人机俯拍图像中的砖垛、木材堆往往占画面比例不大,我在实际训练中还额外叠加了基于切图的检测思路,这个后面细说。
1.3 整体架构与数据流转
整套系统的数据流转可以概括为一条链路:
无人机按航线采集到高分辨率图像后,先通过机上存储或5G模块回传至地面工作站。地面工作站做两件事:一是图像预处理,包括去噪、增强、拼接(如果需要大范围堆场全景);二是将单张图像送入边缘计算盒子的检测模型,输出每个目标的类别和位置框。检测结果随后进入后处理模块,进行去重、计数、面积估算,最后写入业务系统的材料台账。
这里有一个容易被忽视的问题:无人机拍的一张图可能包含几十垛砖、上百根钢管,如果直接把整张图送进模型,小目标很容易漏检。我在实践中采用滑窗切图方式,把大图切成若干小图分别检测,再通过坐标映射把结果合并回原图。这个思路不复杂,但对召回率的提升非常明显,尤其是无人机在60米高度拍摄时,单块砖在画面里可能只有十几个像素,不切图基本检不出来。
整个项目分三条线并行推进:数据采集线、模型训练线、业务系统线。数据采集线负责无人机飞行和图像采集,模型训练线负责标注、训练和迭代,业务系统线负责把检测结果转成台账数据。三线之间定期对齐,避免出现模型都训练完了、数据格式还对不上的情况。
2. 数据集构建与标注规范
2.1 无人机采集要点:光线、高度与覆盖策略
很多项目死在第一步——拍出来的图没法用。这里我踩过不少坑,总结下来无人机采集要关注三个要素。
光线是第一个关键因素。工地材料识别最好选择阴天或者上午十点前、下午三点后的时段拍摄。中午顶光会在砖垛侧面形成浓重阴影,砖块边缘被阴影吞掉,模型很容易误判;雨后积水反光会让钢材表面出现大面积高光,边缘检测基本失效。我们后来制定了一条采集规范:风速超过4级不飞,雨天不飞,正午不飞,尽量在阴天或多云天气集中采集。
第二个因素是飞行高度和重叠率。识别砖块这类小目标时,拍摄高度最好控制在30到50米;识别木材堆、钢材堆这类中等目标,可以放宽到60到80米。航线规划时需要保证相邻航拍图像至少有30%的重叠率,这样后期如果要拼接全景图,缝合效果才自然。
第三个因素是覆盖策略。别只从上往下拍,适当加拍一些45度斜视角的图像。俯拍图适合计数和面积估算,斜拍图能提供材料的侧面纹理信息,比如砖块的颜色分界线、木材的年轮纹路,这些细节能显著提升分类准确率。
2.2 标注规范与避坑建议
数据集的质量决定了模型的上限,这句话在材料识别项目里体现得特别充分。我整理了一个标注规范文档,里面最核心的是三条原则。
第一,类别定义要清晰。工地上的砖块有标准砖、多孔砖、空心砖,颜色有红色、灰色、深灰色;木材有木方、模板、圆木;钢材有螺纹钢、方管、工字钢、钢板。如果一开始就把所有砖类统一标成"砖",模型虽然能检测出位置,但无法满足不同规格材料分开计数的业务需求。我建议按业务粒度定义类别,而不是按视觉粒度定义:业务上需要区分就分新类,不需要区分就合类。
第二,遮挡和堆叠目标要按规则标注。工地材料基本都是堆着放的,互相遮挡非常普遍。我们的规则是:可见面积超过40%的实例全部标注;被遮挡严重但轮廓可辨的可以标注;完全看不见的坚决不标。很多标注员看到一个砖垛就想把整垛圈成一个框,这是不对的,模型需要学习的是"单块/单捆"的边界,而不是"整堆"的外轮廓。
第三,边界框必须贴合目标。标注框过大或过小会直接拉低mAP,尤其钢材这类长条形目标,标注框必须贴合实际外形。我在质检时发现一个规律:新手标注员倾向于把框拉大一圈,导致模型学到的特征里混入大量背景;老手则会贴着目标边缘,模型收敛更快。标注完成后,我专门做了一轮全员质检,把所有偏移超过5%的框全部回炉重标。
数据规模上,这个项目最终用了约4200张图像,其中砖块类12000多个实例、木材类8000多个、钢材类15000多个。单纯看数量不算多,但配合合理的增强策略,训练出来的模型在实测中已经很够用了。
3. 模型训练与调优实践
3.1 模型选型与训练配置
模型训练我倾向于先用一套基准配置快速跑通,再针对性调优。这个项目的基准配置如下:输入分辨率640乘640,批次大小16,初始学习率0.01,训练轮数150轮,优化器选带动量的SGD,数据增强默认开启mosaic、flip、hsv扰动。
之所以选择640分辨率而不是更大的分辨率,是因为无人机图像切图后,每张切图的尺寸在800到1000像素左右,直接缩到640输入相对可控,训练速度和显存占用都比较合理。
训练过程里最值得关注的指标不是总loss,而是各类别的AP。材料类别之间特征差异很大:砖块是规则的矩形纹理,木材是粗糙的纤维纹理,钢材是光滑且有反光的表面。模型在钢材类上的AP通常最先跑高,因为它的边缘轮廓清晰;木材类次之;砖块类是最容易拉低整体mAP的,因为砖块颜色和工地地面颜色太接近,背景干扰严重。
针对这个问题,我做了两个调整。第一,把砖块类单独做了一次色彩增强,模拟不同光线下的颜色偏移,提升模型对颜色变化的鲁棒性;第二,增加了一些"负样本"图像——就是没有砖块但在颜色纹理上和砖块很像的地面、墙壁、预制板图像,让模型学会"看起来像但不一定是"。
这组配置在训练到第80轮左右时,各类别AP基本收敛。最终验证集上,钢材类AP达到0.86,木材类0.82,砖块类0.76。作为工地场景的实用系统,这个精度已经具备参考价值。
3.2 训练中的关键细节:切图策略与类别平衡
切图策略是这个项目最重要的一个调优点。我对比过两种方案:一种是直接把整张无人机原图缩放后送入模型;另一种是先切图再检测,最后合并结果。在原始大图上检测时,大量砖块实例仅有10乘10像素,漏检率极高;切图后,每个目标在切图中能占到30像素以上,漏检率明显下降。
切图的具体参数是:切图尺寸960乘960,重叠率20%。重叠率是为了避免目标恰好落在切图边缘被截断。检测完成后,所有切图的结果框通过坐标偏移映射回原图坐标系,再用NMS去除重叠框。这里要注意,重叠区域里同一个目标会被检测出两个框,如果不做合并,计数就会重复,所以跨切图NMS的阈值需要单独调,我最终用的是IoU大于0.5就合并。
类别不平衡也在训练中有明显体现。钢材类实例多、砖块类实例也不少,但木材类因为工地木材堆放区通常比较集中,单张图里密集出现很多小目标,反而类别总数偏少。我先是补充了一批纯木材堆场的无人机图像,把木材类实例数从5000拉到8000;同时在增强策略里对木材类提升了随机裁剪比例,让模型在每轮训练中看到更多木材样本。这一轮调整后,木材类AP提升了近8个点。
还有一个特别容易被忽视的点:负样本的占比。工地图像里除了目标材料,还有大量的人和机械车辆。如果不加任何处理,模型可能会把穿戴反光背心的工人误判成某种材料。我们在标注阶段就把"人"和"车辆"两类加进了类别列表,但不是为了检测它们,而是让模型学会区分"哪些是材料、哪些不是"。训练完成后,这两个辅助类别的输出在业务系统里直接被过滤掉,不进入台账统计。
4. 部署与应用落地
4.1 边缘端部署:模型压缩与推理优化
模型训练完成后,部署到边缘计算盒子这一步也很有讲究。工地现场的算力设备大多是嵌入式平台,显存和算力都有限,所以我把训练好的模型做了一次INT8量化,把模型体积压缩了约60%,推理速度提升了一倍,精度只损失了不到2个百分点。量化前的校准数据集用了500张现场图像,覆盖了不同光线和不同堆场场景,量化后的模型在晴天、阴天、黄昏三个时段都做了实测,效果可以接受。
推理优化上,我做了两个层面的工作。第一个是把输入尺寸固定化,避免动态分辨率带来的性能损耗;第二个是用批处理方式处理切图,边缘盒子一次同时推理4张切图,吞吐量明显提升。实测下来,单张无人机原图从传入到输出全部检测结果,耗时控制在3秒以内,基本可以满足巡检结束后快速出结果的需求。
4.2 业务系统集成:从检测框到材料台账
检测框本身没有业务价值,有价值的是一串结构化的材料台账数据。业务系统的集成逻辑是:接收检测结果,按类别分组,计算每个类别的实例数量,再结合每类材料的标准尺寸和图像分辨率,估算体积。
这里举一个砖块的例子。假设一张覆盖10米乘10米堆场的图像里检测出800个砖块实例,算法会自动除重并计算覆盖率,再结合砖块的标准尺寸(比如标准砖240乘115乘53毫米)估算出堆场的砖块总体积和约当数量。这个估算结果和人工盘点相比,误差可以控制在5%到10%以内。虽然不能替代精确的入库单据,但用于日常巡查、材料消耗趋势分析已经足够。
业务系统还做了一条规则引擎:当检测到的材料数量与报验单出入较大时,系统自动生成预警工单,推送给材料员。这一条在实际使用中很受欢迎,因为它把"事后对账"变成了"事中预警",管理价值提升了一个台阶。我也建议所有做这个方向的人,别只停留在"检测出多少目标"这个层面,多想想怎么把识别结果变成管理动作,系统才有生命力。
5. 常见问题与排查技巧实录
5.1 典型问题速查表
我把这个项目推进过程中遇到的高频问题整理成了一个速查表,方便大家直接对照排查。
| 问题现象 | 可能原因 | 排查思路与解决方案 |
|---|---|---|
| 砖块大量漏检 | 目标太小、与背景颜色接近 | 使用切图检测,提高输入分辨率,增加近地面拍摄角度 |
| 钢材计数重复 | 切图重叠区域检测框重复 | 调整跨切图NMS阈值,IoU大于0.5合并,后处理按中心点去重 |
| 木材与脚手架混淆 | 纹理特征相似、标注边界模糊 | 增加木材堆场负样本,细化标注规范,区分单根与成捆 |
| 同类别AP差异大 | 各类别样本数不平衡 | 针对性补充样本量少的类别,调整增强策略 |
| 阴天识别率骤降 | 训练集光线单一 | 采集时覆盖多时段,训练时增加亮度扰动和阴影模拟 |
| 无人机图像模糊 | 飞行速度过快或快门过低 | 降低飞行速度,开启无人机机械快门模式,提高ISO上限 |
5.2 几个容易踩的隐形坑
很多坑不是看文档能看出来的,是实打实跑现场才发现的。
第一个坑是切图尺寸和原图尺寸的匹配问题。我们的无人机原图分辨率很大,切图重叠率设低了,目标恰好穿过边界就被截成两半,检测结果既漏又重;重叠率设高了,推理时间翻倍。最终我把重叠率调到20%,并且要求切图尺寸必须能被原图尺寸整除,避免边缘残留小切图导致坐标映射错位。
第二个坑是无人机拍摄的Exif信息在图像预处理时被清理掉了。后期如果要按拍摄高度分统计分析检测结果,这些信息就没法用了。建议在图像命名里直接编码拍摄信息,比如用"20250624_10_30_001"这种命名格式,分别表示日期、高度、俯仰角、序号,这样即使元数据丢失也能溯源。
第三个坑是业务系统的计数逻辑。模型检测出的是"实例数",但工地管理者真正关心的是"方量"或"吨数"。从实例数到体积再到重量,每一步都有折算系数,而这些系数会因为砖块规格、木材含水率等因素产生波动。我建议不要试图在算法里解决所有折算问题,而是把折算规则放到业务系统里,让使用者根据实际情况调整,灵活得多。
最后一个坑比较玄学但真实存在:模型在验证集上表现很好,到了工地现场却变差。原因几乎总是训练图像和现场图像存在分布偏移。比如训练集里砖块大多是红色,现场却运来一批灰色砖;训练集里钢材是裸露堆放,现场却盖了防雨布。解决思路只有一条——持续采集新场景图像、持续标注、持续迭代。我把这个项目设计成了月度迭代节奏,每个月用新增图像微调一次模型,保证系统越用越准。
5.3 完整落地效果的复盘
整个项目从数据采集到系统上线,前后大概用了两个半月。前两周集中做无人机航线和采集规范,中间一个月做标注、训练和迭代,最后两周做部署和业务联调。上线后连续跑了一个月的实测,整体识别准确率稳定在85%以上,材料台账的人工复核工作量减少了约70%。
这个项目证明了一件事:智慧工地并不需要多么高大上的技术堆叠,把采集、标注、训练、部署、业务闭环这几步踏踏实实做好,就能产生实实在在的价值。砖块识别也好、木材钢材识别也好,底层都是成熟的目标检测技术,真正的门槛在业务理解、数据质量和工程细节。如果你正在做类似的项目,我的建议是不要一上来就追求算法精度,先把数据链路跑通,把业务逻辑理清,模型自然会越训越好。