Pytorch не может преобразовать np.ndarray типа numpy .object - PullRequest
2 голосов
/ 30 мая 2020

Я пытаюсь создать загрузчик данных PyTorch с переменным размером изображения. Вот фрагмент моего кода

def get_imgs(path_to_imgs):

    imgs = []
    for path in path_to_imgs:

        imgs.append(cv2.imread(path))

    imgs = np.asarray(imgs)    

    return imgs   

Функция выше берет список путей и загружает изображения из пути в список imgs. Кстати, изображения не одинакового размера. Список выглядит так: imgs = [NumPy массив, NumPy массив ....]. Однако, когда я конвертирую список в np.asarray, он превращает список в dtype = object.

Это мой класс загрузчика данных

class Dataset(torch.utils.data.Dataset):

  def __init__(self, path_to_imgs, path_to_label):
        'Initialization'
        self.path_to_imgs = path_to_imgs
        self.path_to_label = path_to_label

        self.imgs = get_imgs(path_to_imgs)
        self.label = get_pts(path_to_label)

        self.imgs = torch.Tensor(self.imgs)             **Error here
        # self.imgs = torch.from_numpy(self.imgs)       ** I tried this as well. Same error

        self.label = torch.Tensor(self.label)

        self.len = len(self.imgs)

  def __len__(self):
        'Denotes the total number of samples'
        return self.len

  def __getitem__(self, index):

        return self.imgs, self.label

Когда я пытаюсь преобразовать список изображений в tenor ** он не дает следующую ошибку:

не удается преобразовать np.ndarray типа numpy .object_. Поддерживаются только следующие типы: float64, float32, float16, int64, int32, int16, int8, uint8 и bool.

Я смотрел похожие вопросы здесь и здесь , но они не помогли.

1 Ответ

1 голос
/ 30 мая 2020
def get_imgs(path_to_imgs):

    imgs = []
    for path in path_to_imgs:
        imgs.append(torch.Tensor(cv2.imread(path)))

    return imgs
class Dataset(torch.utils.data.Dataset):
    def __init__(self, path_to_imgs, path_to_label):
        'Initialization'
        self.path_to_imgs = path_to_imgs
        self.path_to_label = path_to_label

        self.imgs = get_imgs(path_to_imgs)
        self.label = get_pts(path_to_label)

        # padding ops here (https://pytorch.org/docs/stable/nn.html#padding-layers)
        # for img in self.imgs:
        #     ...

        self.label = torch.Tensor(self.label)

        self.len = len(self.imgs)

    def __len__(self):
        'Denotes the total number of samples'
        return self.len

    def __getitem__(self, index):

        return self.imgs, self.label
...