Python遥感影像深度学习指南(2)-在 PyTorch 中创建自定义数据集和加载器

        在上一篇 文章中,我们Fast.ai 在卫星图像中检测云轮廓,检测物体轮廓被称为语义分割。虽然我们用几行代码就能达到 96% 的准确率,但该模型无法考虑数据集中提供的所有输入通道(红、绿、蓝和近红外)。问题在于,深度学习框架(如 Keras、Fast.ai 甚至 PyTorch)中的大多数语义分割模型都是为处理 RGB 图像而设计的,并带有预先训练好的权重。除此之外,这些库中的视觉模块也仅限于 RGB 文件。这就是我们在前面的故事中忽略近红外通道,只使用 RGB patchs的原因。

        这促使我采用了一种完全不同的方法,从头开始构建我自己的 U-Net,而不是使用视觉库来准备数据集。本篇我将介绍如何使用简单的 PyTorch 函数创建数据集,而下一篇将继续介绍如何创建一个简单的U-NET分割模型,并对其进行训练以获得结果。

1、数据准备

       在上一篇文章中我们使用的数据集,是由 8400 个大小为 384x384 的训练片段组成(适合深度学习)。还有一组 9201 个图像块patchs用于测试,但我们暂时不处理它们。这些patchs分别位于红、绿、蓝和近红外(NIR)通道的目录中,另外还有一个用于参考掩膜(真实值ground truth*_gt)的目录。

2、PyTorch 数据集类

        在上一篇文章中,我们在磁盘中创建了 rgb_patch*.tif 文件,并使用 PIL 将条带合并为 384x`384x3

  • 21
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
当你的数据集很大时,你可以使用PyTorch数据集和数据加载来逐批加载数据。这样,你可以在内存有限的情况下有效地加载和使用大型数据集。 以下是一个使用PyTorch数据集和数据加载来逐批加载数据的示例代码: ```python import os import scipy.io as sio import numpy as np import torch from torch.utils.data import Dataset, DataLoader # 定义自定义数据集类 class MyDataset(Dataset): def __init__(self, data_path): self.file_paths = [] for root, dirs, files in os.walk(data_path): for file in files: if file.endswith(".mat"): self.file_paths.append(os.path.join(root, file)) def __len__(self): return len(self.file_paths) def __getitem__(self, idx): mat_data = sio.loadmat(self.file_paths[idx]) np_data = np.array(mat_data['data']) return np_data # 定义数据路径和批量大小 data_path = "/path/to/data/folder" batch_size = 32 # 创建自定义数据集对象和数据加载对象 dataset = MyDataset(data_path) dataloader = DataLoader(dataset, batch_size=batch_size, shuffle=True) # 遍历数据加载并输出数据批次的形状 for i, batch in enumerate(dataloader): print("Batch ", i, " shape: ", batch.shape) ``` 这个代码与之前的代码类似,但是使用了PyTorch数据集和数据加载来逐批加载数据。自定义数据集类(MyDataset)用于从磁盘加载.mat文件并将其转换为Numpy数组。数据加载(DataLoader)用于加载数据集的批次数据。 请注意,在这个示例代码,我们使用了shuffle=True来打乱数据集。这是一个很好的实践,因为它可以帮助模型更好地学习数据集的模式。如果你的数据集已经按照某种顺序排列好了,你可以将shuffle设置为False。 这个示例代码只是一个简单的演示如何使用PyTorch数据集和数据加载来逐批加载数据。你可以根据自己的需求修改代码以适应你的数据集和模型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gis收藏家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值