数据集,数据加载(基于dataset,dataloader)

从文件夹中加载Dataset


import torch.utils.data as data
from PIL import Image
import os


def default_loader(path):
    return Image.open(path).convert('RGB')
##type(return):<class 'PIL.Image.Image'>

IMG_EXTENSIONS = [
    '.jpg', '.JPG', '.jpeg', '.JPEG',
    '.png', '.PNG', '.ppm', '.PPM', '.bmp', '.BMP',
]

def is_image_file(filename):
    return any(filename.endswith(extension) for extension in IMG_EXTENSIONS)


#返回每个图像文件的路径(list)
def make_dataset(dir):
    images = []         #images保存图片文件的路径(不只是名字)
    assert os.path.isdir(dir), '%s is not a valid direntory' % dir

    # os.wark()方法
    # https://blog.csdn.net/weixin_44887621/article/details/118810180
    # os.wark()实际返回产生生成器<class 'generator'>
    # sorted(os.wark())返回有若干三元组组成的list
    # sorted()保证每次数据顺序一样
    for root, dirs, files in sorted(os.walk(dir)):
        for fname in files:
            if is_image_file(fname):
                path = os.path.join(root,fname)
                images.append(path)

    return images



class ImageFolder(data.Dataset):

    def __init__(self, root='makeup', transform=None,return_path=False,
                 loder=default_loader):
        imgs = sorted(make_dataset(root))
        if len(imgs) == 0:
            raise(RuntimeError("Found 0 image in:" + root + "\n"
                               "Supported image extensions are:" +
                               ",".join(IMG_EXTENSIONS)))
        self.root = root
        self.imgs = imgs
        self.transform = transform
        self.return_path = return_path
        self.loader = default_loader

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

        def __getitem__(self,index):
            path = self.imgs[index]
            img = self.loader(path)
            if self.transform is not None:
                img = self.transform(img)
            if self.return_path:
                return img, path
            else:
                return img

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值