Advertisement

如何训练自己的数据集之—滑坡数据集 滑坡检测数据集

阅读量:

该平台提供一系列关于

基于遥感技术的

基于遥感技术的滑坡灾害数据集合包含235组图像样本并带有详细的注释信息

洪涝洪水滑坡灾害数据集

数据集概述

此数据集主要用于洪涝、洪水及滑坡灾害的监测与分析,并涵盖两种主要灾害类型——洪水与滑坡。其中包含2339幅图像样本,在VOC XML与YOLO TXT格式下进行了详细标注标记,这些标注信息可以直接用于训练VOC与YOLO系列目标检测算法模型

数据集特点
  • 高质量图像 :所有图像均为高质量图像,在精确的目标识别方面表现优异。
    • 高度详细的标注 :每张图像都详细标注了洪涝灾害、洪水灾害和滑坡灾害的具体位置,并可为此类灾害场景构建专业的训练数据集。
    • 适应于多种应用场景 :本数据集覆盖了多样化的灾害情景模式,并可灵活应用于不同区域的风险评估工作。
    • 可直接导入使用 :数据集严格按照标准化的VOC XML与YOLO TXT格式进行标注处理,并无需额外解码即可直接导入主流检测框架进行训练。
    • 涵盖多类型目标 :该数据集包含了多个不同类型的灾害目标特征信息,在多目标分类任务中展现出良好的适用性。
数据集统计
目标类型 类别ID 图像数量 标注个数
洪水 0 1902 2711
滑坡 1 437 509
总计 2339 3220
数据集结构
复制代码
 FloodLandslideDisasterDetectionDataset/

    
 ├── images/  # 图像文件
    
 │   ├── train/  # 训练集图像
    
 │   │   ├── image_00001.jpg
    
 │   │   ├── image_00002.jpg
    
 │   │   └── ...
    
 │   ├── val/  # 验证集图像
    
 │   │   ├── image_00001.jpg
    
 │   │   ├── image_00002.jpg
    
 │   │   └── ...
    
 │   └── test/  # 测试集图像(如果存在)
    
 │       ├── image_00001.jpg
    
 │       ├── image_00002.jpg
    
 │       └── ...
    
 ├── annotations_voc/  # VOC/Pascal VOC格式标注
    
 │   ├── train/  # 训练集标注
    
 │   │   ├── image_00001.xml
    
 │   │   ├── image_00002.xml
    
 │   │   └── ...
    
 │   ├── val/  # 验证集标注
    
 │   │   ├── image_00001.xml
    
 │   │   ├── image_00002.xml
    
 │   │   └── ...
    
 │   └── test/  # 测试集标注(如果存在)
    
 │       ├── image_00001.xml
    
 │       ├── image_00002.xml
    
 │       └── ...
    
 └── annotations_yolo/  # YOLO格式标注
    
     ├── train/  # 训练集标签
    
     │   ├── image_00001.txt
    
     │   ├── image_00002.txt
    
     │   └── ...
    
     ├── val/  # 验证集标签
    
     │   ├── image_00001.txt
    
     │   ├── image_00002.txt
    
     │   └── ...
    
     └── test/  # 测试集标签(如果存在)
    
     ├── image_00001.txt
    
     ├── image_00002.txt
    
     └── ...
    
    
    
    
    AI生成项目
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-07-13/8tEOBFCvVRzldYa3HJP157Grs0qN.png)
标注格式示例
VOC/Pascal VOC格式

每个XML文件包含图像信息和标注信息:

复制代码
 <annotation>

    
     <folder>images</folder>
    
     <filename>image_00001.jpg</filename>
    
     <path>/path/to/images/image_00001.jpg</path>
    
     <source>
    
     <database>Unknown</database>
    
     </source>
    
     <size>
    
     <width>640</width>
    
     <height>480</height>
    
     <depth>3</depth>
    
     </size>
    
     <segmented>0</segmented>
    
     <object>
    
     <name>flood</name>
    
     <pose>Unspecified</pose>
    
     <truncated>0</truncated>
    
     <difficult>0</difficult>
    
     <bndbox>
    
         <xmin>100</xmin>
    
         <ymin>150</ymin>
    
         <xmax>200</xmax>
    
         <ymax>300</ymax>
    
     </bndbox>
    
     </object>
    
     <object>
    
     <name>landslide</name>
    
     <pose>Unspecified</pose>
    
     <truncated>0</truncated>
    
     <difficult>0</difficult>
    
     <bndbox>
    
         <xmin>300</xmin>
    
         <ymin>250</ymin>
    
         <xmax>400</xmax>
    
         <ymax>350</ymax>
    
     </bndbox>
    
     </object>
    
 </annotation>
    
    
    
    
    AI生成项目
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-07-13/LnGswgqR2QjcyFZl7zvYmiCkb8UK.png)
YOLO格式

每行表示一个物体的边界框和类别:

复制代码
    class_id cx cy w h
    
    AI生成项目
  • class_id: 类别标识符(起始编号为零)
    • 0: flood
    • 1: landslide
    • cx: 表示目标框中心点沿x轴的位置相对于图像总宽度的比例
    • cy: 表示目标框中心点沿y轴的位置相对于图像总高度的比例
    • w: 表示目标框所占图像总宽度的比例
    • h: 表示目标框所占图像总高度的比例

例如:

复制代码
 0 0.453646 0.623148 0.234375 0.461111

    
 1 0.653646 0.723148 0.134375 0.361111
    
    
    
    
    AI生成项目
使用该数据集进行模型训练
1. 数据预处理与加载

首先,请我们获取数据并将其调整为YOLOv5所需的数据格式。假设你已经安装了PyTorch和YOLOv5库。

复制代码
 import os

    
 from PIL import Image
    
 import torch
    
 from torch.utils.data import Dataset, DataLoader
    
 from torchvision import transforms
    
 import xml.etree.ElementTree as ET
    
  
    
 class FloodLandslideDisasterDetectionDataset(Dataset):
    
     def __init__(self, image_dir, annotation_dir, transform=None):
    
     self.image_dir = image_dir
    
     self.annotation_dir = annotation_dir
    
     self.transform = transform
    
     self.image_files = [f for f in os.listdir(image_dir) if f.endswith('.jpg')]
    
  
    
     def __len__(self):
    
     return len(self.image_files)
    
  
    
     def __getitem__(self, idx):
    
     img_name = self.image_files[idx]
    
     img_path = os.path.join(self.image_dir, img_name)
    
     annotation_path = os.path.join(self.annotation_dir, img_name.replace('.jpg', '.xml'))
    
  
    
     # 加载图像
    
     image = Image.open(img_path).convert('RGB')
    
     if self.transform:
    
         image = self.transform(image)
    
  
    
     # 加载标注
    
     tree = ET.parse(annotation_path)
    
     root = tree.getroot()
    
  
    
     boxes = []
    
     labels = []
    
     for obj in root.findall('object'):
    
         category = obj.find('name').text.lower()
    
         if category == 'flood':
    
             class_id = 0
    
         elif category == 'landslide':
    
             class_id = 1
    
         else:
    
             continue
    
         
    
         bbox = obj.find('bndbox')
    
         xmin = int(bbox.find('xmin').text)
    
         ymin = int(bbox.find('ymin').text)
    
         xmax = int(bbox.find('xmax').text)
    
         ymax = int(bbox.find('ymax').text)
    
         
    
         boxes.append([xmin, ymin, xmax, ymax])
    
         labels.append(class_id)
    
  
    
     boxes = torch.tensor(boxes, dtype=torch.float32)
    
     labels = torch.tensor(labels, dtype=torch.int64)
    
  
    
     return image, boxes, labels
    
  
    
 # 数据增强
    
 transform = transforms.Compose([
    
     transforms.Resize((640, 640)),
    
     transforms.ToTensor(),
    
 ])
    
  
    
 # 创建数据集
    
 train_dataset = FloodLandslideDisasterDetectionDataset(image_dir='FloodLandslideDisasterDetectionDataset/images/train/', annotation_dir='FloodLandslideDisasterDetectionDataset/annotations_voc/train/', transform=transform)
    
 val_dataset = FloodLandslideDisasterDetectionDataset(image_dir='FloodLandslideDisasterDetectionDataset/images/val/', annotation_dir='FloodLandslideDisasterDetectionDataset/annotations_voc/val/', transform=transform)
    
  
    
 train_loader = DataLoader(train_dataset, batch_size=4, shuffle=True, num_workers=4)
    
 val_loader = DataLoader(val_dataset, batch_size=4, shuffle=False, num_workers=4)
    
    
    
    
    AI生成项目
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-07-13/cGPQazjXv1KJSFrM7A5UOiY8k4dN.png)
2. 构建模型

建议采用YOLOv5模型来完成目标检测任务。若你已成功克隆了YOLOv5项目的仓库,并已按照官方文档完成了相关环境配置,则可直接开始使用该模型进行目标检测操作。

复制代码
 git clone https://github.com/ultralytics/yolov5

    
 cd yolov5
    
 pip install -r requirements.txt
    
    
    
    
    AI生成项目

创建数据配置文件 data/flood_landslide_disaster_detection.yaml

复制代码
 train: path/to/FloodLandslideDisasterDetectionDataset/images/train

    
 val: path/to/FloodLandslideDisasterDetectionDataset/images/val
    
 test: path/to/FloodLandslideDisasterDetectionDataset/images/val  # 如果没有单独的测试集,可使用验证集作为测试集
    
  
    
 nc: 2  # 类别数
    
 names: ['flood', 'landslide']
    
    
    
    
    AI生成项目
3. 训练模型

使用YOLOv5进行训练。

复制代码
    python train.py --img 640 --batch 16 --epochs 100 --data data/flood_landslide_disaster_detection.yaml --weights yolov5s.pt --cache
    
    AI生成项目
4. 评估模型

在验证集上评估模型性能。

复制代码
    python val.py --img 640 --batch 16 --data data/flood_landslide_disaster_detection.yaml --weights runs/train/exp/weights/best.pt --task test
    
    AI生成项目
5. 推理

使用训练好的模型进行推理。

复制代码
    python detect.py --source path/to/test/image.jpg --weights runs/train/exp/weights/best.pt --conf 0.5
    
    AI生成项目

实验报告

实验报告应包括以下内容:

  1. 项目背景及概述 :简要阐述项目的起因、目的及其重要意义。
  2. 数据集来源与描述 :详细介绍数据集的获取途径、规模特征以及标注格式规范。
  3. 模型选择及参数设置 :说明所采用的模型类型及其相关的配置参数设置。
  4. 训练流程记录 :记录训练过程中的损失变化轨迹及其关键阶段的学习率调整情况。
  5. 评估指标展示 :列出模型在验证集上的具体性能指标(如mAP、准确率等)。
  6. 检测结果展示 :提供若干具有代表性的样本检测结果图示。
  7. 实验总结与展望 :总结实验成果并探讨可能的改进方向。
  8. 附录内容 :包含相关的代码片段、图表或其他补充材料。

依赖库

确保安装了以下依赖库:

复制代码
 pip install torch torchvision

    
 pip install -r yolov5/requirements.txt
    
    
    
    
    AI生成项目

总结

该洪涝洪水滑坡灾害检测数据集包含了大量具有高质量标注的数据

二,遥感滑坡数据集

遥感滑坡目标检测数据集介绍

数据集概述

此数据集合主要应用于遥感图像中的滑坡目标检测任务,并专注于单一目标——滑坡事件的研究与应用。该数据集合共计包含2,314张图像样本,并分别采用VOC XML格式与YOLO TXT格式进行标注说明与实例标记工作。这些样本可以直接导入至VOC与YOLO系列的目标检测算法模型训练中使用

数据集特点
  • 高质量图像 :所有图像均为高质量(高清)图像,在精确的目标识别方面具有显著优势。
    • 细致标注 :每张图像都被滑坡位置进行了细致标注(即进行了明确的位置标识),便于实现精准的目标识别。
    • 丰富性 :该数据集覆盖了不同环境条件下的滑坡场景(即展示了各种可能的滑坡情况),能够适应多种环境条件下的滑坡场景分析。
    • 便捷性 :该数据集已被系统性地按照VOC XML和YOLO TXT格式进行了标注工作(即完成了规范化的标签设置),无需额外处理即可直接投入模型训练使用。
    • 单一类别 :该数据集仅包含滑坡这一类别的样本信息(即专注于单一类别——滑坡现象的研究),则更适合专注于特定目标的检测任务。
数据集统计
目标类型 类别ID 图像数量 标注个数
滑坡 0 2299 6545
总计 2314 6545
数据集结构
复制代码
 RemoteSensingLandslideDetectionDataset/

    
 ├── images/  # 图像文件
    
 │   ├── train/  # 训练集图像
    
 │   │   ├── image_00001.jpg
    
 │   │   ├── image_00002.jpg
    
 │   │   └── ...
    
 │   ├── val/  # 验证集图像
    
 │   │   ├── image_00001.jpg
    
 │   │   ├── image_00002.jpg
    
 │   │   └── ...
    
 │   └── test/  # 测试集图像(如果存在)
    
 │       ├── image_00001.jpg
    
 │       ├── image_00002.jpg
    
 │       └── ...
    
 ├── annotations_voc/  # VOC/Pascal VOC格式标注
    
 │   ├── train/  # 训练集标注
    
 │   │   ├── image_00001.xml
    
 │   │   ├── image_00002.xml
    
 │   │   └── ...
    
 │   ├── val/  # 验证集标注
    
 │   │   ├── image_00001.xml
    
 │   │   ├── image_00002.xml
    
 │   │   └── ...
    
 │   └── test/  # 测试集标注(如果存在)
    
 │       ├── image_00001.xml
    
 │       ├── image_00002.xml
    
 │       └── ...
    
 └── annotations_yolo/  # YOLO格式标注
    
     ├── train/  # 训练集标签
    
     │   ├── image_00001.txt
    
     │   ├── image_00002.txt
    
     │   └── ...
    
     ├── val/  # 验证集标签
    
     │   ├── image_00001.txt
    
     │   ├── image_00002.txt
    
     │   └── ...
    
     └── test/  # 测试集标签(如果存在)
    
     ├── image_00001.txt
    
     ├── image_00002.txt
    
     └── ...
    
    
    
    
    AI生成项目
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-07-13/NJLhRWnZx7jBvPpIbQ4VT2XDdUkm.png)
标注格式示例
VOC/Pascal VOC格式

每个XML文件包含图像信息和标注信息:

复制代码
 <annotation>

    
     <folder>images</folder>
    
     <filename>image_00001.jpg</filename>
    
     <path>/path/to/images/image_00001.jpg</path>
    
     <source>
    
     <database>Unknown</database>
    
     </source>
    
     <size>
    
     <width>640</width>
    
     <height>480</height>
    
     <depth>3</depth>
    
     </size>
    
     <segmented>0</segmented>
    
     <object>
    
     <name>landslide</name>
    
     <pose>Unspecified</pose>
    
     <truncated>0</truncated>
    
     <difficult>0</difficult>
    
     <bndbox>
    
         <xmin>100</xmin>
    
         <ymin>150</ymin>
    
         <xmax>200</xmax>
    
         <ymax>300</ymax>
    
     </bndbox>
    
     </object>
    
 </annotation>
    
    
    
    
    AI生成项目
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-07-13/WEpZnS4vAegNQi7XMGIDlFYBzdHf.png)
YOLO格式

每行表示一个物体的边界框和类别:

复制代码
    class_id cx cy w h
    
    AI生成项目
  • class_id:id标识项(编号起始于零)
  • 0: landslide
  • cx:目标框中心点沿x轴的位置占图像总宽度的比例
  • cy:目标框中心点沿y轴的位置占图像总高度的比例
  • w:沿x轴方向的目标框宽度占图像总宽度的比例
  • h:沿y轴方向的目标框高度占图像总高度的比例

例如:

复制代码
    0 0.453646 0.623148 0.234375 0.461111
    
    AI生成项目
使用该数据集进行模型训练
1. 数据预处理与加载

第一步是导入必要的库如PyTorch,并加载训练数据集。随后将这些数据按照YOLOv5的要求格式化存储在指定目录中

复制代码
 import os

    
 from PIL import Image
    
 import torch
    
 from torch.utils.data import Dataset, DataLoader
    
 from torchvision import transforms
    
 import xml.etree.ElementTree as ET
    
  
    
 class RemoteSensingLandslideDetectionDataset(Dataset):
    
     def __init__(self, image_dir, annotation_dir, transform=None):
    
     self.image_dir = image_dir
    
     self.annotation_dir = annotation_dir
    
     self.transform = transform
    
     self.image_files = [f for f in os.listdir(image_dir) if f.endswith('.jpg')]
    
  
    
     def __len__(self):
    
     return len(self.image_files)
    
  
    
     def __getitem__(self, idx):
    
     img_name = self.image_files[idx]
    
     img_path = os.path.join(self.image_dir, img_name)
    
     annotation_path = os.path.join(self.annotation_dir, img_name.replace('.jpg', '.xml'))
    
  
    
     # 加载图像
    
     image = Image.open(img_path).convert('RGB')
    
     if self.transform:
    
         image = self.transform(image)
    
  
    
     # 加载标注
    
     tree = ET.parse(annotation_path)
    
     root = tree.getroot()
    
  
    
     boxes = []
    
     labels = []
    
     for obj in root.findall('object'):
    
         category = obj.find('name').text.lower()
    
         if category == 'landslide':
    
             class_id = 0
    
         else:
    
             continue
    
         
    
         bbox = obj.find('bndbox')
    
         xmin = int(bbox.find('xmin').text)
    
         ymin = int(bbox.find('ymin').text)
    
         xmax = int(bbox.find('xmax').text)
    
         ymax = int(bbox.find('ymax').text)
    
         
    
         boxes.append([xmin, ymin, xmax, ymax])
    
         labels.append(class_id)
    
  
    
     boxes = torch.tensor(boxes, dtype=torch.float32)
    
     labels = torch.tensor(labels, dtype=torch.int64)
    
  
    
     return image, boxes, labels
    
  
    
 # 数据增强
    
 transform = transforms.Compose([
    
     transforms.Resize((640, 640)),
    
     transforms.ToTensor(),
    
 ])
    
  
    
 # 创建数据集
    
 train_dataset = RemoteSensingLandslideDetectionDataset(image_dir='RemoteSensingLandslideDetectionDataset/images/train/', annotation_dir='RemoteSensingLandslideDetectionDataset/annotations_voc/train/', transform=transform)
    
 val_dataset = RemoteSensingLandslideDetectionDataset(image_dir='RemoteSensingLandslideDetectionDataset/images/val/', annotation_dir='RemoteSensingLandslideDetectionDataset/annotations_voc/val/', transform=transform)
    
  
    
 train_loader = DataLoader(train_dataset, batch_size=4, shuffle=True, num_workers=4)
    
 val_loader = DataLoader(val_dataset, batch_size=4, shuffle=False, num_workers=4)
    
    
    
    
    AI生成项目
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-07-13/iWZz1hvcsuYHNf0dOgXrAaDmC62j.png)
2. 构建模型

建议在开发环境中部署YOLOv5模型以完成目标识别流程。请注意确保你的开发环境已正确配置,并已按照官方指南完成了仓库的下载和准备工作。

复制代码
 git clone https://github.com/ultralytics/yolov5

    
 cd yolov5
    
 pip install -r requirements.txt
    
    
    
    
    AI生成项目

创建数据配置文件 data/remote_sensing_landslide_detection.yaml

复制代码
 train: path/to/RemoteSensingLandslideDetectionDataset/images/train

    
 val: path/to/RemoteSensingLandslideDetectionDataset/images/val
    
 test: path/to/RemoteSensingLandslideDetectionDataset/images/val  # 如果没有单独的测试集,可使用验证集作为测试集
    
  
    
 nc: 1  # 类别数
    
 names: ['landslide']
    
    
    
    
    AI生成项目
3. 训练模型

使用YOLOv5进行训练。

复制代码
    python train.py --img 640 --batch 16 --epochs 100 --data data/remote_sensing_landslide_detection.yaml --weights yolov5s.pt --cache
    
    AI生成项目
4. 评估模型

在验证集上评估模型性能。

复制代码
    python val.py --img 640 --batch 16 --data data/remote_sensing_landslide_detection.yaml --weights runs/train/exp/weights/best.pt --task test
    
    AI生成项目
5. 推理

使用训练好的模型进行推理。

复制代码
    python detect.py --source path/to/test/image.jpg --weights runs/train/exp/weights/best.pt --conf 0.5
    
    AI生成项目

实验报告

实验报告应包括以下内容:

项目简介 :概述项目的背景信息及其所追求的目标与重要性。
数据集介绍 :阐述数据集的来源渠道及其规模大小,并详细说明标注格式的规范性。
模型选择与配置 :介绍所采用模型的具体类型以及相应的配置参数设置情况。
训练过程 :分析训练过程中损失函数的变化趋势以及学习率调节的情况。
评估结果 :报告模型在验证集上的性能评估指标(例如mAP和准确率等关键指标的表现)。
可视化结果 :展示一些具有代表性的样本检测结果对应的可视化图表实例。
结论与讨论 :总结实验得出的主要结论,并探讨进一步优化的可能性及未来研究方向。
附录 :包含用于实现该方法的代码片段及相关图表等辅助材料内容。

依赖库

确保安装了以下依赖库:

复制代码
 pip install torch torchvision

    
 pip install -r yolov5/requirements.txt
    
    
    
    
    AI生成项目

总结

该遥感滑坡相关的目标检测数据集包含了大量标注信息,并且非常适合用于训练与评估目标检测模型。基于YOLOv5框架能够方便地构建并高效训练目标检测模型。实验报告有助于你更深入地理解并评估模型性能,并为后续研究提供参考依据。鉴于此数据集的规模适中建议在训练过程中采用数据增强技术以提升模型的泛化能力

全部评论 (0)

还没有任何评论哟~