Загрузка огромного набора данных изображений и некоторое увеличение данных с помощью Pytorch - PullRequest
0 голосов
/ 24 ноября 2018

У меня есть вопрос.У меня есть около 2 миллионов изображений (набор данных по стандарту place365), и я хочу сделать некоторые дополнения данных, такие как преобразование, обрезка и т. Д. Кроме того, я должен сделать свое собственное целевое изображение (y), например, на основе некоторых алгоритмов цветовой модели (CMYK).

Итак, на самом деле, мой шаг предварительной обработки включает в себя увеличение и создание изображения-тройки (y).И тогда я должен передать эти изображения в глубокую сеть.Когда я должен сделать это на основе Dataset класса?Должен ли я сделать мой шаг обработки в __getitem__()?Если да, будет ли это параллельно и быстро?

Вот мой шаблон Dataset(data.Dataset) класса:

import torch
from torch.utils import data

class Dataset(data.Dataset):
    """
    Return Dataset class representing our data set
    """
    def __int__(self, list_IDs, labels):
        """
        Initialize data set as a list of IDs corresponding to each item of data set and labels of each data

        Args:
            list_IDs: a list of IDs for each data point in data set
            labels: label of an item in data set with respect to the ID
        """

        self.labels = labels
        self.list_IDs = list_IDs

    def __len__(self):
        """
        Return the length of data set using list of IDs

        :return: number of samples in data set
        """
        return len(self.list_IDs)

    def __getitem__(self, item):
        """
        Generate one item of data set. Here we apply our preprocessing things like halftone styles and subtractive color process using CMYK color model etc. (See the paper for operations)

        :param item: index of item in IDs list

        :return: a sample of data
        """
        ID = self.list_IDs[item]

        # Code to load data
        X = None #

        # code to apply your custom function to make y image (time consuming task - some algorithms)
        y = None #

        return X, y

Спасибо за любой совет

С уважением

1 Ответ

0 голосов
/ 24 ноября 2018

Если вы посмотрите, например, torchvision.dataset.ImageFolder, вы увидите, что он работает очень похоже на ваш дизайн: в классе есть член transform, который перечисляет все виды дополнений (изменение размера, обрезка, переворачиваниеи т. д.), и они выполняются на изображениях методом __getitem__.
Что касается параллелизма, сам Dataset не является параллельным, но DataLoader может быть (см. num_workers аргумент), поэтому, если вы используете свой набор данных внутри параллельного загрузчика данных, вы получите параллелизм бесплатно, Круто!

...