Получение 5 случайных урожаев - TypeError: рис должен быть PIL Image или ndarray. Получил <тип "кортеж"> - PullRequest
1 голос
/ 24 марта 2019

Я выполняю преобразования для изображений, как показано ниже (работает с RandCrop): (именно из этого сценария загрузчика данных: https://github.com/jeffreyhuang1/two-stream-action-recognition/blob/master/dataloader/motion_dataloader.py)

def train(self):
training_set = motion_dataset(dic=self.dic_video_train, in_channel=self.in_channel, root_dir=self.data_path,
mode=‘train’,
transform = transforms.Compose([
transforms.Resize([256,256]),
transforms.FiveCrop([224, 224]),
#transforms.RandomCrop([224, 224]),
transforms.ToTensor(),
#transforms.Normalize([0.5], [0.5])
]))
print ‘==> Training data :’,len(training_set),’ videos’,training_set[1][0].size()

    train_loader = DataLoader(
        dataset=training_set, 
        batch_size=self.BATCH_SIZE,
        shuffle=True,
        num_workers=self.num_workers,
        pin_memory=True
        )

    return train_loader

Но когда я пытаюсь получить Five Crops, я получаю эту ошибку:

Traceback (most recent call last):
File “motion_cnn.py”, line 267, in 
main()
File “motion_cnn.py”, line 51, in main
train_loader,test_loader, test_video = data_loader.run()
File “/media/d/DATA_2/two-stream-action-recognition-master/dataloader/motion_dataloader.py”, line 120, in run
train_loader = self.train()
File “/media/d/DATA_2/two-stream-action-recognition-master/dataloader/motion_dataloader.py”, line 156, in train
print ‘==> Training data :’,len(training_set),’ videos’,training_set[1][0].size()
File “/media/d/DATA_2/two-stream-action-recognition-master/dataloader/motion_dataloader.py”, line 77, in getitem
data = self.stackopf()
File “/media/d/DATA_2/two-stream-action-recognition-master/dataloader/motion_dataloader.py”, line 51, in stackopf
H = self.transform(imgH)
File “/media/d/DATA_2/two-stream-action-recognition-master/venv/local/lib/python2.7/site-packages/torchvision/transforms/transforms.py”, line 60, in call
img = t(img)
File “/media/d/DATA_2/two-stream-action-recognition-master/venv/local/lib/python2.7/site-packages/torchvision/transforms/transforms.py”, line 91, in call
return F.to_tensor(pic)
File “/media/d/DATA_2/two-stream-action-recognition-master/venv/local/lib/python2.7/site-packages/torchvision/transforms/functional.py”, line 50, in to_tensor
raise TypeError(‘pic should be PIL Image or ndarray. Got {}’.format(type(pic)))
TypeError: pic should be PIL Image or ndarray. Got <type ‘tuple’>

Получая 5 случайных обрезок, я должен обработать кортеж изображений вместо изображения PIL - поэтому я использую Lambda, но затем получаю ошибку, в строке 55, в stackopf поток [2 * (j),:,:] = H

RuntimeError: expand (torch.FloatTensor {[5, 1, 224, 224]}, размер = [224, 224]): количество предоставленных размеров (2) должно быть больше или равно число измерений в тензоре (4)

и когда я пытаюсь установить flow = torch.FloatTensor (5, 2 * self.in_channel, self.img_rows, self.img_cols)

Я получаю motion_dataloader.py ", строка 55, в stackopf поток [:, 2 * (j),:,:] = H

RuntimeError: expand (torch.FloatTensor {[5, 1, 224, 224]}, размер = [5, 224, 224]): количество предоставленных размеров (3) должно быть больше или равно на количество измерений в тензоре (4)

, когда я умножаю размер полученной партии на 5, я также получаю ту же ошибку.

...