计算机C9硕士_算法工程师

计算机C9硕士_算法工程师

滑坡大规模多传感器滑坡检测数据集,利用landsat,哨兵2,planet,无人机图像等多种传感器采集涵盖国内四川贵州,国外菲律宾印尼等地,数据共2w余副图像,mask准确标注滑坡位置。8GB数据量。使用YOLOv8训练滑坡大规模多传感器滑坡检测数据集-LMLPHP
数据集介绍

  1. 数据集概述
    数据集名称:大规模多传感器滑坡检测数据集
    数据来源:使用多种传感器采集,包括Landsat、Sentinel-2、Planet、无人机图像
    覆盖地区:国内四川、贵州,国外菲律宾、印尼等地
    图像数量:共2万余幅图像
    数据量:约8GB
    标签格式:Mask格式,准确标注滑坡位置
  2. 数据集结构
    假设你的数据集已经按照以下结构组织:

深色版本
landslide_dataset/
├── images/
│ ├── train/
│ ├── val/
│ └── test/
└── masks/
├── train/
├── val/
└── test/
每个文件夹中包含对应的图像文件和掩码文件。确保所有图像文件都是.jpg格式,而掩码文件是.png格式,并且它们的名字与对应的图像文件相同。

数据集转换
由于YOLOv8需要标签文件为YOLO格式(即.txt文件),我们需要将Mask格式的标签文件转换为YOLO格式。

  1. 安装依赖
    确保你已经安装了必要的库:

bash
深色版本
pip install numpy opencv-python
2. 编写转换脚本
创建一个Python脚本来转换标签文件:

python
深色版本
import os
import cv2
import numpy as np

def mask_to_yolo(mask_path, image_size, class_id=0):
mask = cv2.imread(mask_path, cv2.IMREAD_GRAYSCALE)
contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

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 convert_masks_to_yolo(image_dir, mask_dir, output_dir, class_id=0):
if not os.path.exists(output_dir):
os.makedirs(output_dir)

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)

if name == ‘main’:
main()
数据集配置文件
创建一个数据集配置文件(如landslide_dataset.yaml),该文件定义了数据集的基本信息,包括路径、类别等。示例配置如下:

yaml
深色版本

训练和验证的数据集路径

train: landslide_dataset/images/train
val: landslide_dataset/images/val
test: landslide_dataset/images/test

类别名称

names:
0: landslide

类别数量

nc: 1
训练模型

  1. 安装依赖
    确保你的开发环境中安装了必要的软件和库。YOLOv8是基于PyTorch框架的,因此你需要安装Python以及PyTorch。

安装Python(推荐3.7或更高版本)
安装PyTorch:你可以从PyTorch官方网站获取安装命令,根据你的系统配置选择合适的安装方式。
克隆YOLOv8的官方仓库到本地,并安装项目所需的其他依赖:
bash
深色版本
git clone https://github.com/ultralytics/ultralytics.git
cd ultralytics
pip install -r requirements.txt
2. 训练模型
在完成上述准备工作后,你可以开始训练模型了。打开终端,进入YOLOv8项目的根目录,运行训练命令:

bash
深色版本
python ultralytics/yolo/v8/detect/train.py --data landslide_dataset.yaml --cfg yolov8.yaml --weights yolov8x.pt --batch-size 16 --epochs 100
这里:

–data 参数指定了数据集配置文件的路径。
–cfg 参数指定了模型配置文件。
–weights 参数用于指定预训练权重的路径,这有助于加速训练过程并提高最终模型的性能。
–batch-size 和 --epochs 分别设置了批量大小和训练轮数。
模型评估
训练完成后,可以通过验证集来评估模型的性能。YOLOv8提供了方便的命令来进行模型评估:

bash
深色版本
python ultralytics/yolo/v8/detect/val.py --data landslide_dataset.yaml --weights runs/train/exp/weights/best.pt
这里,best.pt 是训练过程中保存的最佳模型权重文件。

模型推理
你可以使用训练好的模型进行推理,检测新的图像中的滑坡。示例命令如下:

bash
深色版本
python ultralytics/yolo/v8/detect/predict.py --source path/to/your/image.jpg --weights runs/train/exp/weights/best.pt --conf 0.25
这里:

–source 参数指定了要检测的图像路径。
–conf 参数设置了置信度阈值,低于该阈值的检测结果将被忽略。
注意事项
数据增强:为了提高模型的泛化能力,可以考虑使用数据增强技术,如随机裁剪、翻转、颜色抖动等。
超参数调整:根据训练过程中观察到的损失值和验证集上的性能,适当调整学习率、批量大小等超参数。
硬件资源:如果显存不足,可以减少批量大小或使用更小的模型变体。
多尺度训练:可以尝试多尺度训练,以提高模型对不同尺度目标的检测能力。

11-09 08:38