首页 > 其他分享 >如何训练自己的数据集之,超大规模滑坡分割数据集

如何训练自己的数据集之,超大规模滑坡分割数据集

时间:2024-10-29 17:19:20浏览次数:6  
标签:inputs labels image torch 超大规模 model 集之 数据 self

 b324dab93e9847e390daf0926d5be383.png超大规模滑坡分割数据集,共34604张图像,全部处理为512×512尺度,涵盖航空,无人机,卫星多种传感器类型,涵盖0.1m-10m不同分辨率影像,数据量3.6GB,标注质量高,全部为原始数据,无增强

ec2ed0a5d96f4838b90127d31a1d42d1.png

  • 滑坡分割数据集
  • 规模:共34,604张图像,数据量约3.6GB
  • 图像尺寸:统一处理为512×512像素
  • 传感器类型:涵盖航空、无人机、卫星等多种传感器类型
  • 分辨率范围:涵盖0.1米至10米的不同分辨率影像
  • 标注格式:提供高质量的分割标注(JSON格式)

数据集特点

  • 高分辨率影像:所有图像均经过统一处理,确保了图像的一致性和分割模型的训练效率。
  • 详细标注:每张图像都有详细的分割区域标注,采用JSON格式。这些标注可以用于训练模型来进行滑坡区域的分割。
  • 多样性:数据集包含来自不同传感器的数据,覆盖了广泛的地理区域和不同的分辨率,适用于各种应用场景。
  • 原始数据:提供的数据未经任何数据增强处理,保证了数据的真实性和完整性。

数据集统计

图像来源图像张数数据量
航空影像  
无人机影像  
卫星影像  
总计34,6043.6GB

数据集结构

LandslideSegmentationDataset/
├── images/  # 图像文件
│   ├── image_00001.jpg
│   ├── image_00002.jpg
│   └── ...
├── annotations/  # 分割标注
│   ├── image_00001.json
│   ├── image_00002.json
│   └── ...
└── dataset_info.txt  # 数据集描述文件

标注格式示例

每张图像对应一个JSON文件,包含每个目标的分割信息:

{
    "image_id": "image_00001",
    "width": 512,
    "height": 512,
    "objects": [
        {
            "label": "Landslide",
            "polygon": [[100, 150], [150, 200], [200, 150], [150, 100]],
            "segmentation": [[100, 150, 150, 200, 200, 150, 150, 100]]
        },
        {
            "label": "Landslide",
            "polygon": [[250, 300], [300, 350], [350, 300], [300, 250]],
            "segmentation": [[250, 300, 300, 350, 350, 300, 300, 250]]
        },
        ...
    ]
}

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

1. 数据预处理与加载

首先,我们需要加载数据并将其转换为适合常用分割模型(如U-Net、DeepLab等)使用的格式。假设你已经安装了PyTorch和其他必要的库。

import os
import json
import numpy as np
from PIL import Image
import torch
from torch.utils.data import Dataset, DataLoader
from torchvision import transforms

class LandslideSegmentationDataset(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')]
        self.annotations = {}

        # 加载所有标注
        for img_file in self.image_files:
            ann_file = img_file.replace('.jpg', '.json')
            with open(os.path.join(annotation_dir, ann_file), 'r') as f:
                self.annotations[img_file] = json.load(f)

    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)
        ann_data = self.annotations[img_name]

        # 加载图像
        image = Image.open(img_path).convert('RGB')
        if self.transform:
            image = self.transform(image)

        # 加载标注
        mask = np.zeros((512, 512))
        for obj in ann_data['objects']:
            seg = np.array(obj['segmentation'][0]).reshape(-1, 2)
            cv2.fillPoly(mask, [seg], 1)

        mask = torch.from_numpy(mask).float()

        return image, mask

# 数据增强
transform = transforms.Compose([
    transforms.ToTensor(),
])

# 创建数据集
dataset = LandslideSegmentationDataset(image_dir='LandslideSegmentationDataset/images/', annotation_dir='LandslideSegmentationDataset/annotations/', transform=transform)

# 划分训练集和验证集
train_size = int(0.8 * len(dataset))
val_size = len(dataset) - train_size
train_dataset, val_dataset = torch.utils.data.random_split(dataset, [train_size, val_size])

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. 构建模型

我们可以使用U-Net模型进行语义分割任务。假设你已经安装了PyTorch和其他必要的库。

import torch
import torch.nn as nn
import torch.optim as optim

class UNet(nn.Module):
    def __init__(self):
        super(UNet, self).__init__()
        # 定义网络结构
        ...

    def forward(self, x):
        # 前向传播
        ...

# 初始化模型
model = UNet()
optimizer = optim.Adam(model.parameters(), lr=0.001)
criterion = nn.BCEWithLogitsLoss()  # 二分类任务

# 将模型转移到GPU
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model.to(device)

3. 训练模型

使用定义好的数据加载器和模型进行训练。

num_epochs = 100
for epoch in range(num_epochs):
    model.train()
    running_loss = 0.0
    for i, (inputs, labels) in enumerate(train_loader, 0):
        inputs, labels = inputs.to(device), labels.to(device)

        optimizer.zero_grad()
        outputs = model(inputs)
        loss = criterion(outputs, labels.unsqueeze(1))
        loss.backward()
        optimizer.step()

        running_loss += loss.item() * inputs.size(0)

    print(f'Epoch {epoch+1}/{num_epochs}, Loss: {running_loss/len(train_dataset)}')

    # 在验证集上评估模型
    model.eval()
    with torch.no_grad():
        correct = 0
        total = 0
        for inputs, labels in val_loader:
            inputs, labels = inputs.to(device), labels.to(device)
            outputs = model(inputs)
            _, predicted = torch.max(outputs.data, 1)
            total += labels.size(0)
            correct += (predicted == labels).sum().item()

        print(f'Accuracy of the network on the validation set: {100 * correct // total}%')

4. 评估模型

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

# 在验证集上评估模型
model.eval()
with torch.no_grad():
    correct = 0
    total = 0
    for inputs, labels in val_loader:
        inputs, labels = inputs.to(device), labels.to(device)
        outputs = model(inputs)
        _, predicted = torch.max(outputs.data, 1)
        total += labels.size(0)
        correct += (predicted == labels).sum().item()

    print(f'Accuracy of the network on the validation set: {100 * correct // total}%')

5. 推理

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

def infer(model, image_path):
    image = Image.open(image_path).convert('RGB')
    image = transform(image).unsqueeze(0).to(device)
    model.eval()
    with torch.no_grad():
        output = model(image)
        prediction = torch.sigmoid(output) >= 0.5
    return prediction.squeeze().cpu().numpy()

# 示例推理
image_path = 'path/to/test/image.jpg'
prediction = infer(model, image_path)

实验报告

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

  1. 项目简介:简要描述项目的背景、目标和意义。
  2. 数据集介绍:详细介绍数据集的来源、规模、标注格式等。
  3. 模型选择与配置:说明选择的模型及其配置参数。
  4. 训练过程:记录训练过程中的损失变化、学习率调整等。
  5. 评估结果:展示模型在验证集上的性能指标(如准确率、F1分数)。
  6. 可视化结果:提供一些典型样本的分割结果可视化图。
  7. 结论与讨论:总结实验结果,讨论可能的改进方向。
  8. 附录:包含代码片段、图表等补充材料。

依赖库

确保安装了以下依赖库:

pip install torch torchvision opencv-python

总结

这个超大规模滑坡分割数据集提供了丰富的标注数据,非常适合用于训练和评估语义分割模型。通过U-Net等分割模型框架,可以方便地构建和训练高性能的滑坡分割模型。实验报告可以帮助你更好地理解和分析模型的表现,并为进一步的研究提供参考。

490f42ec1cfa4a908ee63e1e4efd991b.png

 

 

标签:inputs,labels,image,torch,超大规模,model,集之,数据,self
From: https://blog.csdn.net/2401_88441190/article/details/143235307

相关文章

  • 如何训练自己的数据集之火灾应急救援——
     火灾应急救援——智慧化无人机,直升机等航拍视角下火灾应急救援检测数据集,数据分别标注了火,人,车辆这三个要素内容,29810张高清航拍影像,共31GB,适合森林防火,应急救援等方向的学术研究,落地应用 火灾应急救援检测数据集规模:共29,810张高清航拍影像,数据量约31GB检测要素:火源、人......
  • C#基础数据类型
    C# 数据类型在C#中,变量分为以下几种类型:值类型(Valuetypes)引用类型(Referencetypes)指针类型(Pointertypes)值类型(Valuetypes)值类型变量可以直接分配给一个值。它们是从类 System.ValueType 中派生的。值类型直接包含数据。比如 int、char、float,它们分别存储数字......
  • 袋鼠云产品功能更新报告12期|让数据资产管理更高效
    本期,我们更新和优化了数据资产平台相关功能,为您提供更高效的产品能力。以下为第12期袋鼠云产品功能更新报告,请继续阅读。一、【元数据】重点更新|01元数据管理优化,支持配置表生命周期之前系统中缺少一个可以基于数据源和数据库维度,批量配置数据表生命周期的入口,导致用户在处理......
  • 重装系统数据会丢失吗?重装系统数据丢了怎么找回来
    重装系统是许多电脑用户在进行系统维护或升级时经常遇到的操作。然而,关于重装系统后数据是否会丢失,以及如何找回丢失的数据,这两个问题常常困扰着用户。本文将详细探讨这两个问题,并提供实用的解决方案。图片来源于网络,如有侵权请告知一、重装系统数据会丢失吗?首先,我们来解......
  • 队列与树 数据结构复习笔记
    2.3队列队列(Queue),它是一种运算受限的线性表,先进先出(FIFOFirstInFirstOut)队列是一种受限的线性结构受限之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作Python标准库中的queue模块提供了多种队列实现,包括普通队列、双端队列、优先队......
  • 【数据资产化】数据资产入表——成本可靠计量
            在当今的商业环境中,数据的价值已经超越了传统的资产类别,成为企业竞争的关键资源。随着数据资产化的概念逐渐被接受和实践,企业如何对这些资产进行有效的计量和会计处理,成为了一个亟待解决的问题。特别是在资产确认的过程中,成本的可靠计量成为了一个核心条件,它直......
  • springboot:调用接口返回的数据乱码解决
    从git拉下来项目后,运行服务,启动正常,但是使用swagger和postman调用服务接口出现乱码问题每一个接口返回的数据是乱码,但是控制台打印的日志都是正常的,后续发现数据的返回类型不是常见的application/json,而是application/x-jackson-smile,所以要通过改变数据类型解决问题通过在接......
  • 数据结构-栈的顺序存储结构
    第三章栈3.1栈的定义                                   线性表                       栈只能选取同一个端点进行插入和删除操作允许进行插入......
  • SpringBoot请销假管理信息系统8wz1t(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表学生,教师,领导,在线请假,提交审批,审批信息,延假申请,在线销假,学生统计,班级统计,学院统计开题报告内容一、课题背景与意义随着教育管理的信息化发展,传统的......
  • SpringBoot琴行管理系统42jfd--(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表学生,教师,课程信息,课程类型,课程购买,课程作业,作业提交,作业批改,课程签到,财务信息开题报告内容一、研究背景与意义随着音乐教育的普及和琴行的不断增多,传......