热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

语义分割中的数据生成器dataloader(pytorch版)

数据集的基本结构可以参考官方文档webdocumantation。主要有三个类:Dataset,SamplerandDataLoader。Dataset:代表数据集
数据集的基本结构

可以参考官方文档 web documantation。主要有三个类:Dataset, Sampler and DataLoader。

  • Dataset:
    代表数据集的抽象类;所有其他数据集都应该继承它。所有的子类都应该覆盖len(提供数据集的大小)和getitem(支持范围从0到len(self)的整形索引)。

  • Sampler:
    所有采样器的基准类;每个采样器子类必须提供iter方法,提供一种遍历数据集元素的索引的方法,以及一个返回迭代器长度的len方法。

  • DataLoader:
    组合数据集和采样器,并在数据集上提供单进程或多进程迭代器。


简单的数据集类:

train_images_path = "./data/train_images"
train_labels_path = "./data/train_labels"class RSDataset(Dataset):def __init__(self, input_root, mode="train", debug = False):super().__init__()self.input_root = input_rootself.mode = modeif debug == False:self.input_ids = sorted(img for img in os.listdir(self.input_root))else:self.input_ids = sorted(img for img in os.listdir(self.input_root))[:500]self.mask_transform = transforms.Compose([transforms.Lambda(to_monochrome),transforms.Lambda(to_tensor),])self.image_transform = transforms.Compose([transforms.ToTensor(),])self.transform = DualCompose([RandomFlip(),RandomRotate90(),Rotate(),Shift(),])def __len__(self):return len(self.input_ids)def __getitem__(self, idx):# at this point all transformations are applied and we expect to work with raw tensorsimageName = os.path.join(self.input_root,self.input_ids[idx])image = np.array(cv2.imread(imageName), dtype=np.float32)mask = np.array(cv2.imread(imageName.replace("train_images", "train_labels")))/255h, w, c = image.shapemask1 = np.zeros((h, w), dtype=int)if self.mode == "train":image, mask = self.transform(image, mask)mask1 = mask[:,:,0]return self.image_transform(image), self.mask_transform(mask1)else:mask1 = mask[:,:,0]return self.image_transform(image), self.mask_transform(mask1)###划分训练集和验证集
def build_loader(input_img_folder = "./data/train_images",batch_size = 16,num_workers = 4):# Get correct indicesnum_train = len(sorted(img for img in os.listdir(input_img_folder)))indices = list(range(num_train))seed(128381)indices = sample(indices, len(indices))split = int(np.floor(0.15 * num_train))train_idx, valid_idx = indices[split:], indices[:split]train_sampler = SubsetRandomSampler(train_idx)#set up datasetstrain_dataset = RSDataset("./data/train_images","./data/train_labels",mode = "train",)val_dataset = RSDataset("./data/train_images","./data/train_labels",mode="valid",)valid_sampler = SubsetRandomSampler(valid_idx)train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=batch_size, sampler=train_sampler,num_workers=num_workers, pin_memory=True)valid_loader = torch.utils.data.DataLoader(val_dataset, batch_size=batch_size, sampler=valid_sampler,num_workers=num_workers, pin_memory=True)return train_loader, valid_loader


推荐阅读
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • 本文讨论了编写可保护的代码的重要性,包括提高代码的可读性、可调试性和直观性。同时介绍了优化代码的方法,如代码格式化、解释函数和提炼函数等。还提到了一些常见的坏代码味道,如不规范的命名、重复代码、过长的函数和参数列表等。最后,介绍了如何处理数据泥团和进行函数重构,以提高代码质量和可维护性。 ... [详细]
  • 本文讨论了如何使用Web.Config进行自定义配置节的配置转换。作者提到,他将msbuild设置为详细模式,但转换却忽略了带有替换转换的自定义部分的存在。 ... [详细]
  • VueCLI多页分目录打包的步骤记录
    本文介绍了使用VueCLI进行多页分目录打包的步骤,包括页面目录结构、安装依赖、获取Vue CLI需要的多页对象等内容。同时还提供了自定义不同模块页面标题的方法。 ... [详细]
  • 如何在HTML中获取鼠标的当前位置
    本文介绍了在HTML中获取鼠标当前位置的三种方法,分别是相对于屏幕的位置、相对于窗口的位置以及考虑了页面滚动因素的位置。通过这些方法可以准确获取鼠标的坐标信息。 ... [详细]
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
  • java drools5_Java Drools5.1 规则流基础【示例】(中)
    五、规则文件及规则流EduInfoRule.drl:packagemyrules;importsample.Employ;ruleBachelorruleflow-group ... [详细]
  • [echarts] 同指标对比柱状图相关的知识介绍及应用示例
    本文由编程笔记小编为大家整理,主要介绍了echarts同指标对比柱状图相关的知识,包括对比课程通过率最高的8个课程和最低的8个课程以及全校的平均通过率。文章提供了一个应用示例,展示了如何使用echarts制作同指标对比柱状图,并对代码进行了详细解释和说明。该示例可以帮助读者更好地理解和应用echarts。 ... [详细]
  • 如何优化Webpack打包后的代码分割
    本文介绍了如何通过优化Webpack的代码分割来减小打包后的文件大小。主要包括拆分业务逻辑代码和引入第三方包的代码、配置Webpack插件、异步代码的处理、代码分割重命名、配置vendors和cacheGroups等方面的内容。通过合理配置和优化,可以有效减小打包后的文件大小,提高应用的加载速度。 ... [详细]
  • 从批量eml文件中提取附件的Python代码实现方法
    本文介绍了使用Python代码从批量eml文件中提取附件的实现方法,包括获取eml附件信息、递归文件夹下所有文件、创建目的文件夹等步骤。通过该方法可以方便地提取eml文件中的附件,并保存到指定的文件夹中。 ... [详细]
  • 第七课主要内容:多进程多线程FIFO,LIFO,优先队列线程局部变量进程与线程的选择线程池异步IO概念及twisted案例股票数据抓取 ... [详细]
author-avatar
刘胜良昭桂家贤
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有