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

Torchvision加载CelebA数据集时无法识别已存在的下载文件夹问题

报错核心原因

torchvision内置的CelebA数据集加载逻辑,会同时校验图片文件、标注文件、属性文件、边界框文件、分区文件共5类资源的完整性和MD5值,哪怕图片下载完成,只要其余任意一类文件缺失、下载不完整、校验失败,都会触发该报错。
国内网络环境下该问题高发:CelebA默认的谷歌云盘下载源被墙,通常只有图片分片能下载成功,其余元数据文件下载中断后,残留的不完整文件不会被自动清理,后续就算重新设置download=True,代码也会跳过已存在的不完整文件,始终无法通过校验。

解决方案

方案1:手动补全所有所需文件

在你设置的root目录下新建celeba文件夹,将以下所有资源放入该文件夹即可:

  • 已下载完成的img_align_celeba图片文件夹
  • 5个元数据文件:list_attr_celeba.txt、list_bbox_celeba.txt、list_landmarks_align_celeba.txt、list_eval_partition.txt、identity_CelebA.txt
    所有元数据文件可从CelebA官方站点或国内镜像站下载,无需额外解压,直接放入对应目录即可。

方案2:自定义数据集类跳过元数据校验

如果训练只需要用到图片,不需要属性、标注等元数据,可以自定义轻量数据集类直接加载图片,完全避开官方CelebA类的校验逻辑,示例代码如下:

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

class CustomCelebA(Dataset):
    def __init__(self, img_dir, transform=None):
        self.img_dir = img_dir
        self.img_list = [f for f in os.listdir(img_dir) if f.endswith('.jpg')]
        self.transform = transform

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

    def __getitem__(self, idx):
        img_path = os.path.join(self.img_dir, self.img_list[idx])
        img = Image.open(img_path).convert('RGB')
        if self.transform:
            img = self.transform(img)
        return img

# 调用示例
celeba_transforms = transforms.Compose([
    transforms.CenterCrop(140),
    transforms.Resize([64, 64]),
    transforms.ToTensor()
])
dataset = CustomCelebA(img_dir="你的img_align_celeba文件夹完整路径", transform=celeba_transforms)

方案3:代理环境下重新下载完整数据集

如果需要使用官方CelebA类的所有功能,可以先配置全局代理,删除root目录下所有已下载的CelebA相关文件,重新运行带download=True参数的代码,确保所有资源完整下载并通过校验。

内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 07:36:02