ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

建筑墙壁损伤缺陷分割数据集:7820张图与20类缺陷的labelme格式解析

建筑墙壁损伤缺陷分割数据集:7820张图与20类缺陷的labelme格式解析 简介面向建筑安全检测与计算机视觉研究者的墙壁损伤缺陷分割数据集以labelme标注格式提供可用于训练和评估图像分割算法实现剥落、锈蚀、裂缝等损伤的自动识别与分类。资源包共1个docx文件约2.1MB内含数据集说明与标注规范7820张640×640像素jpg图片均配有对应json标注文件采用多边形框精细描绘损伤区域覆盖涂鸦、支座、潮湿斑迹、锈蚀、剥落、泛碱、空洞区域、风化、残留模板、空腔、外露钢筋、伸缩缝、裂缝、排水、活动裂缝、接头胶带、岩窝、防护设备、水侵蚀混凝土及物体共20个类别其中锈蚀、剥落、空腔等类别标注量较为丰富。已有103人学习关注。读者可据此了解数据集结构、类别分布与标注规则并自行将json转换为mask、yolo或coco格式用于语义分割或实例分割实验为建筑墙壁健康监测研究提供数据基础。1. 建筑墙壁损伤缺陷分割数据集7820 张图背后的“建筑病历本”到底长什么样如果你第一次听到“建筑墙壁损伤缺陷分割数据集”这个词大概率会以为它是一份检测报告或者某个软件的名字。其实都不是。它更像一本被拆成 7820 页的“建筑病历本”每一页是一张 640×640 的墙壁照片旁边配一份 JSON 文件用多边形把墙上的裂缝、锈蚀、剥落、泛碱一块块圈出来并写上这属于哪一类毛病。这本“病历本”一共记录了 20 种损伤类别从涂鸦、支座到外露钢筋、水侵蚀混凝土覆盖了建筑外墙和结构表面常见的缺陷形态。搞懂它的价值在于过去判断一面墙有没有问题靠的是老师傅拿手电筒一寸寸看经验难复制、标准难统一。而有了这种带像素级标注的数据算法就能学着“看图识病”把人工巡检变成可批量、可复现的自动识别。对做计算机视觉的人来说它是一份现成的分割训练素材对建筑检测领域的人来说它是一份把“墙面病害”翻译成机器能读的语言的样本集。下面就从它是什么、为什么这样设计、容易和什么搞混一层层拆开讲。2. 为什么是 labelme 格式一份“只给原料不给成品”的数据集2.1 labelme 格式到底存了什么很多人下载完数据集解压一看只有 jpg 和 json没有常见的 mask 图片第一反应是“是不是缺文件”。其实这正是 labelme 格式的特点它不直接给你一张黑白掩膜图而是把标注信息写进 JSON 里。每份 JSON 记录的是多边形顶点坐标、类别名称、图片路径这些原始信息相当于把“画框的过程”保存了下来而不是只保存“画完的结果”。打个比方mask 文件像是一张已经烤好的蛋糕你只能看不能改配方labelme 的 JSON 则像一份带步骤的食谱面粉多少、糖多少、烤箱几分钟都写着你随时可以调整。数据集明确说明“不包含 mask 文件仅仅包含 jpg 图片和对应的 json 文件”这不是偷工减料而是把转换的自由度留给了使用者。你可以把它转成语义分割用的 mask也可以转成 YOLO 或 COCO 格式做实例分割路线自己选。从标注工具看这批数据用的是 labelme 5.5.0标注方式是 polygon 多边形框而不是简单的矩形框。多边形意味着标注者沿着损伤区域的实际轮廓描边裂缝的细长走向、剥落的不规则边缘都能被贴合这对分割任务比矩形框精细得多。图片统一为 640×640 分辨率尺寸规整省去了大量预处理时缩放裁剪的麻烦。2.2 为什么类别设计得这么“细”20 个类别乍看有点多但拆开看是有层次的。有的描述材料劣化比如 Rust锈蚀、Spalling剥落、Efflorescence泛碱、Weathering风化有的描述结构异常比如 Crack裂缝、ACrack活动裂缝、Hollowareas空洞区域、Cavity空腔、Rockpocket岩窝还有的偏向附属设施或施工遗留比如 Bearing支座、EJoint伸缩缝、Drainage排水、JTape接头胶带、Restformwork残留模板、PEquipment防护设备。这种细分不是为了凑数而是因为不同缺陷的成因和处理方式差别很大模型如果只能识别“墙坏了”实用价值有限能分清是锈胀引起的剥落还是泛碱引起的表面析出才谈得上辅助判断。类别数量分布也很能说明问题。Rust 的标注数达到 14665Spalling 有 9849Cavity 有 9222这三类占了很大比重而 object 只有 13 个ACrack 只有 423 个JTape 1076 个。这种长尾分布是真实场景的写照——锈蚀和剥落在老旧建筑上随处可见活动裂缝和杂物的出现频率则低得多。使用时要意识到样本少的类别训练难度天然更高不能指望模型对每个类别都一视同仁地准。提示数据集本身不对训练出的模型精度或权重作任何保证它提供的是“准确且合理的标注”不是“开箱即用的检测器”。把它当成原料而不是成品。2.3 7820 张图意味着什么量级7820 张 jpg 配 7820 份 json数量上一一对应没有漏标。这个规模在建筑缺陷分割里属于中等偏上够用来训练一个中等复杂度的分割网络也够做一次有说服力的对比实验但还不至于大到需要分布式训练。640×640 的分辨率对分割任务是个务实的选择——再高会显著增加显存和标注成本再低则裂缝这类细长目标容易糊成一片。从使用角度看这个量级适合做几件事训练一个基线分割模型、验证某种数据增强策略对缺陷识别的效果、或者拿其中一部分做微调。它不适合直接当成“万能检测器”的充分条件因为建筑场景的光照、材质、拍摄角度变化极大单一数据集很难覆盖全部情况。理解这一点比记住 7820 这个数字更重要。3. 20 个类别怎么读从“墙面病害”到“机器可读标签”3.1 材料劣化类锈蚀、剥落、泛碱、风化这几类是墙面最直观的“病”。Rust 指钢筋或金属件锈蚀后在表面留下的锈迹和锈胀标注数 14665是全集最多的类别说明它在样本里出现得极其频繁。Spalling 是剥落混凝土表层成片掉渣往往和锈胀、冻融有关标注数 9849。Efflorescence 是泛碱墙面析出白色盐霜看着像发霉但不是标注数 3956。Weathering 是风化表面被日晒雨淋磨得粗糙变色标注数 4621。这四类容易在视觉上互相干扰锈迹偏红褐泛碱偏白剥落有凹凸阴影风化则是整体质感变化。模型要分清它们靠的不是颜色单一特征而是纹理和边界的组合。标注时用多边形沿实际区域描边正好保留了这些边界信息比矩形框更能体现“病斑”的形状。3.2 结构异常类裂缝、活动裂缝、空腔、空洞区域、岩窝Crack 是普通裂缝标注数 3612ACrack 是活动裂缝标注数 423数量少但含义特殊——活动裂缝意味着它还在发展对结构安全的提示更强。Hollowareas 是空洞区域标注数 1538Cavity 是空腔标注数 9222两者名字接近但标注量差很多使用时要按数据集给出的定义来理解不要自行合并。Rockpocket 是岩窝标注数 616属于混凝土浇筑或基层处理留下的凹坑。裂缝类目标的特点是细长、对比度低分割难度高。640×640 的分辨率下一条细裂缝可能只占几个像素宽多边形标注能否贴合走向直接影响模型学到的边界质量。这也是为什么数据集强调“对类别进行画多边形框 polygon”——矩形框会把大量背景裹进去细裂缝就学不准了。3.3 附属与施工遗留类支座、伸缩缝、排水、接头胶带、残留模板、防护设备Bearing支座标注 1201EJoint伸缩缝506Drainage排水1649JTape接头胶带1076Restformwork残留模板1019PEquipment防护设备1892。这些类别严格说不是“损伤”而是墙面上的构件或施工痕迹。它们被纳入标注是因为在真实巡检画面里这些元素经常和缺陷混在一起模型如果分不清“这是伸缩缝”和“这是裂缝”就会误报。举个具体场景一条笔直的伸缩缝在照片里和一条直裂缝很像但前者是设计预留后者是病害。数据集把 EJoint 单独列类就是让模型有机会学会区分。同理接头胶带和残留模板属于施工遗留容易被当成表面异物单独成类能减少混淆。这类“非损伤类别”的存在恰恰说明数据集的设计考虑了真实巡检的干扰因素而不是只挑干净的病害样本。3.4 长尾类别与 object 的定位object 只有 13 个标注是全集最少的类别含义是“物体”大概率用于兜底标注画面里无法归入其他类别的干扰物。ACrack 423、Rockpocket 616、EJoint 506 也属于长尾。长尾类别在训练时容易被大类淹没如果直接按整体精度评估模型可能对它们几乎不响应却 still 拿到好看的分数。使用这份数据时比较稳妥的做法是分类别看指标而不是只看一个总数。注意类别名称里的英文拼写如 WConccor、Restformwork是数据集原始定义转换格式时保持原样不要自行“纠正”否则和 json 里的标签对不上。4. 易混概念辨析分割数据集不是检测数据集labelme 不是 mask4.1 易混点一分割数据集和检测数据集很多人把“缺陷分割数据集”和“缺陷检测数据集”当成一回事。混淆的原因是两个任务都输出“哪里有缺陷”看起来差不多。区别在于输出粒度检测任务给的是矩形框告诉你“这个区域有裂缝”分割任务给的是像素级掩膜告诉你“这几个像素是裂缝旁边那些不是”。这份数据集用 polygon 多边形标注走的是分割路线虽然也能降级转成检测框用但它的核心价值在像素级边界。怎么区分看标注文件里存的是什么。如果只有框的左上角坐标和宽高那是检测如果是多边形顶点序列那是分割。这份数据的 json 里是多边形点集所以它天然服务于语义分割或实例分割而不是单纯的框检测。4.2 易混点二labelme 的 json 和 mask 图片新手最容易卡在这里以为下载完就能直接喂给分割网络结果发现没有 mask 图。json 是“标注的源文件”mask 是“标注的渲染结果”。json 里存的是类别和多边形坐标mask 是把这些多边形按类别填成不同像素值的图。两者信息等价但格式不同。数据集只给 json意味着转换这一步要自己做可以转 mask也可以转 YOLO 的 txt 或 COCO 的 json。为什么这样设计因为不同框架要的格式不一样统一给源文件反而最灵活。代价是使用者得会写转换脚本或者找现成工具。这不是缺陷是取舍。4.3 易混点三语义分割和实例分割语义分割把同一类别的所有像素标成同一个值不区分“这是第几条裂缝”实例分割则要把每一条裂缝单独区分开。这份数据的 json 里每个多边形是独立对象理论上两种任务都能支持但转格式时要明确目标转成语义 mask 就把同类合并转成实例标注就保留每个多边形的独立性。搞混了会导致评估口径不一致训练出来的模型用途也对不上。4.4 易混点四标注数量多不等于类别重要Rust 有 14665 个标注object 只有 13 个数量差距巨大。有人会直觉认为“标注多的类别更重要”其实数量多只说明它在样本里常见不代表它在业务上优先级高。活动裂缝只有 423 个但它对结构安全的警示意义可能远超大量普通锈迹。使用数据集时类别权重应该按业务目标来定而不是按标注数量排序。4.5 易混点五数据集开放不等于模型可用数据集说明里写得很清楚只提供图片和标注不对训练出的模型或权重精度作保证。这和“下载即用”是两回事。混淆点在于很多人把“数据质量好”等同于“模型效果好”。实际上标注准确只是必要条件模型效果还取决于网络结构、训练策略、数据增强、场景匹配度。把这份数据当成起点而不是终点心态就对了。5. 什么时候该用它、什么时候别硬上一份边界判断5.1 适合用的场景第一类做建筑缺陷分割的基线实验。7820 张 640×640 图、20 类多边形标注规模适中、格式统一拿来跑一个分割网络、验证某个改进模块有没有效是很顺手的起点。第二类做 labelme 到其他格式的转换流程验证。json 转 mask、转 YOLO、转 COCO这套数据量足够暴露转换脚本里的边界问题比如多边形自相交、类别名映射遗漏。第三类做长尾分布下的类别不平衡研究。Rust 一万多、object 十几个天然就是一个不平衡样本适合测试重采样、损失加权这些手段。具体到操作层面转换时可以先用一小批数据验证流程比如先取 50 张跑通再全量。下面是一段把 labelme json 转成二值 mask 的示意代码只保留多边形填充逻辑实际使用时按类别映射改颜色值import json import numpy as np from PIL import Image, ImageDraw # 读取单份 labelme json把多边形按类别填成不同像素值 with open(sample.json, r, encodingutf-8) as f: data json.load(f) h, w data[imageHeight], data[imageWidth] mask np.zeros((h, w), dtypenp.uint8) # 类别名到像素值的映射需与训练时的类别表一致 cls_map {Crack: 1, Rust: 2, Spalling: 3} draw ImageDraw.Draw(Image.fromarray(mask)) for shape in data[shapes]: label shape[label] if label not in cls_map: continue points [tuple(p) for p in shape[points]] # polygon 填充第三个参数是类别像素值 ImageDraw.Draw(Image.fromarray(mask)).polygon(points, fillcls_map[label])这段代码的关键点有三个imageHeight和imageWidth决定 mask 尺寸必须和原图一致shapes里每个元素的points是多边形顶点顺序不能乱cls_map是类别名到像素值的映射必须和后续训练配置对齐漏一个类别就会导致该类被当成背景。实际转换时还要处理多边形点数为奇数、坐标越界这些脏数据建议先统计一遍再批量跑。5.2 不适合硬上的场景如果目标是直接上线一个“拍张照就知道墙坏没坏”的产品这份数据单独不够。它覆盖的是特定拍摄条件下的 640×640 画面真实巡检的光照、距离、遮挡变化更复杂模型泛化需要更多场景数据补充。如果目标是检测非墙面对象比如路面、桥梁底面类别体系对不上硬套只会得到一堆错标。如果团队没有格式转换能力又不愿意写脚本那 labelme 的 json 会成为第一道坎这时候要么先补转换工具链要么换现成的 mask 格式数据集。还有一个容易被忽略的边界这份数据不包含模型评估结果也没有划分训练集和验证集。拿到手需要自己切分切分时要注意同一面墙的多个角度图片不要跨集泄漏否则验证分数会虚高。这个坑我踩过——早些年拿类似数据直接随机切分验证集里混进了训练集同场景的图指标好看得离谱换真实场景就翻车。从那以后我每次切分前都先按拍摄来源分组再在组内随机宁可训练集小一点也不让验证集“见过答案”。希望这份拆解能帮你在打开那 7820 份 json 之前先想清楚自己要拿它做什么、缺哪一步、边界在哪。本文还有配套的精品资源点击获取
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表