基于YOLOv11的山体滑坡检测分割模型

基于YOLOv11的山体滑坡检测/分割模型

项目概述

本代码库包含使用YOLOv11训练的山体滑坡检测模型。
在这里插入图片描述

🧠 模型说明

custom.pt

  • 基于YOLOv11定制的专用模型
  • 使用5,661张标注图像训练(山体滑坡检测专用)

yolov11n.pt

  • 基于COCO数据集预训练的YOLOv11 nano模型
  • 轻量级通用目标检测模型
  • 推理速度快,但非地质灾害场景专用
    在这里插入图片描述

📊 数据分布概览

山体滑坡数据集

  • 训练数据:4,528张
  • 验证数据:1,133张
  • 🧮 总计:5,661张图像
    在这里插入图片描述

🎥 检测演示

注:括号中的"Detection Demo"可译为"检测演示"或"识别效果展示",根据实际展示内容选择更贴切的译法。如需强调分割功能,可补充说明"支持滑坡区域分割识别"。

分割训练流程

以下是关于使用YOLOv11训练分割数据集的完整指南,包含数据布置、格式转换和训练流程:


在这里插入图片描述

1. 数据集布置

YOLOv11分割任务需要同时包含目标检测框和分割掩码数据,目录结构建议如下:

dataset/
├── images/
│   ├── train/
│   │   ├── image1.jpg
│   │   └── ...
│   └── val/
│       ├── image2.jpg
│       └── ...
└── labels/
    ├── train/
    │   ├── image1.txt  # 检测框标签
    │   ├── image1.png  # 分割掩码(可选)
    │   └── ...
    └── val/
        ├── image2.txt
        ├── image2.png
        └── ...

2. 数据格式要求

(1) 检测框标签格式(.txt文件)

每行格式:class_id x_center y_center width height

  • 坐标需归一化到0-1(相对于图像宽高)
  • 例如:0 0.45 0.32 0.12 0.15
(2) 分割掩码格式
  • 推荐使用PNG格式
  • 单通道图像,像素值对应类别ID(0=背景,1=类别1,…)
  • 或使用RGB彩色掩码(需指定颜色-类别映射)

3. 格式转换工具

(1) 从COCO格式转换
from pycocotools.coco import COCO
import cv2
import os

coco = COCO("annotations/instances_train2017.json")
cat_ids = coco.getCatIds()

for img_id in coco.getImgIds():
    img_info = coco.loadImgs(img_id)[0]
    img = cv2.imread(f"images/{img_info['file_name']}")
    h, w = img.shape[:2]

    # 生成YOLO格式标签
    ann_ids = coco.getAnnIds(imgIds=img_id)
    anns = coco.loadAnns(ann_ids)
    
    with open(f"labels/{img_info['file_name'].replace('.jpg', '.txt')}", "w") as f:
        for ann in anns:
            # 检测框转换
            x, y, bw, bh = ann['bbox']
            x_center = (x + bw/2) / w
            y_center = (y + bh/2) / h
            bw /= w
            bh /= h
            f.write(f"{ann['category_id']} {x_center} {y_center} {bw} {bh}\n")
            
            # 分割掩码转换(可选)
            mask = coco.annToMask(ann)
            cv2.imwrite(f"labels/{img_info['file_name'].replace('.jpg', '.png')}", mask)
(2) 从VOC格式转换

使用labelme2yolo工具:

pip install labelme
labelme2yolo --json_dir voc_annotations/ --output_dir yolo_labels/

4. 配置文件准备

创建data.yaml

# 数据集配置
train: ../dataset/images/train
val: ../dataset/images/val

# 类别数量及名称
nc: 1  # 山体滑坡检测设为1
names: ['landslide']

# 分割任务需指定
segmentation: True  # 启用分割模式
mask_dir: ../dataset/labels  # 掩码路径

5. 训练命令

python train.py \
  --weights yolov11s.pt \
  --cfg models/yolov11s.yaml \
  --data data.yaml \
  --img 640 \
  --batch 16 \
  --epochs 100 \
  --device 0 \
  --name yolov11-landslide \
  --segmentation  # 关键参数:启用分割训练

6. 关键参数说明

参数作用
--segmentation启用分割训练模式
--mask_dir指定掩码路径(若未在data.yaml中配置)
--rect禁用矩形训练(分割任务需完整图像)
--weights加载预训练权重(推荐官方COCO预训练模型)

7. 验证结果

训练完成后检查:

  • 分割掩码预测效果:detect.py --task segment
  • 关键指标:mAP50-95、mask precision/recall

常见问题解决

  1. 报错"Missing mask files"
    → 检查data.yaml中的mask_dir路径,确保每个图像有对应的.png掩码文件

  2. 训练时显存不足
    → 减小--batch-size或使用--img-size 512

  3. 分割边界不精确
    → 尝试增大输入分辨率(如--img 1024)或在数据增强中添加随机裁剪

如需处理多类别分割,只需修改data.yaml中的ncnames列表即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值