ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

自建建筑物缺陷检测数据集:YOLO格式与增强训练全攻略

自建建筑物缺陷检测数据集:YOLO格式与增强训练全攻略 简介建筑物损坏缺陷识别YOLO数据集面向计算机视觉开发者、土木工程研究人员与建筑安全监测从业者解决裂缝、外露钢筋、剥落三类损伤的自动检测问题。包体包含2000个XML标注文件对应经旋转、缩放、色彩变换等增强处理的真实场景图像压缩包约912.1MB可配合YOLO系列模型直接训练。数据集已按训练、验证、测试划分便于模型学习与评估增强处理有效提升泛化能力降低过拟合风险适配多种光照与拍摄条件。目前已有756人学习下载。通过该数据集使用者可快速构建建筑物缺陷检测基线模型掌握标注格式转换、数据增强策略与目标检测调参流程亦可为后续结构健康监测系统提供算法验证基础适合高校课题、工程项目预研及算法竞赛练兵。 建筑物缺陷检测这个方向做过的朋友应该都清楚最折磨人的往往不是模型调参而是手里没数据。公开的建筑物损坏数据集本来就少能直接拿来训练YOLO的更是稀缺。我这次的项目就是围绕一套自制的建筑物损坏缺陷识别数据集展开的一共2400张已经完成了数据增强格式直接用YOLO系列最顺手的txt标注省去了从VOC或者COCO来回转换的麻烦。这篇内容就把这套数据集的构建思路、增强方案和训练实测心得一块儿整理出来给同样在死磕建筑物缺陷检测的兄弟们一个参考。1. 项目需求与数据集定位1.1 为什么要自己攒一套建筑物损坏缺陷数据集公共数据集里建筑物相关的基本都集中在分割、三维重建这些方向真正针对“损坏缺陷检测”这种细粒度目标的公开资源极其有限。像COCO、VOC这种通用数据集里面的类别压根没有“裂缝”“墙皮剥落”“渗水痕迹”这种级别的定义。你能搜到的一些裂缝检测数据集多数是路面裂缝建筑物立面上的裂缝、剥落、空鼓和渗水标记形态差异非常大。路面裂缝是俯视角度建筑物立面是正视或者斜视角度光线变化、遮挡、纹理背景都完全不一样直接用路面模型来检测建筑立面效果肯定会打折扣。所以我自己从零开始攒这套数据核心目标就一个让YOLO系列模型在建筑物缺陷检测上有能用的、靠谱的训练物料。类别设计上我最终定的是五类裂缝、剥落、渗水、破损、空鼓。这五类基本覆盖了日常建筑物巡检中最常见的外立面缺陷也是物业巡检、房屋安全鉴定、保险定损这些场景里最容易被要求标注的问题点。1.2 YOLO格式为什么是这套数据集的首选现在做目标检测YOLO格式几乎是事实标准了。它的标注文件是每个图像对应一个同名txt文件每行记录一个目标格式为“类别ID 中心点x 中心点y 宽度w 高度h”后四个值全部归一化到0-1之间。这个格式的优势非常明显第一个优势是转换方便。只要是用txt一行一个目标的格式YOLOv5、YOLOv8、YOLOv9、YOLOv10、YOLO11甚至YOLO12包括MMDetection里的YOLO系配置都能直接读不需要再做格式转换。第二个优势是后续做数据增强时标签跟着图走比较省事归一化坐标在裁剪、缩放后只需要做简单的线性映射不容易算错。第三个优势是推理阶段部署对接也简单很多边缘设备厂商的SDK直接内置了YOLO的txt标签解析省去很多自定义逻辑。我自己在用的过程中也踩过坑比如刚开始标注时坐标保留的小数位数不够导致训练时anchor匹配出问题。后来统一强制保留六位小数问题就消失了。这个细节提醒一下大家如果发现模型训练初期loss异常高先检查一下标注txt里的坐标精度。2. 数据来源与标注规范2.1 图像素材来源与筛选标准这套数据集里的2400张图像来源分了两块。第一块是公开的建筑物外观图像素材这部分主要是从一些开放授权、可商用的图片站点爬取筛选出来的筛选关键词围绕“建筑外墙裂缝”“混凝土剥落”“墙面渗水”“墙体破损”展开确保面面俱到又不过度集中。第二块是我自己用设备采集的主要是老旧小区、厂房外墙、临街商铺立面这些容易出问题的建筑拍摄时覆盖不同时间段的光线条件。筛选标准上我的原则是宁缺毋滥。模糊的图不要、光照严重过曝的图不要、目标区域占比小于5%的图先剔除。因为建筑物损坏缺陷往往是小目标如果本身在图上就很小标注后对训练的贡献有限不如不加。最终实际筛选下来原始图像数量有1800多张通过后续的增强操作扩到2400张。这里有个经验想分享不要为了凑数量把质量差、目标不清晰的图硬塞进数据集。低质量图不仅会增加标注工时还会在训练时给模型带来大量噪声。曾经试过加入一批几百张带严重运动模糊的图结果模型mAP反而掉了两个点后来花了两天重新清洗掉才恢复正常。2.2 标注工具选择与标注规范细节标注工具我用的是LabelImg和X-anylabeling搭配着来。LabelImg是老牌工具稳定够用X-anylabeling支持的格式更全而且自带一些辅助标注模型提高效率。我个人效率最高的方式是先用X-anylabeling跑一批预标注自己导出后人工修正。这样一边做一边标第一个版本2400张实际标注耗时大约三个晚上加一个下午比纯手工标注至少省了一半时间。标注规范上我给自己定了几条硬规矩避免同一个缺陷在不同图像里框的形态不一致影响模型学习。第一裂缝类目标用最小外接矩形框框要尽量贴着裂缝的实际延展范围。第二剥落类目标按破损区域的外轮廓来定框不要把周边完好的墙面包进去。第三渗水类目标包括水渍的明显痕迹区域颜色变化或者潮湿反光区域都要算。第四同一图像里如果同一类缺陷目标有多个全部标注一个不漏。第五当一个目标被遮挡超过30%时就不标了宁缺毋滥。这些规范看起来简单但实际影响很大。初期我图省事裂缝框得比较随意有的框包了周边完好的灰泥有的框又窄到只覆盖了裂缝最粗的一段。训练出来的模型预测框时宽时窄检测效果很差。后来全部重新过了一遍框的边界效果立刻上来了。3. 数据增强方案设计与实现3.1 数据增强为什么是刚需2400张这个数量级对YOLO模型来说其实属于偏少的。尤其是建筑物损坏缺陷这种目标小、纹理复杂的检测任务模型很容易过拟合到训练集中的特定光照条件和背景纹理上。数据增强最大的价值在于在不改变标注语义的前提下人为制造更多样本变体迫使模型学到更稳健的缺陷特征而不是背住训练集里的图像场景。我做的增强分两个阶段。第一阶段是离线增强——就是对合成出来的图像镜像、调亮度、加噪声之后再存成新的文件第二阶段是在线增强——训练时通过YOLO自带的参数比如Mosaic、HSV扰动、随机翻转等来做。两者结合既保证了数据集文件本身的多样性又让训练过程中每轮见到的样本都不一样。3.2 增强方案与参数表离线增强方面我做了几组常规操作这里列一下具体的参数范围增强方式具体参数说明水平翻转概率1.0垂直翻转对建筑场景会导致语义颠倒尽量不用亮度调节0.8~1.2倍覆盖早晚光线差异对比度调节0.9~1.1倍抑制不同天气下的对比度差异高斯噪声sigma 0.2~0.5模拟传感器或传输噪声高斯模糊kernel 3或5模拟轻度失焦情况随机裁剪裁剪后保持尺寸裁掉不超过5%的边缘模拟不同构图视角每一张原始图通过以上不同增强组合扩增出接近两到三倍的变体。最终从1800多张原始图得到2400张成品图部分原始图保留未增强版本部分图对应多个增强版本整体控制数量在2400这个规模。这里要特别提醒一件事增强后的图像需要重点检查标签坐标是否自动同步更新。我用的增强工具是集成标签一起处理的所以坐标跟着图像同步变化。如果你手动写脚本做增强一定要把标签文件的归一化坐标也做对应的几何变换。常见的坑是水平翻转之后忘记把中心点x坐标从x改成1-x导致训练出来的模型检测位置完全错乱。在线增强方面YOLOv8里我启用了Mosaic增强、HSV-H、HSV-S和随机翻转。Mosaic能把四张图拼成一张让模型在训练时看到更多目标尺度和上下文关系对提升小目标检测能力很有帮助。HSV扰动主要让模型对阳光阴影、色温变化更鲁棒。这些参数我一般在配置里开默认值如果遇到数据量特别少的类别再用针对性策略叠加。3.3 类别平衡的处理细节2400张里五类缺陷的分布不是均匀的。裂缝和剥落这类常见问题数量偏多空鼓这类不太容易通过可见光直接判断的问题就少一些。如果直接训练模型对小样本类别会明显偏弱尤其是空鼓占比最少初期训练出来的模型几乎检测不到空鼓目标。我的处理策略是统计各类别的目标框数量然后对少样本类在增强时加倍采样比如空鼓类原始目标只有80个我就在增强时对包含空鼓的原始图像加大翻转和裁剪的倍数给它补到接近其他类别的量级。增强后整体目标数量分布基本平衡各类别目标数量都维持在1500个以上效果改善明显。4. 训练验证与问题排查实录4.1 划分为训练集、验证集和测试集数据划分这一步看着简单但处理不好也会给后续带来麻烦。我按622的比例划分为训练集、验证集和测试集。划分之前必须保证同一栋楼的不同视角图像不会被拆到训练集和测试集两边。因为同一栋楼的图像背景纹理高度相似如果既在训练集又在测试集里模型在测试集上的得分会虚高一旦部署到全新场景性能就露馅了。所以我对图像按来源文件名做了分组同一个拍摄来源的图尽量进同一个集合。我用了一个简单的脚本先按图像文件名提取拍摄场景分组ID再按分组ID来切分确保不同来源的图像不会混入不同集合中。这一步相当重要我在项目早期没有注意导致验证集上的mAP虚高到0.87换到新场景一测只有0.6白白浪费了两天排查时间。4.2 训练参数配置与实测效果我用的是YOLOv8m作为主力模型来训练这套数据集。选择m版本是综合考虑了检测精度和推理速度的折中s版本在裂缝这种细长目标上容易漏检l版本又会让边缘设备推理帧率吃紧。关键训练参数如下yolo detect train \ databuild_defect.yaml \ modelyolov8m.pt \ epochs150 \ imgsz640 \ batch16 \ lr00.01 \ lrf0.01 \ optimizerAdamW训练在单张RTX 3090上大概耗时三个多小时。从验证集结果来看裂缝类的mAP50能到0.83剥落类0.87渗水类0.79破损类0.81空鼓类由于目标特征本身模糊mAP50只有0.68整体mAP50约为0.81。对一套2400张的增强数据集来说这个成绩是可以接受的。如果要在更低算力的设备上跑建议用YOLOv8s然后把imgsz降到480精度会掉一些但速度提升明显。4.3 常见问题与排查思路训练和测试过程中我遇到过几个比较典型的问题整理成一个速查表格方便大家直接对照排查。常见问题可能原因排查方法训练早期loss震荡不收敛标注坐标精度不足学习率过高检查txt坐标是否保留六位小数lr0下调到0.005再试裂缝目标漏检严重裂缝细长形态导致anchor匹配失败开启Mosaic增强尝试提高输入分辨率检查生成anchor的自动调参增强后标签错位数据增强脚本未同步更新坐标对增强前后的图像和标签做可视化叠加对比验证集mAP虚高同源图像被拆到多个集合按场景分组划分数据集空鼓类几乎检测不到少样本类别训练不足对该类做额外增强调整损失函数里的类别权重如果大家发现训练出来的模型在预测时输出大量重叠框可以查一下是不是当时训练数据里同一缺陷被重复标注成了多个目标框。我第一版数据里有些裂缝被重复标注了两次导致预测时总是输出两个几乎重叠的框后来清理掉重复框之后问题就没了。4.4 部署阶段的轻量化处理训练完成后如果要做实际部署还有一个可选的步骤就是模型轻量化。建筑物缺陷检测经常要跑在无人机机载设备或者边缘计算盒子上这类设备算力有限。我这边实测下来用TensorRT对YOLOv8m的FP16模型做加速推理速度能从35ms左右降到12ms左右非常明显。导出命令参考yolo export modelbest.pt formatengine device0 halfTrue导出后验证一下精度损失我实测mAP下降不到0.5个点但速度提升接近三倍对实时巡检场景来说很值得做。5. 数据集的后续扩展与个人经验5.1 从可见光到多模态的扩展思路目前这套2400张数据集全部是可见光图像对裂缝、剥落、渗水这类表观缺陷识别效果不错但一些隐蔽缺陷比如内部空鼓、结构变形单靠可见光很难发现。后续我计划在数据采集时增加红外热成像图目标是让模型能识别温度异常区域的空鼓情况。红外和可见光的标注可以共用一套框训练时做成双输入或者用知识蒸馏的方式做多模态融合。这个方向目前还在试验中如果后面效果稳定了再单独写一篇来分享。5.2 实际使用中的几点经验和建议这套数据集从采集、标注、增强到训练部署整个过程走下来个人觉得最有价值的经验就三条。第一不要把时间浪费在“找完美数据集”上先用手里的少量数据把流程跑通再迭代扩充。哪怕只有200张图标注好跑一次训练就能暴露出类别定义、标注规范、数据分布上的很多问题。我第一版数据集才500张的时候就已经发现了空鼓类别标注标准不稳定、裂缝框边界不一致这些坑。没有第一步的试错直接花大量时间扩数据很可能整个数据集从标注源头就是歪的。第二数据增强不只是为了数量更是为了让模型“看不腻”这些图像。训练时搭配在线增强比单纯离线堆积数据样本更能提升泛化能力。具体来说Mosaic增强打开之后模型对大目标的检测精度提升比小目标更明显小目标还是要靠提高输入分辨率和调整anchor来改善。第三标注规范文档一定要写下来尤其是多人协作标注的时候。像我前面提到的框边界定义、遮挡目标的处理如果没写清楚标注的同学各自凭感觉理解最后整合数据时各种框的风格混杂会很崩溃。最后再分享一个小技巧每次做完增强或者清洗数据后把数据集的名录、版本号和图像数量记下来最好同步到版本管理里。做了五六个版本之后我完全依赖文件名和目录来区分结果有两次训练用的数据集版本和记录不一致浪费了大量时间排查。后来建了一个简单的数据版本表记录每个版本的图像数量、类别分布、增强参数和对应训练结果再也没出过这种问题。做数据集是个细水长流的活版本管理越早做得越规范后面省心越多。本文还有配套的精品资源点击获取
返回列表