【深度学习实战(11)】搭建自己的dataset和dataloader

2024-04-21 17:04

本文主要是介绍【深度学习实战(11)】搭建自己的dataset和dataloader,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、dataset和dataloader要点说明

在我们搭建自己的网络时,往往需要定义自己的datasetdataloader,将图像和标签数据送入模型。
(1)在我们定义dataset时,需要继承torch.utils.data.dataset,再重写三个方法:

  • init方法,主要用来定义数据的预处理
  • getitem方法,数据增强;返回数据的item和label
  • len方法,返回数据数量

(2)在我们定义dataloader时,需要考虑下面几个参数:

  • dataset :使用哪个数据集
  • batch_size:将数据集拆成一组多少个进行训练
  • shuffle:是否需要打乱数据
  • num_workers:几个mini_batch并行计算,一般<=你的电脑cpu数目
  • collect_fn:数据打包方式

(3)通过迭代的方式,按批次,获取dataloader中的数据

(4)关系图

在这里插入图片描述

二、核心代码框架

import os
import cv2
from torchvision import transforms
from torch.utils.data.dataset import Dataset
from torch.utils.data import DataLoader# -------------------------------------------------------------#
#   自定义dataset需要继承torch.utils.data.dataset,
#   再重写def __init__,def __len__,def __getitem__三个方法
# -------------------------------------------------------------#
class YourDataset(Dataset):def __init__(self,  root_path):super(YourDataset, self).__init__()self.root_path = root_path#-------------------------------------------------------------------------##   获取样本名,以jpg原始图片为参考,修改后缀名为json,png,获取json,png标签文件路径#-------------------------------------------------------------------------#self.sample_names = []jpg_path = os.path.join(os.path.join(self.root_path, "images"),)for file in os.listdir(jpg_path):if file.endswith(".jpg"):self.sample_names.append(os.path.splitext(file)[0]) # 去掉.jsondef __len__(self):#----------------------##   返回数据数量#----------------------#return len(self.sample_names)def __getitem__(self, index):name = self.sample_names[index]# ----------------------##   读取图像# ----------------------#img_path = os.path.join(os.path.join(self.root_path, "images"), name + '.jpg')image = cv2.imread(img_path)# ----------------------##   读取标签# ----------------------#label_path = os.path.join(os.path.join(self.root_path, "jsons"), name + '.json')with open(label_path) as label_file:points = self.get_data_from_json(label_file)#----------------------##   图像数据增强#----------------------#image = self.random_color(image)#----------------------##   标签归一化#----------------------#labels = self.convert_labels(points)return image,  labels# -------------------------------------#
#   图片和标签格式转换后,按批次(batch)打包
# -------------------------------------#
def dataloader_collate_fn(batch):images = []labels = []for img, label in batch:images.append(transforms.ToTensor()(img))labels.append(label)return images, labelsif __name__ == '__main__':# -------------------------------------##   构建dataset# -------------------------------------#path = './data/train'train_dataset = YourDataset(path)# -------------------------------------##   构建Dataloader# -------------------------------------#dataset = train_datasetbatch_size = 32shuffle = Truenum_workers = 0collate_fn = dataloader_collate_fnsampler = Nonetrain_gen = DataLoader(dataset=dataset, shuffle=shuffle, batch_size=batch_size, num_workers=num_workers, pin_memory=True,drop_last=True, collate_fn=collate_fn, sampler=sampler)# ---------------------------------------------##   通过迭代的方式,一批一批读取训练集中的图像和标签数据# ---------------------------------------------#for iter, batch in enumerate(train_gen):images,  labels = batch

这篇关于【深度学习实战(11)】搭建自己的dataset和dataloader的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/923592

相关文章

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

Linux搭建ftp服务器的步骤

《Linux搭建ftp服务器的步骤》本文给大家分享Linux搭建ftp服务器的步骤,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录ftp搭建1:下载vsftpd工具2:下载客户端工具3:进入配置文件目录vsftpd.conf配置文件4:

Java 正则表达式的使用实战案例

《Java正则表达式的使用实战案例》本文详细介绍了Java正则表达式的使用方法,涵盖语法细节、核心类方法、高级特性及实战案例,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录一、正则表达式语法详解1. 基础字符匹配2. 字符类([]定义)3. 量词(控制匹配次数)4. 边

Java Scanner类解析与实战教程

《JavaScanner类解析与实战教程》JavaScanner类(java.util包)是文本输入解析工具,支持基本类型和字符串读取,基于Readable接口与正则分隔符实现,适用于控制台、文件输... 目录一、核心设计与工作原理1.底层依赖2.解析机制A.核心逻辑基于分隔符(delimiter)和模式匹

Python内存优化的实战技巧分享

《Python内存优化的实战技巧分享》Python作为一门解释型语言,虽然在开发效率上有着显著优势,但在执行效率方面往往被诟病,然而,通过合理的内存优化策略,我们可以让Python程序的运行速度提升3... 目录前言python内存管理机制引用计数机制垃圾回收机制内存泄漏的常见原因1. 循环引用2. 全局变

深度剖析SpringBoot日志性能提升的原因与解决

《深度剖析SpringBoot日志性能提升的原因与解决》日志记录本该是辅助工具,却为何成了性能瓶颈,SpringBoot如何用代码彻底破解日志导致的高延迟问题,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言第一章:日志性能陷阱的底层原理1.1 日志级别的“双刃剑”效应1.2 同步日志的“吞吐量杀手”

PostgreSQL简介及实战应用

《PostgreSQL简介及实战应用》PostgreSQL是一种功能强大的开源关系型数据库管理系统,以其稳定性、高性能、扩展性和复杂查询能力在众多项目中得到广泛应用,本文将从基础概念讲起,逐步深入到高... 目录前言1. PostgreSQL基础1.1 PostgreSQL简介1.2 基础语法1.3 数据库

Python WebSockets 库从基础到实战使用举例

《PythonWebSockets库从基础到实战使用举例》WebSocket是一种全双工、持久化的网络通信协议,适用于需要低延迟的应用,如实时聊天、股票行情推送、在线协作、多人游戏等,本文给大家介... 目录1. 引言2. 为什么使用 WebSocket?3. 安装 WebSockets 库4. 使用 We

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Spring Boot 整合 SSE(Server-Sent Events)实战案例(全网最全)

《SpringBoot整合SSE(Server-SentEvents)实战案例(全网最全)》本文通过实战案例讲解SpringBoot整合SSE技术,涵盖实现原理、代码配置、异常处理及前端交互,... 目录Spring Boot 整合 SSE(Server-Sent Events)1、简述SSE与其他技术的对