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

如何在PyTorch中加载Kaggle下载的ImageNet数据集?

解决Kaggle版ImageNet在PyTorch中的加载问题

问题背景

从Kaggle下载ImageNet数据集(原网站已无法获取)后,使用PyTorch官方的torchvision.datasets.ImageNet()加载时触发错误:

RuntimeError: The archive ILSVRC2012_devkit_t12.tar.gz is not present in the root directory or is corrupted. You need to download it externally and place it in

原因是Kaggle提供的ImageNet包不包含该devkit压缩包,且val文件夹的结构不符合PyTorch加载要求。

数据集目录结构

当前Kaggle下载的数据集目录如下:

/media/SSD2/ILSVRC/
                |----Annotation
                |----ImageSets
                |----Data
                      |----CLS-LOC
                               |----test
                                      |----ILSVRC2012_val_00000009.JPEG
                                      |----ILSVRC2012_val_00000010.JPEG
                                      |----...
                               |----train
                                      |----n01440764 # 类别文件夹
                                             |----ILSVRC2012_val_00000010.JPEG
                                             |----ILSVRC2012_val_00000010.JPEG
                                      |----n01443537
                                      |----...
                               |----val
                                      |----ILSVRC2012_val_00000009.JPEG
                                      |----ILSVRC2012_val_00000010.JPEG
                                      |----...

原尝试的加载代码

我之前使用的加载逻辑(带自定义数据变换):

加载代码

trainset = torchvision.datasets.ImageNet(root='path_to_dataset', split='train', download=False, transform=transform_train)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=bs, shuffle=True, num_workers=8)

自定义变换

transform_train = transforms.Compose([
    transforms.RandomCrop(32, padding=4),
    transforms.Resize(size),
    transforms.RandomHorizontalFlip(),
    transforms.ToTensor(),
    transforms.Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225)), 
])

解决步骤

1. 补充ILSVRC2012_devkit_t12.tar.gz

PyTorch的ImageNet数据集类依赖该devkit文件解析类别标签,需单独下载后放到数据集根目录(即/media/SSD2/ILSVRC/下),无需手动解压,torchvision会自动处理。

2. 调整val文件夹结构

Kaggle下载的val文件夹直接存放所有图片,而PyTorch要求val文件夹下按类别划分子目录。可通过以下脚本整理:

#!/bin/bash
# 切换到val目录(根据实际路径调整,示例:cd /media/SSD2/ILSVRC/Data/CLS-LOC/val)
cd val

# 从devkit读取标签映射,创建对应类别文件夹
while read line; do
    arr=($line)
    mkdir -p "${arr[1]}"
done < ../ILSVRC2012_devkit_t12/data/ILSVRC2012_validation_ground_truth.txt

# 读取图片列表,将图片移动到对应类别文件夹
while read line; do
    arr=($line)
    mv "${arr[0]}" "${arr[1]}"
done < ../ILSVRC2012_devkit_t12/data/ILSVRC2012_validation_image_list.txt

注意:执行脚本前需确保devkit已解压,或根据实际路径调整脚本中devkit文件的位置。

完成以上两步后,即可正常使用torchvision.datasets.ImageNet()加载数据集。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 16:30:03