Pytorch Dataset类和Dataloader实践

【PyTorch实战】使用自定义Dataset类与DataLoader高效加载图像分类数据集 在深度学习的图像分类任务中,高效地加载和管理数据是模型训练成功的关键第一步。PyTorch框架提供了两个强大的工具——`torch.utils.data.Dataset`和`torch.utils.data.DataLoader`,它们共同构成了一个灵活且高效的数据加载流水线。掌握如何自定义`Dataset`类并结合`DataLoader`使用,能够让我们轻松应对各种非标准格式的数据集。 阅读详情
import cv2
import os
import glob
import torch
import time
import numpy as np
from torch.utils.data import Dataset,DataLoader
import concurrent.futures

class DatasetClass(Dataset):
    def __init__(self,base_dir,dataset_name,train_or_test,clip_len=6,resize_height=256, resize_width=256, gray=False, scale=-1):
        assert os.path.exists(base_dir)
        assert clip_len >= 1
        assert gray in [True, False]
        assert scale in [0,-1]
        dataset_dir = os.path.join(base_dir,"{}/{}ing/frames".format(dataset_name,train_or_test))
        self.dataset_dir = dataset_dir
        self.clip_len = clip_len
        self.height = resize_height
        self.width = resize_width
        self.gray = gray
        self.scale = scale
        self.dataset_csv = self.get_dataset_csv()
        
    def __getitem__(self, clip_index):
        """
        :param clip_index:
        :return: clip_data,shape=[clip_len,H,W,C]
        """
        clip_frames = self.dataset_csv[clip_index].split("&&")
        clip_data = []
        for frame_path in clip_frames:
            clip_data.append(np.expand_dims(self.np_load_frame(frame_path),axis=0))
        clip_data = np.concatenate(clip_data, axis=0)
        return clip_data
    
    def __len__(self):
        return len(self.dataset_csv)

    def get_dataset_csv(self):
        """
        :param self.dataset_dir
        :param self.clip_len
        :return: 一个文件列表,每个元素是:一个clip的视频帧路径的串联字符串,串联符号是“&&”
        """
        videos = sorted(glob.glob(os.path.join(self.dataset_dir, "*")))  # 查看有多少视频
        videos_frames = [sorted(glob.glob(os.path.join(v, "*.jpg"))) for v in videos]  # 查看每个视频有多少视频帧
        clips_csv = []
        for video in videos_frames:
            for i in range(len(video) - self.clip_len + 1):
                clips_csv.append("&&".join(video[i:i + self.clip_len]))
        return clips_csv

    def np_load_frame(self,frame_path):
        """
        :param frame_path:
        :return: image.shape = [H,W,C]
        """
        image = cv2.imread(frame_path)
        image = cv2.resize(image, (self.width, self.height)).astype(dtype=np.float32)
        if self.gray: # 转为灰度图
            image = np.expand_dims(cv2.cvtColor(image, cv2.COLOR_RGB2GRAY), axis=-1)
        if self.scale == 0: # 归一化到[0,1]
            image = image/255.0
        if self.scale == -1: # 归一化到[-1,1]
            image = (image/127.5) - 1.0
        return image

        
        
if __name__ =="__main__":
    dataset_base_dir = "/media/wzg/Disk3T/Data"
    dataset = DatasetClass(dataset_base_dir,"***","train", clip_len=10, resize_width=256, resize_height=256, gray=False, scale=-1)
    
    """使用方式1,迭代器"""
    dataloader = DataLoader(dataset=dataset, batch_size=20, shuffle=True, num_workers=4, drop_last=False)
    time_start = time.time()
    data = next(iter(dataloader))
    time_end = time.time()
    time_cost = time_end - time_start
    print(time_cost,data.shape)
    
    """使用方式2 逐个epoch提取"""
    for epoch in range(1):
        # 把dataloader放着这里有助于重新打乱数据
        dataloader = DataLoader(dataset=dataset, batch_size=50, shuffle=True, num_workers=4, drop_last=False)
        batch_num = len(dataloader)  # 一个epoch的batch数
        time_start = time.time()
        for i,data in enumerate(dataloader):
            print("epoch:{}, {}/{}".format(epoch,i,batch_num),data.shape)
        time_end = time.time()
        print(time_end - time_start)# 统计遍历完一个epoch的时间

 

【PyTorch】自定义数据集相关的类 torch.utils.data.Dataset 和 torch.utils.data.DataLoader 自定义数据集相关的类 阅读详情

相关推荐

MATLAB实战:5步搞定铣削稳定性叶瓣图(附完整代码解析)

本文提供了一份基于MATLAB的铣削稳定性叶瓣图实战指南。通过5个清晰步骤,从动力学原理出发,详细解析了利用半离散法构建稳定性判据、模块化代码设计、高效参数扫描及高级可视化的完整流程,并附有完整代码,帮助工程师快速预测和规避加工颤振,优化铣削工艺参数。

weixin_29197051的博客 194

使用Dataset、Dataloader自定义数据集

数据————>model 中间的实现过程由dataloader去做 index——>record 中间的实现过程由dataset去做

weixin_62646577的博客 4645

如何使用windows搭建一个公网ftp/sftp服务器

在有公网ip的情况下,使用windows系统搭建一个ftp/sftp服务器会带来很多的方便,可以实现远程移动端的一键式访问,对于文件的备份、多设备的共享都十分的方便。然而网上许多的教程都是基于windows自带的iis搭建一个局域网ftp服务器,然而在搭建好后,我想要通过端口映射的方式实现在外网访问时,却发现连接不上的问题,感觉可能是因为windows家庭版的原因导致的。因此在查阅很多资料之后终于找到了一个公网ftp/sftp服务器的搭建方式,实测可用。这里把流程记录一下,做一个备忘录,也方便大家搭建。

weixin_43354138的博客 1万+

mmaction2实验记录2——视频数据处理的方法

mmaction2中视频数据处理的方法

c_procomer的博客 1745

从零搭建SPI通信系统:AXI Quad SPI IP核在Xilinx平台上的完整配置流程

本文详细介绍了在Xilinx平台上使用AXI Quad SPI IP核从零搭建SPI通信系统的完整配置流程。涵盖IP核架构解析、Vivado环境配置、寄存器编程实战及性能优化策略,帮助开发者快速实现高速稳定的SPI通信,特别适用于嵌入式系统开发中的外围设备连接需求。

hh234的博客 1052

告别迷茫!用ETAS RTA-OS配置你的第一个AUTOSAR OS任务(含VRTA虚拟ECU实战)

本文详细介绍了如何使用ETAS RTA-OS工具链在VRTA虚拟ECU上配置和运行第一个AUTOSAR OS任务。通过从XML配置到任务调度的全流程实战,帮助开发者快速掌握嵌入式操作系统开发的核心步骤,特别适合刚接触AUTOSAR的开发者快速上手。

weixin_42533622的博客 418

next(iter(dataloader))的详解

经常在自己建立好数据集后需要验证一下,自己的图片和标签能不能对上,经常用到next(iter(dataloader))命令。可知其返的是一个batch的图片和标签数据,数据类型均为tensor,图片维度为(c,h,w)。分别打印出返回值的大小、类别。

Dz0411的博客 1358

OpenLayers源码解析1 Map.js

Map.js 父类:./PluggableMap/PluggableMap 引用:5个模块 ./renderer/Composite.js ./PluggableMap.js ./obj.js ./control.js(控件) ./interaction.js(交互) 主要功能:核心组件,渲染地图 必要参数: view layers target controls和interactions要是未指定,使用默认值 方法:createRenderer()? /** * @module ol/Map */ i

qq_45005996的博客 1898

基于C3D卷积神经网路的动作识别

有时候,在处理大数据集时,一次将整个数据加载到内存中变得非常难。因此,唯一的方法是将数据分批加载到内存中进行处理,这需要编写额外的代码来执行此操作。对此,PyTorch 已经提供了 Dataloader 功能。下面显示了 PyTorch 库中DataLoader函数的语法及其参数信息。参见pytorch官方文档,dataset (dataset)—从其中加载数据的数据集。Batch_size (int,可选)-每批加载多少个样本(默认值:1)。

万物并作,吾以观复 2703

【JTAG】1500协议详解

随着集成电路的规模不断扩大,1149.1的板级测试无法满足要求越来越高的芯片测试需求。芯片规模变大后,测试需求不在是一次测试整片芯片,而是芯片分为好几个区域去测试,而1500协议正是对1149.1在该方面的一个补充即1149.1主要测试板级间的互连,而1500用来测试芯片内不同core之间的互连。IEEEStd1500已经为包含不同模块的集成电路(ICs)开发了一种可测试性设计标准方法。............

xuhe0206的博客 7021

【K8S系列】Kubernetes 中 Pod 无法通过 Service 名称访问服务的 DNS 解析失败问题【已解决】

在 Kubernetes 中,Service 提供了一种稳定的方式,通过名称访问一组 Pod。当其他 Pod 无法通过 Service 名称访问服务,并且出现 DNS 解析失败时,通常会导致应用无法正常工作。本文将详细分析此问题的常见原因及其解决方案。

颜淡慕潇 1万+

pytorch dataloader详解

构建自己的dataloader是模型训练的第一步,本篇文章介绍下pytorch与dataloader以及与其相关的类的用法。

包龙星的剑 1万+

基于扩散模型的图像去噪与修复:原理、实现与性能分析【附核心代码】

扩散模型(Diffusion Models)在图像修复、去噪、风格化、超分辨率等领域的应用,展示了其强大的生成能力和灵活性。通过模拟图像逐步加噪声再去噪的过程,扩散模型不仅能够恢复图像的细节,还能生成高质量的图像。本文详细探讨了扩散模型在图像修复和增强中的应用,并通过具体代码示例展示了如何使用扩散模型进行去噪、风格化、图像超分辨率等任务。扩散模型在图像修复中通过逐步去噪修复损坏的区域,在图像去噪中则能够去除图像中的噪声并保留细节;在图像风格化中,扩散模型通过结合目标风格和内容生成富有艺术性的图像;

一键难忘的博客 2929

Pytorch:Dataset类和DataLoader类

Dataset是一个抽象类,用于表示一个数据集的全部内容。在 PyTorch 中,任何继承自的自定义数据集需要实现两个必须这个方法应该返回一个索引处的数据点和其对应的标签。例如,在图像数据集中,这可能是一对(图像,标签)。这个方法返回数据集中的数据点的总数,即数据集的大小。DataLoader是一个迭代器,用于将Dataset封装成易于访问的数据流,支持批量加载和多进程数据加载等操作。通过组合使用Dataset和DataLoader,PyTorch 用户可以高效、灵活地处理大规模数据集。Dataset。

m0_63997099的博客 2639

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【Pytorch 02】Dataset类 和 Dataloader类

1. Dataset类 和 Dataloader类 介绍 2. 查看 Dataset 使用 3. Dataset 使用实例 【重点】4. DataLoader 使用示例

weixin_42322991的博客 815

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

pytorch源码分析之torch.utils.data.Dataset类和torch.utils.data.DataLoader类

写在之前 介绍 Pytorch深度学习框架优势之一是python优先,源代码由python代码层和C语言代码层组成,一般只需要理解python代码层就可以深入理解pytorch框架的计算原理。所以学习pytorch源码需要熟练掌握python语言的各种使用技巧。 在处理任何机器学习问题之前都需要数据读取,并进行预处理。Pytorch提供了许多方法使得数据读取和预处理变得很容易。 torch.ut...

Never-Giveup的博客 3万+

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Pytorch的DataSet和DataLoader类编写套路

DataSet类的说明 An abstract class representing a :class:Dataset. All datasets that represent a map from keys to data samples should subclass it. All subclasses should overwrite :meth:`__getitem__`, supporting fetching a data sample for a given key. Subclasses

Chenguanxixixi的博客 1061

pytorch-Dataset类和DataLoader类的基本写法

pytorch-Dataset类和DataLoader类的基本写法

qq_51539256的博客 576

【Pytorch】Dataset类和DataLoader、tensorboard

Dataset本质上就是一个抽象类,可以把数据封装成Python可以识别的数据结构。Dataset类不能实例化,所以在使用Dataset的时候,我们需要定义自己的数据集类,也是Dataset的子类,来继承Dataset类的属性和方法。Dataset可作为DataLoader的参数传入DataLoader,实现基于张量的数据预处理Dataset和DataLoader都是用来帮助我们加载数据集的两个重要工具类:Dataset用来构造支持索引的数据集。

Nirvana_xian的博客 1021

Pytorch 04: Pytorch中数据加载---Dataset类和DataLoader类

从代码角度学习理解Pytorch学习框架04: Dataset类和DataLoader类了解,方便我们加载和处理数据。   # coding=utf-8 import matplotlib as mpl mpl.use('tkagg') # 调试:agg; 运行: tkagg import matplotlib.pyplot as plt import os import panda...

一遍看不懂,我就再看一遍 1万+

PyTorch Dataset Dataloader加载自定义多分类数据,重写Dataset类

不多说,直接上源码 我做的是语种分类的项目,所以直接上了,里面有些介绍。 还是先简要介绍,继承torch.data.dataset,然后重写init、len和getitem方法。 代码如下: import os import torch import librosa import librosa.display import matplotlib.pyplot as plt import...

tcd1112的博客 4361

Pytorch学习(一) --- 数据加载之Dataset类和DataLoader类

在进行深度学习任务时,一个完整的baseline通常分为以下几个部分: 定义模型。这里需要构建网络模型,后面用这个模型去训练。 定义数据增强。这里主要是在数据量少的情况下,对数据进行一些增强,比如平移,翻转,裁剪等操作,以提高模型的泛化能力(这一步不是必须的)。 定义数据加载。这里定义数据加载器,使得模型训练时模型能源源不断地获取数据进行训练。对于Pytorch而言,数据记载主要需要用到Data...

梦坠凡尘 5890

Pytorch利用Dataset类和DataLoader读取自己的数据集,并训练

(图像数据集的图像路径写在一个txt中,txt每一行为 Path Label)

qq_32953463的博客 1048

python数据加载类_Pytorch学习(一) --- 数据加载之Dataset类和DataLoader类

在进行深度学习任务时,一个完整的baseline通常分为以下几个部分:定义模型。这里需要构建网络模型,后面用这个模型去训练。定义数据增强。这里主要是在数据量少的情况下,对数据进行一些增强,比如平移,翻转,裁剪等操作,以提高模型的泛化能力(这一步不是必须的)。定义数据加载。这里定义数据加载器,使得模型训练时模型能源源不断地获取数据进行训练。对于Pytorch而言,数据记载主要需要用到Dataset和...

weixin_39625747的博客 688

【PyTorch实战】使用自定义Dataset类与DataLoader实现高效数据加载与训练

# 自定义Dataset类的核心作用在PyTorch中,自定义Dataset类是高效数据加载的基础。它通过继承torch.utils.data.Dataset并实现__len__和__getitem__方法,将原始数据组织成模型可直接使用的格式。这种设计使得数据预处理、增强和访问变得标准化,尤其适用于处理非标准数据集或需要复杂预处理流程的场景。## 实现Dataset类的基本结构以下是一个处理图像分类任务的自定义Dataset类示例。

weixin_42383071的博客 437

DAY 38 Dataset和Dataloader类

核心结论:定义数据的内容和格式(即“如何获取单个样本”),包括:数据存储路径/来源(如文件路径、数据库查询)。原始数据的读取方式(如图像解码为PIL对象、文本读取为字符串)。样本的预处理逻辑(如裁剪、翻转、归一化等,通常通过transform参数实现)。返回值格式(如(image_tensor, label))。定义数据的加载方式和批量处理逻辑(即“如何高效批量获取数据”),包括:批量大小(batch_size)。是否打乱数据顺序(shuffle)。@浙大疏锦行。

CONGOREDE的博客 975
上一篇: Unable to access “***“, Failed to mount ‘/dev/sda7‘: Operation not permitted
下一篇: pytorch 自定义卷积核进行卷积--卷积核订制
wzg2016
博客等级 码龄10年 539粉丝 493原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值