Google Colab中PyTorch ImageFolder加载RGB数据集报FileNotFoundError如何解决?
报错原因
- 核心触发原因:PyTorch的
ImageFolder数据集类默认会将传入的根目录下所有第一级子文件夹识别为分类类别。你使用的Colab运行环境会在操作目录下自动生成.ipynb_checkpoints隐藏缓存文件夹,该文件夹内仅存储笔记本缓存文件,没有符合要求的图片资源,因此触发报错。 - 额外潜在问题:你给出的灰度转RGB代码中,
RGBimg.save(filePath,format=jpeg)存在语法缺陷,jpeg作为格式字符串需要包裹引号,正确写法为format="jpeg",否则运行时会抛出变量未定义错误,若你之前运行转换代码未报错,说明你实际执行时已经修正了该问题。
解决方案
方案1:直接删除缓存文件夹
运行如下代码删除数据集目录下的缓存文件夹后,重新执行数据集加载逻辑即可:
import os import shutil dataset_root = "/content/drive/MyDrive/DatasetPersonale/" for split_dir in ["trainRGB", "validRGB"]: ckpt_dir = os.path.join(dataset_root, split_dir, ".ipynb_checkpoints") if os.path.exists(ckpt_dir): shutil.rmtree(ckpt_dir)
方案2:显式指定合法分类,过滤隐藏文件夹
创建ImageFolder时主动传入你需要的分类列表,避免自动识别到隐藏文件夹,适配性更强:
def get_valid_classes(root_path): # 仅返回不以.开头的文件夹作为合法分类 valid_classes = [] for dir_name in os.listdir(root_path): full_dir = os.path.join(root_path, dir_name) if os.path.isdir(full_dir) and not dir_name.startswith("."): valid_classes.append(dir_name) valid_classes.sort() # 保证类别顺序固定 return valid_classes image_datasets = {} for split in ["trainRGB", "validRGB"]: split_root = os.path.join("/content/drive/MyDrive/DatasetPersonale", split) target_classes = get_valid_classes(split_root) image_datasets[split] = datasets.ImageFolder( root=split_root, transform=data_transforms[split], classes=target_classes )
如果删除缓存文件夹后仍出现报错,可以再校验转换后的图片是否损坏,或者确认所有分类文件夹下都存在至少一张合法后缀的图片。
内容的提问来源于stack exchange,提问作者Matteo Forasassi
相关产品推荐
相关产品推荐

