ARTICLE DETAIL

资讯详情

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

积水图像分割检测数据集与yolo11训练全链路实战指南

积水图像分割检测数据集与yolo11训练全链路实战指南 简介这份积水图像分割检测数据集面向具备Python与CNN基础、从事图像分割或目标检测的开发者与研究者可用于YOLOv8、YOLOv11等框架的训练与验证帮助解决积水场景下像素级分割与目标定位的数据来源问题。资源包共1071个文件压缩包约389.4MB包含428张jpg原始积水图像、428个txt标注文件、214个json标注文件及1个yaml配置文件其中jpg为待分割原图txt对应YOLO格式标注json提供结构化区域与类别信息yaml用于数据集路径与类别配置三种标注可灵活切换使用。目前已有519人学习下载。数据集按segment目录划分为img、json、seg三个子文件夹结构清晰便于直接接入YOLO系列训练流程也可用于自定义分割模型的验证与调参适合需要快速搭建积水检测实验的读者参考使用。1. 积水图像分割检测数据集从标注格式到 yolo11 训练链路的一次讲透城市内涝、地下车库进水、隧道积水这些场景下靠人工盯监控屏幕基本等于碰运气。积水图像分割检测数据集要解决的就是这件事让模型逐像素判断画面里哪块区域是积水而不是只画个框说“这里有水”。分割比检测更苛刻因为积水边界模糊、反光、倒影、路面湿痕都会干扰框标注根本描述不了这些细节。这个数据集面向的就是需要做像素级积水区域提取的团队配套 yolo8、yolo11 等代码做图像分割训练。如果你手头有监控截图、无人机巡检图或车载摄像头画面想跑通一条从数据到可推理模型的链路这篇就是按我实际落地的顺序写的。新手能照着命令走熟手可以直接跳到参数和踩坑部分。2. 积水分割数据集长什么样标注格式、目录结构与选型判断2.1 分割标注的两种主流格式与转换关系拿到一个积水图像分割数据集第一件事不是急着训练而是搞清楚标注到底存成了什么。图像分割训练常见两种标注多边形点集polygon和掩码图mask。多边形点集通常存成 JSON 或 YOLO 的 txt 格式每个目标一行格式是类别索引 x1 y1 x2 y2 ... xn yn坐标是归一化到 0~1 的浮点数。掩码图则是一张和原图同尺寸的单通道 PNG像素值 0 表示背景1 或 255 表示积水区域。YOLO 系列的分割训练yolov8-seg、yolo11-seg吃的是多边形点集格式所以如果你的数据集给的是掩码图必须做一次转换。常见做法是用 OpenCV 的findContours把掩码转成轮廓点再归一化写入 txt。反过来如果只有多边形想转掩码就用fillPoly填充。两种格式没有绝对优劣多边形省空间、易编辑掩码直观、适合复杂形状。积水边界往往不规则多边形点数不够会丢细节点数太多又拖慢训练我一般控制在每目标 32~128 个点之间。提示转换前先确认类别索引从 0 还是 1 开始YOLO 要求从 0 开始很多标注工具默认从 1 开始这个错位会让训练直接崩掉。2.2 目录结构images 与 labels 必须严格对应YOLO 分割训练对目录结构有硬性要求不是随便放放就行。标准布局是dataset/ ├── images/ │ ├── train/ │ │ ├── 0001.jpg │ │ └── ... │ └── val/ │ └── ... ├── labels/ │ ├── train/ │ │ ├── 0001.txt │ │ └── ... │ └── val/ │ └── ... └── data.yaml关键点是 images 和 labels 下的文件名必须一一对应只是扩展名不同。0001.jpg对应0001.txt缺一个训练时那对样本就被跳过或报错。我见过有人把 labels 直接平铺在一个文件夹里结果 yolo11 找不到标注训练 loss 一直不降排查半天才发现是路径问题。data.yaml是数据集的总入口内容大致如下path: /home/user/dataset train: images/train val: images/val nc: 1 names: [water]nc是类别数积水场景通常就一类写 1。names顺序必须和标注里的类别索引一致。如果数据集里还标了“湿滑路面”“反光水面”等子类nc和names要同步改否则模型学出来的类别是错位的。2.3 选型判断什么情况下值得用分割而不是检测不是所有积水任务都值得上分割。如果你只需要知道“画面里有没有积水”检测框足够标注成本低一个数量级。但如果你要做积水面积估算、排水口定位、积水深度趋势分析或者要把积水区域叠加到 GIS 图层上那就必须分割。分割的标注成本大约是检测的 3~5 倍训练显存也更高yolo11-seg 在 640 分辨率下 batch size 通常只能开到 8~168GB 显存。所以先问自己下游到底要不要像素级边界。要就上分割不要别为了“先进”硬上。另外积水图像分割检测数据集的质量比数量重要。1000 张标注精细的图往往比 5000 张边界糊弄的图训出来的模型更稳。尤其是夜间、逆光、雨滴遮挡这些难例如果数据集里几乎没有模型上线后必然翻车。3. 用 yolo11-seg 跑通第一轮训练环境、命令与参数3.1 环境配置从零到能跑 train 的最小步骤yolo11 的环境配置在 Windows 和 Linux 上略有差异但核心依赖就那几个。我一般用 conda 建一个干净环境避免和系统里的 torch 冲突。conda create -n yolo11seg python3.10 -y conda activate yolo11seg pip install torch torchvision --index-url https://download.pytorch.org/whl/cu121 pip install ultralytics opencv-python pyyaml这里cu121对应 CUDA 12.1如果你的显卡驱动只支持到 CUDA 11.8就把 index-url 换成cu118。装完用下面这行验证python -c import torch; print(torch.cuda.is_available(), torch.cuda.get_device_name(0))输出True和显卡型号才算通。如果输出False先别急着训检查驱动版本和 torch 版本是否匹配。Windows 上还常见一个坑pip install ultralytics会自动拉一个 CPU 版 torch把之前装的 GPU 版覆盖掉所以顺序一定是先装 torch 再装 ultralytics或者装完 ultralytics 后重装一次 torch。3.2 训练命令与关键参数batch、imgsz、epochs 怎么定环境通了之后训练命令本身不复杂yolo segment train \ modelyolo11n-seg.pt \ data/home/user/dataset/data.yaml \ epochs100 \ imgsz640 \ batch8 \ device0 \ workers4 \ projectruns/water_seg \ nameexp1逐项说。modelyolo11n-seg.pt是官方预训练权重n 是最小号显存不够就从 n 开始够了再换 s 或 m。imgsz640是输入分辨率积水边界细理论上越大越好但 1024 会让显存翻倍8GB 卡基本跑不动 batch4。batch8是我在 8GB 显存下的保守值如果报 OOM先降到 4再不行降到 2。workers4是数据加载线程数Windows 上设太高反而会卡建议 2~4。epochs100不是拍脑袋。积水分割数据集通常几千张图100 轮足够看到收敛趋势。判断收敛看runs/water_seg/exp1/results.csv里的metrics/mAP50-95(M)如果 50 轮后还在明显上升就加到 150如果 30 轮就平了说明模型容量或数据量到顶了加轮数没用。训练过程中会输出每轮的 box loss、seg loss、cls loss。seg loss 是分割掩码的损失它不降说明标注格式或类别索引有问题先回去查 labels。3.3 推理与验证怎么确认模型真的学到了积水边界训完不是看一眼 mAP 就完事。用下面命令跑单张图推理yolo segment predict \ modelruns/water_seg/exp1/weights/best.pt \ source/home/user/test_images \ saveTrue \ conf0.25 \ iou0.5conf0.25是置信度阈值低于它的预测被丢弃。积水场景我一般从 0.25 开始试如果漏检多就降到 0.15误检多就升到 0.4。iou0.5是 NMS 的 IoU 阈值分割任务里这个值影响不大因为同一区域很少出多个掩码但保留默认没坏处。推理结果会存到runs/segment/predict下每张图带掩码叠加。重点看三类图夜间反光路面、浅积水与湿痕交界、雨滴遮挡区域。这三类如果边界糊成一团说明训练集里这类样本太少需要补数据或做针对性增强。4. 避坑与排查积水分割训练里最容易翻车的 5 个点4.1 现象loss 为 nan 或训练一开始就崩原因通常是标注文件里有非法值。YOLO 要求多边形坐标在 0~1 之间如果标注工具导出时带了负值或大于 1 的值或者某行点数少于 6 个不足 3 个点解析就会出问题。解决方法是写个脚本扫一遍所有 txtimport os, glob for f in glob.glob(dataset/labels/train/*.txt): with open(f) as fp: for i, line in enumerate(fp): parts line.strip().split() if len(parts) 7: print(f{f} line {i}: too few points) continue coords list(map(float, parts[1:])) if any(c 0 or c 1 for c in coords): print(f{f} line {i}: coord out of range)扫出来有问题的文件要么修要么直接移出训练集。别指望模型能容忍脏标注。4.2 现象mAP 看着还行但掩码边界明显偏移这是分割任务特有的坑。mAP50-95(M) 是掩码 IoU 的平均如果数据集里大目标多小目标边界偏一点对整体指标影响不大但实际用的时候小积水区域就漏了。解决办法是单独看小目标的指标或者在验证时把imgsz调大跑一次对比。如果大分辨率下边界明显更准说明训练分辨率不够考虑用 800 或 1024 重训同时把 batch 降下来。4.3 现象Windows 上训练到一半报共享内存错误Windows 的workers机制和 Linux 不同设高了容易触发RuntimeError: DataLoader worker exited unexpectedly。直接把workers0或workers2牺牲一点加载速度换稳定。另外 Windows 路径用反斜杠时data.yaml里的path最好写绝对路径相对路径有时解析不到。4.4 现象验证集指标远高于实际推理效果八成是训练集和验证集有重叠图片或者验证集图片和训练集来自同一段视频的相邻帧内容几乎一样。这种“泄漏”会让指标虚高。解决方法是按视频源或时间段划分 train/val而不是随机抽帧。如果数据集本身没标来源至少做一次感知哈希去重把近似重复的图分到同一侧。4.5 现象推理时掩码边缘有锯齿或空洞这是后处理问题不是模型问题。YOLO 输出的掩码是低分辨率原型掩码上采样得到的边缘天然不光滑。可以在推理后加一步形态学闭运算import cv2 import numpy as np mask cv2.imread(pred_mask.png, 0) kernel np.ones((5, 5), np.uint8) mask_closed cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel)kernel大小根据实际分辨率调640 图用 3~51080 图用 7~9。闭运算能填小空洞但也会让边界略微外扩如果下游对面积敏感慎用。5. 把积水分割推到可用小目标增强与推理后处理的组合技巧数据集和训练链路跑通之后真正决定能不能上线的往往是那些指标之外的东西。我踩过最深的坑是模型在验证集上 mAP 挺好看一到实际监控画面远处的小片积水全漏。后来发现是训练时小目标样本占比太低yolo11 虽然比前代对小目标友好但积水这种低对比度目标不加针对性处理还是不行。一个成本最低的改进是在训练配置里开小目标增强。yolo11 的train支持scale、mosaic、copy_paste等增强参数。copy_paste0.3对小目标分割特别有用它把标注目标复制粘贴到其他图上相当于免费扩充小目标样本。scale0.5让图片随机缩放也能增加小目标出现频率。这两个参数在data.yaml同级加一行copy_paste: 0.3即可或者直接在命令行传。另一个技巧是推理时的多尺度测试TTA。YOLO 推理加augmentTrue会做水平翻转等多尺度增强再合并结果对小目标召回有提升代价是推理速度慢 2~3 倍。如果下游是离线分析值得开如果是实时视频流慎用。最后说一个我自己的习惯每次训完模型我会挑 20 张验证集里最差的图逐张看掩码叠加而不是只看汇总指标。这 20 张里如果有 5 张以上是同类问题比如全是夜间反光那就说明数据集有系统性盲区补这类数据比调参有用得多。积水分割这件事数据质量的上限远高于模型结构的上限。希望帮到你。本文还有配套的精品资源点击获取
返回列表