如何使用YOLOv8对遥感图像中的滑坡-泥石流进行分割 深度学习遥感图像滑坡泥石流分割数据集的训练及应用
遥感图像滑坡-泥石流分割数据集
项目 | 详情 |
---|---|
总图片数 | 2,285 张 |
标注方式 | VOC、YOLO、Mask 图像 |
类别总数 | 2 类 |
序号 | 中文名称 | 英文类别名 | 标注框/像素数量 |
---|---|---|---|
1 | 泥石流 | Debris-flow | 429 |
2 | 滑坡 | landslide | 6,079 |
集合 | 数量 |
---|---|
总图片数 | 2,285 张 |
总标注数量 | 6,508 |
1
1
使用YOLOv8对遥感图像中的滑坡-泥石流进行分割,以下步骤来准备环境、数据集和训练模型。由于这是一个分割任务,而不是目标检测任务,我们将利用YOLOv8的实例分割功能。以下是详细的步骤和代码示例。仅供参考学习,
于 YOLOv8 分割或目标检测任务的环境搭建和训练代码,包括 CUDA驱动安装提示、Anaconda配置、Python虚拟环境创建、依赖项安装、数据集准备、data.yaml 创建、模型训练与验证等全流程代码。
前提:确保你已经安装了支持 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 安装脚本
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
# 创建虚拟环境
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
:
train: ./dataset/images/train
val: ./dataset/images/val
nc: 2
names: ['Debris-flow', 'landslide']
# 下载 yolov8n-seg.pt(小模型)
wget https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8n-seg.pt
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}")
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
文件,内容如下:
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
目录下生成相应的模型文件。
以上文字及代码仅供参考。