Как связать ярлыки с изображениями и вставить их в функцию обучения в Pytorch? - PullRequest
0 голосов
/ 12 октября 2019

Я пытаюсь создать классификатор, который классифицирует изображения жестов на языке жестов. есть папка с подпапками следующим образом: 1) Поезд 2) Проверка 3) Тест

В каждой подпапке есть папки с именами от A до I. Эти имена папок являются метками для изображений в этих папках.

Я не совсем уверен, как можно связать эти ярлыки с изображениями и передать их в модель.

В большинстве документов Pytorch, размещенных в Интернете, используются встроенные наборы данных, а для кого-то, кто является новичком в этой области,трудно понять, что происходит за кулисами. Я читал о загрузчиках данных, наборах данных, ImageFolder. Я только недавно начал глубокое изучение, и разделение данных было легко в машинном обучении с использованием встроенных функций и столбцов панд, а не столько с изображениями.

Все, что я мог сделать, это эти две функции, но не знал, какперейти оттуда:

Первая функция - загружать обучающие картинки

    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 голосов
/ 14 октября 2019

Что касается меня, мне нравится писать загрузчик данных для себя, поскольку легко настроить процесс загрузки данных, что я действительно хочу.

Вот загрузчик данных, который я написал прежде, чтобы загрузить отдельные .npy файлы. в память как данные поезда / Eval. https://github.com/FesianXu/SkeletonGCN/blob/master/feeder/ntu_feeder.py

В этом коде мне нужно сначала подготовить индекс train / eval, я сохраню индексные файлы как .npy файлы и загружу их в __init__(), а затем __getitem__ метод может рассматриваться одинаково, независимо от того, проходите ли вы тренировку или оценку, так как вы уже сделали конкретный индекс. Для получения дополнительной информации, проверьте код и надеюсь, что вы, наконец, сможете узнать.

...