Проблема при загрузке изображений из папки «Обучение», имеющей только одну папку - PullRequest
0 голосов
/ 16 февраля 2019

Я пытаюсь запустить Сиамскую сеть, реализованную в Pytorch, для моего пользовательского набора данных.Ссылка на код Github: https://github.com/viral-parmar/Voice_Dissimilarity Когда я пытаюсь запустить код и указать путь к данным обучения, имеющим только одну папку с 10 изображениями.Часть кода, загружающая данные, занимает много времени выполнения и никогда не выполняется успешно.Но когда я указываю путь к тем же Учебным данным, которые теперь имеют около 25 папок, каждая из которых имеет 10 изображений, загрузочная часть выполняется успешно.Я не понимаю проблемы с кодом.

Я пробовал запустить его в Google Co Lab, а также на моем локальном компьютере, но результаты те же.

folder_dataset = dset.ImageFolder(root=Config.training_dir)

siamese_dataset = SiameseNetworkDataset(imageFolderDataset=folder_dataset,
                                    transform=transforms.Compose([transforms.Resize((100,100)),
                                                                  transforms.ToTensor()
                                                                  ])
                                   ,should_invert=False)

#Visualising some of the data
vis_dataloader = DataLoader(siamese_dataset,
                    shuffle=True,
                    num_workers=8,
                    batch_size=8)
dataiter = iter(vis_dataloader)


example_batch = next(dataiter)
concatenated = torch.cat((example_batch[0],example_batch[1]),0)
imshow(torchvision.utils.make_grid(concatenated))
print(example_batch[2].numpy())

Это занимает много времени и никогда не выполняется полностью.

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

Теперь я почти уверен, что это циклы while.в основном проверьте, есть ли в этих 10 изображениях оба класса или нет?если один и тот же класс для всех 10 изображений, цикл никогда не прервется.

        while True:
            #keep looping till the same class image is found
            img1_tuple = random.choice(self.imageFolderDataset.imgs) 
            if img0_tuple[1]==img1_tuple[1]:
                break
    else:
        while True:
            #keep looping till a different class image is found

            img1_tuple = random.choice(self.imageFolderDataset.imgs) 
            if img0_tuple[1] !=img1_tuple[1]:
                break
0 голосов
/ 17 февраля 2019

Так что я думаю, что num_workers=8 - это та часть, которая вызывает проблему.В основном накладные расходы на распространение занимают гораздо больше времени.Попробуйте изменить его на 1, т.е. num_workers=1 и запустить снова.Для 10 изображений вам не понадобится 8 ядер: P

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...