如何将标签链接到图片并将其输入到Pytorch中的训练功能中?

时间:2019-10-12 04:21:50

标签: python deep-learning pytorch

我正在尝试建立一个对手语手势图像进行分类的分类器。具有带有子文件夹的文件夹,如下所示 1)火车 2)验证 3)测试

每个子文件夹都有名为A到I的文件夹。这些文件夹名称是这些文件夹中图片的标签。

我不确定如何将这些标签链接到图片并将其输入模型。

大多数Pytorch在线文档使用内置的数据集,对于该领域的新手来说,很难理解幕后发生的事情。我已经阅读了有关数据加载器,数据集,ImageFolder的信息。我最近才开始深度学习,并且使用内置函数和pandas列在机器学习中拆分数据非常容易,而对于图片则不是如此。

我能做的就是那两个功能,但不确定如何从那里继续:

第一个功能是加载训练图片

    data_path = 'C:/Users/.../Train/'
    train_dataset = torchvision.datasets.ImageFolder(
        root=data_path,
        transform=torchvision.transforms.ToTensor()
    )
    train_loader = torch.utils.data.DataLoader(
        train_dataset,
        batch_size=10,
        num_workers=0,
        shuffle=True
    )
    return train_loader

第二个功能是从一个特定文件夹中的图片名称中提取标签,文件名具有uselessinfo_letter_uselessnumbers的约定

import os
data_path = r"C:\Users...\small_sample"
labels = []
for img_filename in os.listdir(data_path):
    if img_filename.endswith(".jpg"):
        useless1, letter, useless2 = img_filename.split('.')[0].split('_')
        labels.append(letter)

我正在寻找一个train_loader,我想train_loader将同时具有图片的张量格式及其标签。

输入

for i, data in enumerate(train_loader, 0):
            # Get the inputs
            inputs, labels = data
            labels = normalize_label(labels) # Convert labels to 0/1
            # Zero the parameter gradients
            optimizer.zero_grad()
            # Forward pass, backward pass, and optimize
            outputs = net(inputs)
            loss = criterion(outputs, labels.float())
            loss.backward()
            optimizer.step()

1 个答案:

答案 0 :(得分:0)

对于我来说,我喜欢为自己编写数据加载器,因为很容易自定义真正想要的数据加载过程。

这是我之前写的一个数据加载器,用于将分离的.npy文件作为火车/评估数据加载到内存中。 https://github.com/FesianXu/SkeletonGCN/blob/master/feeder/ntu_feeder.py

在此代码中,我首先需要准备火车/评估索引,将索引文件另存为.npy文件,然后将其加载到__init__()中,然后再将{{1} }方法无论您是在接受培训还是在评估中,都可以被视为相同,因为您已经制定了特定的索引。有关更多信息,请检查代码,并希望您最终能找到答案。