首页 > 其他分享 >clothing1m数据集使用

clothing1m数据集使用

时间:2024-10-01 16:33:20浏览次数:1  
标签:clothing1m 数据 self transform mode 使用 path root transforms

简介

Clothing1M 包含 14 个类别的 100 万张服装图像。这是一个带有噪声标签的数据集,因为数据是从多个在线购物网站收集的,并且包含许多错误标记的样本。该数据集还分别包含 50k、14k 和 10k 张带有干净标签的图像,用于训练、验证和测试。

下载地址:https://github.com/Newbeeer/L_DMI/issues/8

Dataset & DataLoader

数据集目录结构:

└─images
    ├─0
    │  ├─00
    │  ├─...
    │  └─99
    ├─...
    └─9
        ├─00
        ├─...
        └─99
import os

from PIL import Image
from torch.utils.data import Dataset, DataLoader
from torchvision.transforms import transforms

# mode=0: noisy train set, mode=1: clean val set, mode=2: clean test set
class Clothing1m(Dataset):
    nb_classes = 14

    def __init__(self, mode=0, root='~/data/clothing1m', transform=None):
        root = os.path.expanduser(root)
        self.mode = mode
        self.root = root
        self.transform = transform
        if mode == 0:
            txt_file = 'noisy_label_kv.txt'
        else:
            txt_file = 'clean_label_kv.txt'
        with open(os.path.join(root, txt_file), 'r') as f:
            lines = f.read().splitlines()

        self.labels = {line.split()[0]: int(line.split()[1]) for line in lines}

        data_path = []
        txt_file = ['noisy_train_key_list.txt', 'clean_val_key_list.txt', 'clean_test_key_list.txt']
        if mode in [0, 1, 2]:
            with open(os.path.join(root, txt_file[mode]), 'r') as f:
                lines = f.read().splitlines()
                for line in lines:
                    data_path.append(line)
        else:
            raise ValueError('mode should be 0, 1 or 2')

        self.data = data_path
        self.targets = [self.labels[img_path] for img_path in data_path]

    def __len__(self):
        return len(self.targets)

    def __getitem__(self, index):
        img_path = self.data[index]
        targets = self.labels[img_path]
        image = Image.open(os.path.join(self.root, img_path)).convert('RGB')
        image = self.transform(image)
        if self.mode == 0:
            return image, targets, index
        return image, targets


class Clothing1mDataloader:
    def __init__(self, batch_size=64, num_workers=8, root='~/data/clothing1m'):
        self.batch_size = batch_size
        self.num_workers = num_workers
        self.root = root

        self.transform_train = transforms.Compose([
            transforms.Resize(256),
            transforms.RandomCrop(224),
            transforms.RandomHorizontalFlip(),
            transforms.ToTensor(),
            transforms.Normalize((0.6959, 0.6537, 0.6371), (0.3113, 0.3192, 0.3214)),
        ])
        self.transform_test = transforms.Compose([
            transforms.Resize(256),
            transforms.CenterCrop(224),
            transforms.ToTensor(),
            transforms.Normalize((0.6959, 0.6537, 0.6371), (0.3113, 0.3192, 0.3214)),
        ])

    def train(self):
        transform = self.transform_train
        dataset = Clothing1m(mode=0, root=self.root, transform=transform)
        dataloader = DataLoader(dataset, batch_size=self.batch_size, shuffle=True,
                                num_workers=self.num_workers, pin_memory=True)
        return dataloader

    def val(self):
        dataset = Clothing1m(mode=1, root=self.root, transform=self.transform_test)
        dataloader = DataLoader(dataset, batch_size=self.batch_size, shuffle=False,
                                num_workers=self.num_workers, pin_memory=True)
        return dataloader

    def test(self):
        dataset = Clothing1m(mode=2, root=self.root, transform=self.transform_test)
        dataloader = DataLoader(dataset, batch_size=self.batch_size, shuffle=False,
                                num_workers=self.num_workers, pin_memory=True)
        return dataloader

依赖

torch                              2.3.1

标签:clothing1m,数据,self,transform,mode,使用,path,root,transforms
From: https://www.cnblogs.com/zh-jp/p/18442951

相关文章

  • 如何使用Cockpit服务
       Cockpit介绍自己是一个Web端的系统管理工具,只用鼠标点点就能管理系统,事实上也确实如此,我实际使用来说,启动Cockpit服务之后,只需要鼠标点点点就能完成系统很多基础操作,比如查看系统信息,启动/停止服务,新增或者更改账户,系统更新,Web终端及查看网络流量等功能。登录CentOS操作系......
  • 数据设计模式一般很抽象
      Java的设计模式和其他语言的编程开发设计模式通用。设计模式分为架构模式和程序开发的设计模式。系统的架构模式分为CS架构和BS架构。单机版本的系统架构模式是继承与C/C++的开发项目软件。C/C++擅长技术的底层实现。驱动软件和操作系统也是应用程序。基于操作系统可以运......
  • jsphealth59p27(程序+源码+数据库+调试部署+开发环境
    本系统(程序+源码+数据库+调试部署+开发)环境带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、课题背景随着生活节奏的加快和社会压力的增加,健康问题日益成为人们关注的焦点。无论是学校、社会还是家庭,都越来越重视身体健康,定期体检已成为......
  • TypeScript在Vue中的使用-------ref
    我们平时的写法import{ref}from"vue";constmsg=ref("你好世界");使用TS的写法import{ref}from"vue";constmsg=ref<string>("你好世界");listType表示数组里面放对象,我们可以用如下的方法进行调用typelistType={id:numbername:......
  • 《数据结构(刘大有)》学习(6)
    系列文章目录一、绪论二、顺序表、链表三、堆栈、队列四、数组五、字符串六、树目录树的基本概念树的定义树的特点树的相关术语度层数高度路径二叉树定义特点定理满二叉树定义特点完全二叉树定义特点二叉树的存储结构顺序存储结点结构优点缺点 链式存储 结点结构三......
  • 基于nodejs+vue学生网课学习数据分析与展示系统[开题+源码+程序+论文]计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展和全球疫情的持续影响,在线教育已成为教育领域的重要组成部分。各大教育平台纷纷推出网课服务,以满足广大学生在家学习的需求。然而,......
  • CSS弹性盒子(display:flex)使用技巧
    1.弹性盒模型简介FlexibleBox(伸缩盒模型,又称:弹性盒子)是W3C在2009年提出的一种新的盒子模型。通过display:flex;可以开启伸缩盒模型,将元素设置为伸缩容器,可以轻松的对元素进行布局。2.主轴与侧轴开启display:flex;的元素内的子元素会沿着主轴排列,主轴默认水平方向,......
  • 假设有一个client和server,要发送非常大的数据,如何设计数据的发送系统,如何保证数据发送
    目录数据发送系统的设计数据拆分与重组:负载均衡:水平扩展:异步处理:数据发送完整性的保证数据校验:加密与解密:数字签名:传输协议选择:异常处理与重试机制:日志记录与监控:使用netty怎么设计一、Netty框架简介二、数据传输系统设计三、数据完整性保证四、高并发优化示......
  • TypeScrip在vue中的使用----defineEmits
    向父元素发送消息之前的语法: 在TS语法中,我们既要对defineEmits做类型约束,又要对emits做类型约束。最主要是对defineEmits做一个泛型的约束。//在泛型对象中,有几个事件就写几个约束typeemitsType={//()中有n个参数,第一个固定的是e,其他有具体参数决定。具体的写法......
  • 数据库主从配置(超详细)
    1.什么是主从配置        主从配置是数据库的一种常见的数据库构架设计,目的是提高服务的可用性和扩展性等。通过将数据库分为主服务器、从服务器,实现数据的同步复制,极大的提高了安全性能。2.如何配置主从2.1节点规划ip主机节点192.168.119.214db1主节点192.168.119......