如何对Kaggle下载的CelebA压缩包应用torchvision图像变换
问题原因
- PyTorch内置的
CelebA数据集类的root参数要求传入解压后数据集存放的上层文件夹路径,不支持直接传入压缩包路径,直接传入archive_celeba.zip会导致类无法定位到数据集文件,触发报错。 - 下载的CelebA压缩包解压后的目录结构,和
torchvision.datasets.CelebA要求的官方结构不匹配,也是触发报错的常见原因。CelebA类要求的目录结构如下:
你指定的root文件夹/ └── celeba/ ├── img_align_celeba/ # 存放所有人脸图片 ├── list_attr_celeba.txt ├── list_bbox_celeba.txt ├── list_landmarks_align_celeba.txt └── list_eval_partition.txt
解决方法
方案1:适配CelebA类的结构要求(需要用到CelebA属性标注时选这个)
- 解压下载的
archive_celeba.zip,将解压得到的所有文件和文件夹,放到新建的celeba子文件夹内 - 将这个
celeba子文件夹放到一个单独的上层目录下,比如./local_celeba_data - 调整加载代码如下:
from torchvision import transforms from torchvision.datasets import CelebA celeba_transforms = transforms.Compose([ transforms.CenterCrop(140), transforms.Resize([64, 64]), transforms.ToTensor() ]) # root传入上层目录路径,不是压缩包路径也不是celeba子文件夹路径 dataset = CelebA( root='./local_celeba_data', split='train', download=False, transform=celeba_transforms )
方案2:用ImageFolder直接加载图片(不需要属性标注时选这个,更简单)
如果不需要用到CelebA自带的人脸属性、 bounding box等标注,直接用ImageFolder加载图片文件夹即可自动应用你定义的变换:
- 解压
archive_celeba.zip,找到存放所有图片的img_align_celeba文件夹路径 - 加载代码如下:
from torchvision import transforms from torchvision.datasets import ImageFolder celeba_transforms = transforms.Compose([ transforms.CenterCrop(140), transforms.Resize([64, 64]), transforms.ToTensor() ]) dataset = ImageFolder( root='解压后的img_align_celeba文件夹的上层目录路径', transform=celeba_transforms )
内容的提问来源于stack exchange,提问作者Lucian
相关产品推荐
相关产品推荐

