我目前基于Windows 10,Jupyter Notebook,Pytorch 1.0,Python 3.6.x。
首先,我使用以下代码确认文件的正确路径:print(os.listdir('./Dataset/images/'))
。
我可以检查此路径是否正确。
但我遇到了Error:
RuntimeError:在./Dataset/images/的子文件夹中找到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)
答案 0 :(得分:1)
使用celebA时遇到了相同的问题,包括200,000张图像。我们可以看到有很多图像。但是在很小的样本情况下(我尝试了20张图像),我检查了该错误不会出现,这意味着我们可以成功读取图像。 但是,当数目增加时,我们应该使用其他方法。
我根据这个网站解决了这个问题。感谢 QimingChen Github solution
简单地在原始文件夹中添加另一个名为1 (/ train / ---> train / 1 /)的文件夹将使我们的程序可以正常运行,无需进行更改路径。这是因为当面对大型数据集时,图像应按不同类别的子文件夹分类。
有关Github的原始答案:
比方说,我要使用ImageFolder(“ / train / ”)来阅读文件夹训练中的jpg文件。 文件结构是 /培养/ -1.jpg -2.jpg -3.jpg
我无法加载它们,导致出现错误: RuntimeError:在./data的子文件夹中找到0个图像 支持的图像扩展名是.jpg,.JPG,.jpeg,.JPEG,.png,.PNG,.ppm,.PPM,.bmp,.BMP
我阅读了上面的解决方案,并尝试了数十次。当我将结构更改为 / train / 1 /
-1.jpg -2.jpg -3.jpg
但是读入的代码仍然是-ImageFolder(“ / train /”),可以正常工作。
该程序似乎倾向于递归读取文件,这在某些情况下很方便。
希望这会有所帮助!
答案 1 :(得分:0)
请参阅ImageFolder
数据集的文档,以了解此数据集类如何期望根据图像类将图像组织在“ ./Dataset/images”下的子文件夹中。确保您的图像遵守此顺序。
答案 2 :(得分:0)
根据pytorch中DataLoader的规则,您应该选择图像路径的上级路径。这意味着,如果图像位于'./Dataset/images/'
中,则数据加载器的路径应改为'./Dataset'
。我希望它可以解决您的错误。:)
答案 3 :(得分:0)
显然,解决方案是使图片名称为字母数字。它们可能是另一种解决方案,但这是可行的。
答案 4 :(得分:0)
您可以修改ImageFolder类以直接进入根文件夹(不包含子文件夹):
2.md
我们调用make_dataset方法来收集文件:
1.md
所有操作都在包含os.walk的循环中进行。在这里,文件是从“根”目录收集的,我们将其指定为包含文件的目录。
答案 5 :(得分:-2)
您可以发布文件的结构吗?在您的情况下,应该是:
img_dir
|_class1
|_a.jpg
|_b.jpg
|_class2
|_a.jpg
|_b.jpg
...