使用YOLOv8训练滑坡大规模多传感器滑坡检测数据集
大型多源传感器平台用于滑坡监测与评估的数据集通过多种传感器采集包括国内的四川与贵州以及东南亚国家如菲律宾、印尼等地区的地理信息系统影像其中包含约8GB的数据量这些影像采用 landsat 哦哨兵2 planet等技术手段进行采集并结合 mask 技术精确标记出滑坡的位置

数据集介绍
-
数据集概述
数据集名称:大型多源传感器滑坡事件监测数据库
数据来源:通过多种遥感平台进行采集
覆盖地区:不仅涵盖国内的四川与贵州两省,在国外还包括菲律宾与印尼等地
图像数量:包含约2万张图片
数据量:总量约为8GB
标注格式采用Mask形式,并对滑坡区域进行了精确标记 -
数据集结构
假设你的数据集已经按照以下结构组织:
暗色主题下设置有landslide_dataset项目,
其中包含images和masks两大类目录,
images又分为train、val、test三个子集,
masks同样分布于train、val、test三个子集。
具体而言,
每个目录下均包含对应类型的图片与遮罩,
请确保所有图片均为.jpg格式,
其中遮罩则为.png格式,
其名称与对应目录下的图片一致。
数据集转码
为了满足YOLOv8的需求(即txt文件的要求),我们需对Mask格式的标签文件进行转码处理。
- 安装依赖
确保你已经安装了必要的库:
bash
深色版本
pip install numpy opencv-python
2. 编写转换脚本
创建一个Python脚本来转换标签文件:
python
深色版本
import os
import cv2
import numpy as np
对应mask_to_yolo函数处理特定图像数据
从给定路径mask_path加载灰度图像mask
利用OpenCV模块提取外部轮廓contours并使用掩模信息确定目标区域
yolo_annotations = []
for contour in contours:
x, y, w, h = cv2.boundingRect(contour)
x_center = (x + w / 2) / image_size[1]
y_center = (y + h / 2) / image_size[0]
width = w / image_size[1]
height = h / image_size[0]
yolo_annotations.append(f"{class_id} {x_center} {y_center} {width} {height}")
return yolo_annotations

def map_masks_to_yolo(image_path, mask_path, output_folder, class_id=0):
if not os.path.exists(output_folder):
os.makedirs(output_folder)
for image_file in os.listdir(image_dir):
if image_file.endswith('.jpg'):
image_path = os.path.join(image_dir, image_file)
mask_path = os.path.join(mask_dir, image_file.replace('.jpg', '.png'))
if not os.path.exists(mask_path):
continue
image = cv2.imread(image_path)
image_size = (image.shape[0], image.shape[1])
yolo_annotations = mask_to_yolo(mask_path, image_size, class_id)
annotation_file = os.path.join(output_dir, image_file.replace('.jpg', '.txt'))
with open(annotation_file, 'w') as f:
f.write('\n'.join(yolo_annotations))

def main():
sets = [
(‘train’, ‘landslide_dataset/images/train’, ‘landslide_dataset/masks/train’, ‘landslide_dataset/labels/train’),
(‘val’, ‘landslide_dataset/images/val’, ‘landslide_dataset/masks/val’, ‘landslide_dataset/labels/val’),
(‘test’, ‘landslide_dataset/images/test’, ‘landslide_dataset/masks/test’, ‘landslide_dataset/labels/test’)
]
class_id = 0 # 假设只有一个类别,滑坡
for set_name, image_dir, mask_dir, output_dir in sets:
convert_masks_to_yolo(image_dir, mask_dir, output_dir, class_id)
当变量名等于'main'时执行以下操作
yaml
深色版本
训练和验证的数据集路径
training_set: l-slide-dataset/images/training-set
validation_set: l-slide-dataset/images/validation-set
testing_set: l-slide-dataset/images/testing-set
类别名称
names:
0: landslide
类别数量
nc: 1
训练模型
请确认你的开发环境已配置必要的软件和库。YOLOv8架构基于PyTorch框架,请安装Python编程语言及PyTorch框架以满足其运行需求。
建议使用Python 3.7及以上版本进行开发以确保兼容性
dark theme enabled
command executed in bash: python ultralytics/yolo/v8/detect/train.py --data landslide_dataset.yaml --configuration yolov8.yaml --pre-trained-weights yolov8x.pt --batch size set to 16 --epochs set to 100
此处:
–data 参数指定数据集配置文件的位置。
–cfg 参数指定模型相关配置的信息。
–weights 参数用于指定预训练权重的位置,并能加快训练速度同时提升模型效果。
–batch-size 和 --epochs 分别决定了批量处理的数量以及总的训练周期数。
Model Evaluation
当完成训练后, 使用验证集进行模型性能测试. YOLOv8 提供了便捷的方式来执行这一测试.
深色版本
python ultralytics/yolo/v8/detect/val.py --data landslide_dataset.yaml --weights runs/train/exp/weights/best.pt
在该位置, best.pt 代表训练过程中存储的最佳模型权重文件。
模型推断过程你可以调用训练好的模型执行推断过程以检测滑坡例如在终端中运行以下命令
模型推断过程你可以调用训练好的模型执行推断过程以检测滑坡例如在终端中运行以下命令
执行该脚本
在深色模式下运行
使用Python脚本文件路径为path/to/your/image.jpg
并加载训练得到的最佳权重文件runs/train/exp/weights/best.pt
置信度阈值设置为0.25
–源参数指定用于检测的图像路径。
–置信度参数设定了一个阈值标准;低于这一标准的结果会被过滤掉。
注意事项:
数据增强技术:为了提升模型鲁棒性,在进行数据准备时可以采用多种增强手段如随机裁剪操作、镜像反转以及色彩抖动等方式进行优化处理。
超参数优化建议:在实际训练过程中需要持续监控模型行为指标如损失函数变化趋势以及验证集评估结果;并据此动态调节学习率设置以及批处理大小选择等关键超参数配置项。
硬件资源限制应对措施:如果遇到计算资源受限的情况建议适当降低批量处理规模或者尝试选择更为紧凑的小型网络架构方案来满足实际需求。
多尺度学习策略应用建议:为确保目标检测算法具备良好的适应性建议结合多尺度特征提取方法来构建更加完善的网络架构设计方案;这有助于提升算法在不同尺寸目标上的识别准确性与可靠性。
