You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

torchvision.datasets.ImageFolder()加载图片报错[Errno 20] Not a directory求助

问题根因

  • 报错核心是torchvision.datasets.ImageFolder的root参数要求传入文件夹路径,但你实际运行时传入的是单张图片路径/Users/___/Desktop/stylegan/images/anonym.4.jpg,系统扫描路径时发现目标是文件不是文件夹,因此抛出NotADirectoryError。
  • PIL的Image.open本身接受单张图片路径作为输入,和ImageFolder的参数要求完全不同,因此测试单张路径可读取不代表符合数据集加载工具的要求。
  • 你贴出的代码和实际运行的代码存在不一致:你贴出的代码中root赋值为/Users/____/Desktop/stylegan/images,但报错堆栈显示实际运行时root被赋值为单张图片路径,优先排查是否修改代码后未保存、或运行的是历史版本脚本。

解决步骤

方案1:调整目录结构适配ImageFolder

ImageFolder要求数据集必须按「分类子文件夹」的结构存放,格式如下:

<root目录>
├── 类别1文件夹
│   ├── 图片1.jpg
│   ├── 图片2.jpg
│   └── ...
├── 类别2文件夹
│   ├── 图片1.jpg
│   ├── 图片2.jpg
│   └── ...
└── ...

如果所有图片属于同一类别,在/Users/____/Desktop/stylegan/images下新建一个子文件夹(比如命名为default_class),把所有图片移动到这个子文件夹内即可。

方案2:无需分类子文件夹的替代加载方式

如果不想调整目录结构,可以直接自定义简单的数据集类加载图片,示例代码如下:

import os
from PIL import Image
from torch.utils.data import Dataset

class CustomImageDataset(Dataset):
    def __init__(self, img_dir, transform=None):
        self.img_dir = img_dir
        self.transform = transform
        self.img_paths = [os.path.join(img_dir, f) for f in os.listdir(img_dir) if f.lower().endswith(('.png', '.jpg', '.jpeg'))]

    def __len__(self):
        return len(self.img_paths)

    def __getitem__(self, idx):
        img_path = self.img_paths[idx]
        image = Image.open(img_path).convert("RGB")
        if self.transform:
            image = self.transform(image)
        # 单类别默认返回标签0,多类别可自行调整逻辑
        return image, 0

# 调用方式
train_ds = CustomImageDataset(img_dir="/Users/____/Desktop/stylegan/images", transform=transform_ds)

内容的提问来源于stack exchange,提问作者aidan.goetzinger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 06:12:02