【Pytorch】18.创建自定义数据集并根据文件名或对应文件名的文本文件获取labels

源码

MNIST_Training_By_FileName_Dataset
MNIST_Training_By_TXTLabel

简介

本文主要探讨两种不同的数据集获取labels的方法

  • 根据图片的文件名中获取文件标签
    在这里插入图片描述

  • 根据与图片名称相同的.txt文件获取文件名
    在这里插入图片描述

根据图片名称获取labels

主要的区别在__init__方法中

    def __init__(self, root_path, train, transform=None):
        self.root_path = root_path
        self.transform = transform
        if train:
            self.root_path = os.path.join(self.root_path, 'training')
        else:
            self.root_path = os.path.join(self.root_path, 'testing')

        self.img_paths = []
        self.labels = []
        for label_path in os.listdir(self.root_path):
            img_path = os.path.join(self.root_path, label_path)
            if os.path.isdir(img_path):
                for img in os.listdir(img_path):
                    # 使用正则获取图片名称中的信息
                    match = re.search(r'_(\d+)', img)
                    label = match.group(1)
                    # print(f'label: {label}')
                    pre_img_path = os.path.join(img_path, img)
                    self.img_paths.append(pre_img_path)
                    self.labels.append(label)

我们可以看到在我们获取图片名称后,我们需要使用正则化来提取文件名中含有的label:xxx_0.png

根据txt文件获取labels

主要的区别在__getitem__方法


    def __getitem__(self, index):
        # ../datasets/mnist_png/training/.../1.png
        img = self.imgs[index]

        # 仅获取文件名
        # 1.png
        img_name = os.path.basename(img)
        img = Image.open(img).convert('L')
        if self.transform is not None:
            img = self.transform(img)
        # ../datasets/mnist_png/labels/1.txt
        label_dir = os.path.join(self.label_path, img_name.replace('.png', '.txt'))
        # 从文件中获取内容
        with open(label_dir, 'r') as f:
            label = f.read().strip()
        return img, label

  1. 我们需要现根据图片的相对路径通过os.path.basename来获取文件名
  2. 然后根据图片名使用img_name.replace来将.png换成.txt然后在对应的labels文件夹下找到对应名称的文件来获取标签
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值