如何使用YOLOv8对遥感图像中的滑坡-泥石流进行分割 深度学习遥感图像滑坡泥石流分割数据集的训练及应用

如何使用YOLOv8对遥感图像中的滑坡-泥石流进行分割 深度学习遥感图像滑坡泥石流分割数据集的训练及应用

文章目录

      • 遥感图像滑坡-泥石流分割数据集情况
        • 数据集概述
        • 类别统计
        • 总体统计
        • 注意事项
    • ✅ 一、安装 CUDA 驱动(Linux 示例)
    • ✅ 二、安装 Anaconda(Linux 示例)
    • ✅ 三、创建 Python 虚拟环境并安装依赖
    • ✅ 四、数据集结构示例(遥感图像滑坡-泥石流分割)
    • ✅ 五、创建 data.yaml 文件(用于训练)
    • ✅ 六、下载 YOLOv8 实例分割预训练模型
    • ✅ 七、编写训练脚本 train_segmentation.py
    • ✅ 八、验证模型性能
    • ✅ 九、导出模型为 ONNX 格式(便于部署)
    • ✅ 十、完整流程总结命令(一次性复制粘贴执行)
    • ✅ 补充说明
      • 一、准备工作
      • 二、数据集准备
      • 三、创建data.yaml文件
      • 四、划分训练集与验证集
      • 五、模型训练
      • 六、模型验证
      • 七、模型导出

遥感图像滑坡-泥石流分割数据集

遥感图像滑坡-泥石流分割数据集情况

数据集概述
项目 详情
总图片数 2,285 张
标注方式 VOC、YOLO、Mask 图像
类别总数 2 类
类别统计
序号 中文名称 英文类别名 标注框/像素数量
1 泥石流 Debris-flow 429
2 滑坡 landslide 6,079
总体统计
集合 数量
总图片数 2,285 张
总标注数量 6,508
注意事项
  • 标注方式:该数据集三种不同的标注方式,包括VOC格式(XML文件)、YOLO格式(TXT文件)以及分割用的Mask图像。这使得数据集适用于多种类型的任务,如目标检测和语义分割。
  • 类别与数量:数据集中包含两类主要对象——泥石流(Debris-flow)和滑坡(landslide),它们的标注数量分别是429和6,079。请注意,这里的标注数量指的是标记实例的数量,并非图像数量;每张图像可能包含一个或多个此类实例。


1

1

使用YOLOv8对遥感图像中的滑坡-泥石流进行分割,以下步骤来准备环境、数据集和训练模型。由于这是一个分割任务,而不是目标检测任务,我们将利用YOLOv8的实例分割功能。以下是详细的步骤和代码示例。仅供参考学习,

YOLOv8 分割或目标检测任务的环境搭建和训练代码,包括 CUDA驱动安装提示、Anaconda配置、Python虚拟环境创建、依赖项安装、数据集准备、data.yaml 创建、模型训练与验证等全流程代码


✅ 一、安装 CUDA 驱动(Linux 示例)

前提:确保你已经安装了支持 CUDA 的 NVIDIA 显卡,并已安装好基础系统环境(如 Ubuntu)。

# 查看显卡型号
lspci | grep -i nvidia

# 添加NVIDIA包仓库
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
   && curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-drivers.gpg \
   && curl -sS https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | sudo tee /etc/apt/sources.list.d/nvidia-drivers.list

sudo apt update
sudo apt install nvidia-driver-535  # 根据你的GPU选择合适的驱动版本

重启后查看驱动是否安装成功:

nvidia-smi

✅ 二、安装 Anaconda(Linux 示例)

# 下载 Anaconda 安装脚本
curl -O https://repo.anaconda.com/archive/Anaconda3-2023.07-Linux-x86_64.sh

# 安装 Anaconda
bash Anaconda3-2023.07-Linux-x86_64.sh

# 初始化 conda 环境(根据提示操作)
source ~/.bashrc

✅ 三、创建 Python 虚拟环境并安装依赖

# 创建虚拟环境
conda create -n yolo_env python=3.9
conda activate yolo_env

# 安装 PyTorch(带 CUDA 支持)
pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu118

# 安装 YOLOv8 所需库
pip install ultralytics opencv-python matplotlib numpy pandas openpyxl streamlit

✅ 四、数据集结构示例(遥感图像滑坡-泥石流分割)

dataset/
├── images/
│   ├── train/
│   └── val/
└── labels/
    ├── train/
    └── val/

✅ 五、创建 data.yaml 文件(用于训练)

在项目根目录下创建 data.yaml

train: ./dataset/images/train
val: ./dataset/images/val

nc: 2
names: ['Debris-flow', 'landslide']

✅ 六、下载 YOLOv8 实例分割预训练模型

# 下载 yolov8n-seg.pt(小模型)
wget https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8n-seg.pt

✅ 七、编写训练脚本 train_segmentation.py

from ultralytics import YOLO

# 加载预训练模型
model = YOLO('yolov8n-seg.pt')

# 开始训练
results = model.train(
    data='data.yaml',
    epochs=100,
    imgsz=640,
    batch=16,
    name='landslide_seg',
    project='runs/segmentation'
)

运行训练:

python train_segmentation.py

✅ 八、验证模型性能

metrics = model.val()
print(f"mAP: {metrics.box.map:.4f}")
print(f"mAP50: {metrics.box.map50:.4f}")

✅ 九、导出模型为 ONNX 格式(便于部署)

model.export(format='onnx')

这将在 runs/segmentation/landslide_seg/weights/ 目录下生成 best.onnx 模型文件。


✅ 十、完整流程总结命令(一次性复制粘贴执行)

# 安装 Anaconda(若未安装)
curl -O https://repo.anaconda.com/archive/Anaconda3-2023.07-Linux-x86_64.sh
bash Anaconda3-2023.07-Linux-x86_64.sh
source ~/.bashrc

# 创建虚拟环境
conda create -n yolo_env python=3.9
conda activate yolo_env

# 安装 PyTorch + YOLOv8 + 依赖
pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu118
pip install ultralytics opencv-python matplotlib numpy pandas openpyxl streamlit

# 下载模型
wget https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8n-seg.pt

# 编写 data.yaml(手动创建)
# 编写 train_segmentation.py(内容见上)

# 启动训练
python train_segmentation.py

✅ 补充说明

  • 如果你是做目标检测而不是实例分割,请将 yolov8n-seg.pt 替换为 yolov8n.pt
  • 数据格式要确保是 .txt 文件(YOLO格式),且类别编号从 0 开始。
  • 类别数 nc 设置为 2(对应 Debris-flow 和 landslide)。
  • 若需更高精度可尝试更大模型,如 yolov8m-seg.pt, yolov8l-seg.pt

一、准备工作

然后,确保已经完成了之前提到的CUDA驱动、Anaconda安装、Python虚拟环境创建以及必要的依赖项安装(如torch, ultralytics, opencv-python, 等)。

二、数据集准备

假设数据集结构如下:

dataset/
├── images/
│   ├── img1.jpg
│   ├── img2.jpg
│   └── ...
├── labels/
│   ├── voc/
│   ├── yolo/
│   └── mask/

对于YOLOv8实例分割,我们主要关注yolo格式的标注文件,因为它们直接适用于模型训练。

三、创建data.yaml文件

在项目根目录下创建data.yaml文件,内容如下:

train: ./dataset/images/train
val: ./dataset/images/val

nc: 2  # 类别数量
names: ['Debris-flow', 'landslide']  # 类别名称

四、划分训练集与验证集

如果没有现成的划分,可以使用以下脚本将数据集划分为训练集和验证集:

import os
import random
from pathlib import Path

# 设置路径
image_dir = './dataset/images'
label_dir = './dataset/labels/yolo'

# 获取所有图片文件名
images = [os.path.join(image_dir, f) for f in os.listdir(image_dir) if f.endswith('.jpg')]

# 打乱顺序
random.shuffle(images)

# 划分比例
split_ratio = 0.8

# 计算划分点
split_idx = int(len(images) * split_ratio)

# 创建训练集和验证集目录
train_img_dir = './dataset/images/train'
val_img_dir = './dataset/images/val'
train_label_dir = './dataset/labels/yolo/train'
val_label_dir = './dataset/labels/yolo/val'

for d in [train_img_dir, val_img_dir, train_label_dir, val_label_dir]:
    Path(d).mkdir(parents=True, exist_ok=True)

# 移动文件
for img_path in images[:split_idx]:
    label_path = os.path.join(label_dir, os.path.basename(img_path).replace('.jpg', '.txt'))
    os.rename(img_path, os.path.join(train_img_dir, os.path.basename(img_path)))
    os.rename(label_path, os.path.join(train_label_dir, os.path.basename(label_path)))

for img_path in images[split_idx:]:
    label_path = os.path.join(label_dir, os.path.basename(img_path).replace('.jpg', '.txt'))
    os.rename(img_path, os.path.join(val_img_dir, os.path.basename(img_path)))
    os.rename(label_path, os.path.join(val_label_dir, os.path.basename(label_path)))

五、模型训练

接下来是模型训练部分。首先下载预训练模型,然后开始训练:

curl -O https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8n-seg.pt

创建train_segmentation.py文件:

from ultralytics import YOLO

# 加载预训练模型
model = YOLO('yolov8n-seg.pt')

# 开始训练
results = model.train(
    data='data.yaml',
    epochs=100,
    imgsz=640,
    batch=16,
    name='segmentation_project',
    project='segmentation_results'
)

运行训练命令:

python train_segmentation.py

六、模型验证

验证训练好的模型性能:

metrics = model.val()
print(f"mAP: {metrics.box.map:.4f}")
print(f"mAP50: {metrics.box.map50:.4f}")

七、模型导出

根据需要导出模型为ONNX或其他格式:

model.export(format='onnx')

这将在segmentation_results/segmentation_project/weights目录下生成相应的模型文件。

以上文字及代码仅供参考。

你可能感兴趣的:(YOLO,深度学习,人工智能)