Advertisement

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

阅读量:

该领域内涉及的
"滑坡"相关
"遥感"
"自然灾害"
等事件导致大量高质量
"遥感"
"滑坡"
"灾害"
类图片资源,
这些图片具备丰富特征信息,
并标有对应的灾害类型,
共包含约
2300
张图片,
采用
VOC

YOLO
等模型进行处理。
同时,
该领域还包含基于
"遥感"
技术收集的目标明确的
"滑坡"
场景图像,
这些图像总计约
2300
张,
并采用多模型策略(包括VOC与YOLO)进行训练与验证。

洪涝洪水滑坡灾害数据集

6e197f02f9e54761bcd02f037f9760fd.png

数据集概述

此数据集专门用于洪涝、洪水及滑坡灾害的监测,并涵盖两种主要灾害类型:洪水与滑坡。该数据集共计包含2,339幅图像,在VOC XML与YOLO TXT格式下标记了共计3,220个灾害实例,并可直接应用于训练VOC及YOLO系列目标检测算法模型。

b766fa4cd8fc4dfbb840a74720af9adb.png

数据集特点

  • 高质量图像 :所有图像均为高质量拍摄的镜头所捕捉到的高分辨率成像数据,在精确的目标检测中展现出卓越的表现。
  • 精细标注 :每张图片都经过详细标记以确定洪涝、洪水及滑坡灾害的具体位置,在训练模型时可直接利用这些信息。
  • 丰富性 :该数据集涵盖了不同环境条件下的灾害情景实例,在各种应用领域中均具有广泛的适用性。
  • 兼容性 :数据集已被系统地按照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
    
     └── ...

标注格式示例

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>

YOLO格式

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

复制代码
    class_id cx cy w h
  • class_id: 类别ID(自0起算)
  • 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

使用该数据集进行模型训练

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)

2. 构建模型

我们可以部署YOLOv5模型来实现物体检测任务。假设你已获取YOLOv5仓库,并且遵循其官方文档完成环境配置。

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

    
 cd yolov5
    
 pip install -r requirements.txt

创建数据配置文件 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']

3. 训练模型

使用YOLOv5进行训练。

复制代码
    python train.py --img 640 --batch 16 --epochs 100 --data data/flood_landslide_disaster_detection.yaml --weights yolov5s.pt --cache

4. 评估模型

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

复制代码
    python val.py --img 640 --batch 16 --data data/flood_landslide_disaster_detection.yaml --weights runs/train/exp/weights/best.pt --task test

5. 推理

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

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

实验报告

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

项目简介 :概述项目的背景信息以及其追求的目标与重要性。
数据集介绍 :阐述数据集的来源渠道、容量大小以及标注规范等细节。
模型选择与配置 :描述所采用的模型类型及其相关的配置参数设置。
训练过程 :分析训练过程中损失值的变化趋势以及学习率调节的情况。
评估结果 :报告模型在验证集上的性能评估结果(包括mAP和准确率等关键指标)。
可视化结果 :呈现一些具有代表性的样本检测结果可视化图表。
结论与讨论 :总结实验的主要发现,并探讨未来可能的改进方向。
附录 :包含代码片段及相关的图表资料。

依赖库

确保安装了以下依赖库:

复制代码
 pip install torch torchvision

    
 pip install -r yolov5/requirements.txt

总结

该洪涝洪水滑坡灾害检测数据集为训练与评估目标检测模型提供了丰富的标注信息。科学合理地适用于训练与评估目标检测模型。基于YOLOv5框架设计的高性能目标检测模型构建与训练方案具有良好的适用性。实验报告不仅有助于深入理解与分析目标检测模型的表现特征,还可以为其后续研究工作提供重要的理论支持与实践参考。由于该数据集的规模适中,在实际应用中建议采用适量的数据增强技术以提升其泛化能力。

二,遥感滑坡数据集

3c77aab655cf430e86730d85b7fcab0c.png

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

9adfa04844ec43749edb94696f93f2af.png

数据集概述

此数据集主要应用于遥感图像中的滑坡目标检测任务,并涵盖了单一目标——滑坡这一领域。该数据集包含2314张图像,并标记了6545个滑坡实例;这些标记分别采用VOC XML和YOLO TXT格式进行标注,并可以直接用于VOC及YOLO系列目标检测算法模型的训练。

数据集特点

  • 高分辨率影像:所有图像均为高分辨率影像,并可应用于精确的目标检测。
    • 详细标记:每张图片均标有滑坡位置信息,并可通过此信息辅助模型识别。
    • 多样化场景:数据集涵盖了不同环境条件下的滑坡情形,并能适用于多种应用场景。
    • 立即可用性:数据集严格按照VOC XML和YOLO TXT标准格式进行了标注,并可以直接导入并进行模型训练。
    • 单一类别检测:该数据集仅针对滑坡这一类场景进行了分类标记,并适合专注于这类目标的检测任务。

数据集统计

f28ca908ad7b4adc930232f36fa5ec23.png
目标类型 类别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
    
     └── ...

标注格式示例

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>

YOLO格式

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

复制代码
    class_id cx cy w h

id of class:用于标识类别的编号(自零起算)
0号为滑坡
cx值表示目标框中心在x轴方向上的比例
cy值代表目标框中心在y轴方向上的比例
w值表示目标框在图像中的宽度占比
h值则对应于目标框在图像中的垂直占比

例如:

复制代码
    0 0.453646 0.623148 0.234375 0.461111

使用该数据集进行模型训练

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 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)

2. 构建模型

该系统能够实现目标识别工作。请注意,前提是你已从官方渠道获取了YOLOv5仓库,并遵循相关指导完成了配置。

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

    
 cd yolov5
    
 pip install -r requirements.txt

创建数据配置文件 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']

3. 训练模型

使用YOLOv5进行训练。

复制代码
    python train.py --img 640 --batch 16 --epochs 100 --data data/remote_sensing_landslide_detection.yaml --weights yolov5s.pt --cache

4. 评估模型

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

复制代码
    python val.py --img 640 --batch 16 --data data/remote_sensing_landslide_detection.yaml --weights runs/train/exp/weights/best.pt --task test

5. 推理

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

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

实验报告

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

项目简介 :概述项目的背景、目标和意义。
数据集介绍 :详细说明数据集的来源、规模以及标注格式等细节信息。
模型选择与配置 :阐述所选模型及其配置参数的具体情况。
训练过程 :记录训练过程中的损失变化情况以及学习率调整的过程。
评估结果 :展示模型在验证集上的具体性能指标(如mAP、准确率)。
可视化结果 :提供一些典型样本的检测结果可视化图以辅助分析。
结论与讨论 :总结实验结果并对可能的改进方向进行深入讨论。
附录 :包含代码片段、图表等补充材料以供参考和技术实现细节参考。

依赖库

确保安装了以下依赖库:

复制代码
 pip install torch torchvision

    
 pip install -r yolov5/requirements.txt

总结

该遥感滑坡目标检测数据集包含了大量的标注信息;特别适合用于训练与评估目标检测模型;基于YOLOv5框架;构建与训练高性能的目标检测模型;实验报告不仅有助于深入理解模型性能的关键点;并且为后续研究提供了重要的参考资料;鉴于此数据集的规模适中;建议在训练过程中充分运用数据增强技术以提升模型的泛化能力。

全部评论 (0)

还没有任何评论哟~