Я выполняю преобразования для изображений, как показано ниже (работает с 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, я также получаю ту же ошибку.