一、数据集下载
ImageNet2012: ISLVRC2012
ILSVRC 2012
Note:数据集下载需要注册学生账号。此外,可以使用迅雷会员下载,一个晚上就可以下载完成
二、数据集处理
2.1 训练集处理
ILSVRC2012_img_train.tar包含1000个小的tar压缩包,每个tar对应一类图片,压缩包的名称就代表这一类。首先将tar解压到指定文件夹
mkdir ILSVRC2012_img_train
tar xvf ILSVRC2012_img_train.tar -C ILSVRC2012_img_train
cd ILSVRC2012_img_train
接着,提取ILSVRC2012_img_train目录中的各个子tar文件,可以在目录中使用如下脚本处理:
for f in *.tar; do
d=`basename $f .tar`
mkdir $d
tar xf $f -C $d
done
脚本是通过
touch unzip.sh
生成脚本文件,可以使用vim写入,最后执行bash ./unzip.sh
。
处理完成后可以使用rm *.tar
将子tar文件删除。
处理完成后如下图所示:
Training Dataset
2.2 验证集处理
验证集包含5W张图片,直接对tar文件进行解压即可。
mkdir ILSVRC2012_img_val
tar xvf ILSVRC2012_img_val.tar -C ILSVRC2012_img_val
如果需要将val进行分类,也就是不同类别图片放到不同文件夹中,需要额外执行以下命令:
# 1.获取分类脚本
cd ILSVRC2012_img_val
wget https://raw.githubusercontent.com/soumith/imagenetloader.torch/master/valprep.sh
# 2.执行脚本进行分类
bash ./valprep.sh
# 3.删除脚本
rm valprep.sh
# 分类之后的验证集结构
# imagenet/ILSVRC2012_img_val/
# ├── n01440764
# │ ├── ILSVRC2012_val_00000293.JPEG
# │ ├── ILSVRC2012_val_00002138.JPEG
# │ ├── ......
# ├── ......
三、加载数据集
from torchvision import datasets
# args.data = "ILSVRC2012_img_"
traindir = args.data + "train"
valdir = args.data + "val"
normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406],
std=[0.229, 0.224, 0.225])
train_dataset = datasets.ImageFolder(
traindir,
transforms.Compose([
transforms.RandomResizedCrop(224),
transforms.RandomHorizontalFlip(),
transforms.ToTensor(),
normalize,
]))
val_dataset = datasets.ImageFolder(
valdir,
transforms.Compose([
transforms.Resize(256),
transforms.CenterCrop(224),
transforms.ToTensor(),
normalize,
]))
train_loader = torch.utils.data.DataLoader(
train_dataset, batch_size=batch_size, shuffle=True,
num_workers=workers, pin_memory=True)
val_loader = torch.utils.data.DataLoader(
val_dataset, batch_size=batch_size, shuffle=False,
num_workers=workers, pin_memory=True)