核心内容摘要
《手搓》TaskFactory带你安全的起飞
汛期闯入seg数据集
数据集核心信息表
总结维度具体内容类别共4类分别为DiaoYuSan、ShuiBianDiaoYu、YouYongNiShui、water数量图像总数1533张图像分辨率未在提供的信息中明确说明格式未在提供的信息中明确说明
数据集应用领域汛期安全监测场景可用于识别汛期水域及周边的特定目标比如监测是否存在ShuiBianDiaoYu水边钓鱼、YouYongNiShui游泳溺水等可能引发安全事故的行为以及DiaoYuSan钓鱼伞这类与人员活动相关的物体辅助安全管理工作。
水利场景分析能针对数据集中的water水体类别进行识别与分割帮助相关人员掌握汛期水体范围、分布状态为汛情监测、水域动态变化追踪提供数据支持。
计算机视觉模型训练作为实例分割类型的数据集可用于训练实例分割算法模型提升模型在汛期复杂场景下对特定目标的识别精度为相关技术研发提供数据基础。
数据集价值提升汛期安全管理效率通过提供可用于识别危险行为和相关物体的数据帮助工作人员快速定位汛期安全隐患减少人工排查的工作量提高安全防控的及时性和准确性。
支撑水利工作决策基于对水体及周边目标的识别数据为水利部门分析汛情、制定防汛措施、评估水域变化影响等提供客观数据参考助力科学决策。
推动相关技术落地填补了汛期场景下实例分割数据资源的部分缺口为计算机视觉技术在防汛、水利等领域的实际应用提供数据支撑促进技术与行业需求的结合。
基于你提供的“汛期闯入”实例分割数据集含水域water、水边钓鱼ShuiBianDiaoYu等标注类别以下为完整的数据集适配方案与训练代码采用主流的YOLOv8-seg框架兼顾精度与速度支持实例分割任务并针对数据集特性做了细节优化。
数据集预处理关键步骤首先需将 Roboflow 导出的标注格式如你提供的 JSON 中的多边形标注转换为 YOLOv8-seg 支持的YOLO 格式图像 对应标签文件步骤如下
数据集结构整理最终数据集需符合以下目录结构便于 YOLO 框架读取flood_segmentation/ # 数据集根目录 ├─ images/ # 图像文件夹 │ ├─ train/ # 训练集图像1496张来自网页的Train:1496 │ │ ├─ w1920_h0_i244_jpg.jpg │ │ └─ ... │ └─ val/ # 验证集图像37张来自网页的Valid:37 │ └─ ... └─ labels/ # 标签文件夹与图像目录一一对应 ├─ train/ # 训练集标签 │ ├─ w1920_h0_i244_jpg.txt # 对应图像的YOLO格式标签 │ └─ ... └─ val/ # 验证集标签 └─ ...
标注格式转换JSON → YOLO网页中提供的标注为多边形polygon坐标如water类的 points 数组需转换为 YOLO-seg 格式YOLO-seg 标签格式[类别ID] [x1/y_width, y1/h_height, x2/y_width, y2/h_height, ...]注坐标需归一化到
之间x/y 为像素坐标width/height 为图像宽高转换代码示例PythonimportjsonimportosfromPILimportImage#
类别映射需与后续训练配置一致class_mapping{water:0,# 水域类ID0ShuiBianDiaoYu:1# 水边钓鱼类ID1}#
读取Roboflow导出的JSON标注网页中Raw Data的source数据json_pathroboflow_annotations.json# 你的JSON文件路径withopen(json_path,r,encodingutf-
asf:datajson.load(f)#
遍历每个图像的标注生成YOLO标签forimg_infoindata:# 若JSON为单图像直接处理img_infodataimg_nameimg_info[name]# 图像名如w1920_h0_i244_jpgimg_pathos.path.join(flood_segmentation/images/train,f{img_name}.jpg)# 图像路径imgImage.open(img_path)img_w,img_himg.size# 图像宽高1920x1080来自网页# 生成标签文件路径label_dirflood_segmentation/labels/trainos.makedirs(label_dir,exist_okTrue)label_pathos.path.join(label_dir,f{img_name}.txt)# 提取每个类别的多边形标注annotationsimg_info[annotations]withopen(label_path,w,encodingutf-
aslabel_f:forcls_name,cls_annoinannotations.items():ifconvertednotincls_anno:continueconvertedjson.loads(cls_anno[converted])forboxinconverted[boxes]:cls_labelbox[label]ifcls_labelnotinclass_mapping:continuecls_idclass_mapping[cls_label]# 提取多边形坐标并归一化pointsbox[points]# 格式[[x1,y1], [x2,y2], ...]normalized_points[]for(x,y)inpoints:norm_xx/img_w# x归一化norm_yy/img_h# y归一化normalized_points.extend([str(norm_x),str(norm_y)])# 写入标签文件类别ID 归一化坐标label_linef{cls_id} .join(normalized_points)\nlabel_f.write(label_line)print(标注格式转换完成)
YOLOv8-seg 训练代码采用 Ultralytics 库的 YOLOv8-seg 模型该库封装了训练、验证、推理全流程且支持自动加载数据集、计算指标mAP、IoU 等。
环境安装# 安装依赖库pipinstallultralytics pillow numpy matplotlib opencv-python
训练配置文件yaml创建flood_data.yaml文件指定数据集路径、类别数及类别名需与上述class_mapping一致# flood_data.yamlpath:./flood_segmentation# 数据集根目录相对/绝对路径均可train:images/train# 训练集图像路径相对于pathval:images/val# 验证集图像路径相对于path# 类别配置nc:2# 类别数2类water ShuiBianDiaoYunames:[water,# 0: 水域ShuiBianDiaoYu# 1: 水边钓鱼]
完整训练代码fromultralyticsimportYOLOimportos# ----------------------
基础配置 ----------------------# 模型选择yolov8n-seg轻量版适合快速验证/ yolov8s-seg平衡版/ yolov8l-seg高精度版model_nameyolov8s-seg.pt# 配置文件路径yaml_pathflood_data.yaml# 训练输出目录output_dirflood_train_resultsos.makedirs(output_dir,exist_okTrue)# ----------------------
加载预训练模型 ----------------------# 加载YOLOv8-seg预训练模型自动下载权重modelYOLO(model_name)# ----------------------
训练参数配置 ----------------------# 核心参数说明# - epochs: 训练轮次建议
根据数据集大小调整# - batch: 批次大小根据GPU显存调整如8/16/32显存不足设为4# - imgsz: 输入图像尺寸建议640/1280与原始图像1920x1080兼容# - lr0: 初始学习率默认
01小数据集可减小至
001# - device: 训练设备0GPU-1CPU多GPU设为[0,1]# - save: 是否保存模型默认True# - val: 训练中是否验证默认True建议开启train_args{data:yaml_path,epochs:30,batch:8,imgsz:1280,lr0:
001,device:0,save:True,val:True,project:output_dir,name:exp1,# 实验名结果会保存在 output_dir/exp1verbose:True,# 打印训练日志optimizer:Adam,# 优化器Adam比SGD更稳定适合小数据集patience:5,# 早停机制5轮无val改进则停止训练augment:True,# 开启数据增强提升泛化能力segment:True# 明确指定为分割任务YOLOv8支持检测/分割/分类需显式开启}# ----------------------
启动训练 ----------------------print(开始训练YOLOv8-seg模型...)resultsmodel.train(**train_args)# ----------------------
训练后验证 ----------------------# 验证模型在验证集上的性能输出mAP
mAP50-
IoU等指标print(\n开始验证模型...)val_resultsmodel.val(datayaml_path,imgsz1280,batch
print(f验证集mAP50:{val_results.box.map50:.3f})# 检测框mAP50print(f验证集分割mAP50:{val_results.seg.map50:.3f})# 分割掩码mAP50# ----------------------
模型推理示例 ----------------------# 用训练好的模型预测新图像print(\n开始推理示例...)# 加载最佳模型训练中保存的best.pt在 output_dir/exp1/weights/ 下best_modelYOLO(os.path.join(output_dir,exp1,weights,best.pt))# 推理一张示例图像infer_img_pathflood_segmentation/images/val/example.jpg# 验证集示例图像infer_resultsbest_model(infer_img_path,saveTrue,imgsz
# saveTrue保存推理结果# 打印推理结果类别、置信度、坐标forresultininfer_results:boxesresult.boxes# 检测框结果masksresult.masks# 分割掩码结果forbox,maskinzip(boxes,masks):cls_idint(box.cls[0])cls_namebest_model.names[cls_id]conffloat(box.conf[0])print(f检测到:{cls_name}(置信度:{conf:.3f}))
关键优化与
注意事项数据增强适配由于数据集为“汛期”场景可能存在雨天、水面反光、目标遮挡等训练时开启augmentTrue后YOLOv8 会自动应用亮度/对比度/饱和度调整适应不同光照水平翻转目标无方向性如水域、钓鱼者缩放/裁剪适应不同目标大小若需更针对性增强可在train_args中添加augmentAlbumentations需额外安装albumentations库。
类别不平衡处理从网页标注看water类1个标注可能比ShuiBianDiaoYu类3个标注更少可在训练中添加类别权重在flood_data.yaml中添加class_weights: [
5,
0]增大water类的损失权重或在train_args中添加class_weights[
5,
0]。
GPU显存不足解决方案若训练时显存不足如使用12GB显存GPU减小batch如从8改为4降低imgsz如从1280改为640启用半精度训练在train_args中添加ampTrueYOLOv8默认开启可减少显存占用50%。
模型部署参考训练完成的best.pt模型可直接用于部署本地推理用上述model.infer()代码实时视频推理将infer_img_path改为视频路径如0表示摄像头部署到服务器用 Ultralytics 提供的export功能导出为 ONNX/TensorRT 格式加速推理命令如下best_model.export(formatonnx,imgsz