"RuntimeError: Found 0 files in subfolders of "..有关 Pytorch 中的子文件夹的错误



我目前基于Window 10、Jupyter Notebook、Pytorch 1.0、Python 3.6.x。

首先,我使用以下代码确认文件的正确路径:print(os.listdir('./Dataset/images/'))

我可以检查一下这个路径是否正确。

但我遇到了错误:

RuntimeError:在的子文件夹中找到0个文件/数据集/图像/支持的扩展名有:.jpg、.jpeg、.png、.ppm、.bmp、.pgm、.tif">

怎么了?你能提出一个解决方案吗?

我试着用这种方法./dataset/1/images。但结果是一样的。。。。

img_dir = './Dataset/images/'
img_data = torchvision.datasets.ImageFolder(os.path.join(img_dir), transforms.Compose([
transforms.Scale(256),
transforms.RandomResizedCrop(224),
transforms.RandomHorizontalFlip(),
transforms.ToTensor(),
]))
img_batch = data.DataLoader(img_data, batch_size=batch_size,
shuffle = True, drop_last=True)

我在使用celebA时遇到了同样的问题,包括200000张图片。正如我们所看到的,有很多图像。但在一个小样本的情况下(我尝试了20张图像),我检查了一下,错误不会出现,这意味着我们可以成功读取图像。但当这个数字增长时,我们应该使用其他方法。

我根据这个网站解决了这个问题。感谢QimingChenGithub解决方案

简单地说,在原始文件夹中添加另一个名为1(/train/-->train/1/)的文件夹将使我们的程序能够工作,而不会更改路径。这是因为当面对大型数据集时,图像应该在不同类的子文件夹中进行排序。

Github上的原始答案:

假设我将使用ImageFolder(">/train/")读取文件夹train中的jpg文件。文件结构为/列车/--1.jpg--2.jpg--3.jpg

我未能加载它们,导致出现错误:RuntimeError:在的子文件夹中找到0个图像/数据支持的图像扩展名有:.jpg、.jpg、.jpeg、.jpeg、.png、.png、.ppm、.ppm、.bmp、.bmp

我阅读了上面的解决方案,并尝试了几十次。当我将结构更改为/train/1/

--1.jpg--2.jpg--3.jpg

但读入的代码仍然是-ImageFolder("/train/"),它起作用。

程序似乎倾向于递归地读取文件,这在某些情况下很方便。

希望这会有所帮助!!

你能公布你的文件结构吗?在你的情况下,它应该是:

img_dir
|_class1
|_a.jpg
|_b.jpg
|_class2
|_a.jpg
|_b.jpg
...

根据pytorch中DataLoader的规则,您应该选择映像路径的上级路径。这意味着,如果您的图像位于'./Dataset/images/'中,则数据加载程序的路径应改为'./Dataset'。我希望它能修复你的错误。:)

您可以修改ImageFolder类以直接进入根文件夹(不包含子文件夹):

class ImageFolder(Dataset):
def __init__(self, root, transform=None):
#Call make_dataset to collect files. 
self.samples = make_dataset(opt.dataroot)
self.imgs = self.samples
self.transformA = transformA
...

我们调用make_dataset方法来收集我们的文件:

def make_dataset(dir):
import os
images = []
d = os.path.expanduser(dir)
if not os.path.exists(dir):
print('path does not exist')
for root, _, fnames in sorted(os.walk(d)):
for fname in sorted(fnames):
path = os.path.join(root, fname)
images.append(path)
return images    

所有操作都发生在包含os.walk的循环中。在这里,文件是从"根"目录收集的,我们将其指定为包含文件的目录。

请参阅ImageFolder数据集的文档,了解该数据集类如何将图像组织到`下的子文件夹中/数据集/图像'根据图像类。请确保您的图像符合此顺序。

显然,解决方案只是将图片名称设置为字母数字。它们可能是另一种解决方案,但这是可行的。

相关内容

最新更新