Mac 系统下载 & 解压 ImageNet-1k(ILSVRC2012、IN1K)数据集
1.下载方式
- 方式1
- 直接在ImageNet-1k官网进行下载,但是需要使用.edu学校的邮箱注册账号才可以,比较麻烦。
- 训练集
-
下载地址:http://www.imagenet.org/challenges/LSVRC/2012/dd31405981ef5f776aa17412e1f0c112/ILSVRC2012_img_train.tar
-
- 验证集
-
下载地址:http://www.image-net.org/challenges/LSVRC/2012/dd31405981ef5f776aa17412e1f0c112/ILSVRC2012_img_val.tar
-
- 方式2
-
直接使用迅雷种子下载,train大概需要8-10小时,val大概需要1小时左右。
-
训练集
-
种子: http://academictorrents.com/download/a306397ccf9c2ead27155983c254227c0fd938e2.torrent
-
-
验证集
-
种子: http://academictorrents.com/download/5d6d0df7ed81efd49ca99ea4737e0ae5e3a5f2e5.torren
-
-
下载好之后,使用下述指令进行数据校验,大概需要5-10分钟左右。
md5sum ILSVRC2012_img_val.tar ILSVRC2012_img_train.tar ## 如果数据没问题,应该输出下述: 29b22e2961454d5413ddabcf34fc5622 ILSVRC2012_img_val.tar 1d675b47d978889d74fa0da5fadfb00e ILSVRC2012_img_train.tar
2.解压方式
- 训练集train
-
将ILSVRC2012_img_train.tar解压,1000个类别的*.tar包
-
大概有150G左右,提前准备好内存空间
-
使用下述指令即可
mkdir train tar -xvf ILSVRC2012_img_train.tar -C train
-
使用下述脚本,将训练集的1000个.tar包解压缩,并删除源.tar包
import glob import os filelist = glob.glob('./train/*.tar') for f in filelist: os.system("mkdir ./train/" + os.path.split(f)[-1].split('.')[0]) for f in filelist: os.system("tar -xvf " + f + " -C ./train/" + os.path.split(f)[-1].split('.')[0]) for f in filelist: os.system("rm ./train/" + os.path.split(f)[-1])
-
使用下列指令,进行验证
cd train ls -lR|grep "^d"|wc -l. ## 解压成功的话,应该输出 1000 ls -lR|grep "^-"|wc -l ## 解压成功的话,应该输出 1281167
- 验证集val
-
将ILSVRC2012_img_val.tar解压
-
使用下述指令即可
mkdir val tar xvf ILSVRC2012_img_val.tar -C ./val
-
此时 val 目录下是50000张图像,并没有被分类到1000个文件夹下。因此需要将验证集中的图像进行分类存放。执行命令,解压ILSVRC2012_devkit_t12.tar.gz这个文件:
tar -xzf ILSVRC2012_devkit_t12.tar.gz
-
最后,使用下述脚本,将验证集的1000个.tar包解压缩,并删除源.tar包
from scipy import io import os import shutil def move_valimg(val_dir='./val', devkit_dir='./ILSVRC2012_devkit_t12'): """ move valimg to correspongding folders. val_id(start from 1) -> ILSVRC_ID(start from 1) -> WIND organize like: /val /n01440764 images /n01443537 images ..... """ # load synset, val ground truth and val images list synset = io.loadmat(os.path.join(devkit_dir, 'data', 'meta.mat')) ground_truth = open(os.path.join(devkit_dir, 'data', 'ILSVRC2012_validation_ground_truth.txt')) lines = ground_truth.readlines() labels = [int(line[:-1]) for line in lines] root, _, filenames = next(os.walk(val_dir)) for filename in filenames: # val image name -> ILSVRC ID -> WIND val_id = int(filename.split('.')[0].split('_')[-1]) ILSVRC_ID = labels[val_id-1] WIND = synset['synsets'][ILSVRC_ID-1][0][1][0] print("val_id:%d, ILSVRC_ID:%d, WIND:%s" % (val_id, ILSVRC_ID, WIND)) # move val images output_dir = os.path.join(root, WIND) if os.path.isdir(output_dir): pass else: os.mkdir(output_dir) shutil.move(os.path.join(root, filename), os.path.join(output_dir, filename)) if __name__ == '__main__': move_valimg()
3.总结
- 完成上述操作后,就成功解压。
- 可能会遇到如下所示的,基本上都是因为内存不够导致的。