ImageNet 数据集下载与处理(亲测 实用有效无坑版)

您所在的位置:网站首页 网盘下好了怎么解压 ImageNet 数据集下载与处理(亲测 实用有效无坑版)

ImageNet 数据集下载与处理(亲测 实用有效无坑版)

2024-07-11 12:13| 来源: 网络整理| 查看: 265

下载

通常下载方式有两种, 官网下载和第三方网站上传的资源下载。这里推荐第三方下载,因为官网可能会存在注册麻烦,网页卡顿的情况。 第三方下载方式如下: 里面包含几乎所有常用的ImageNet的数据集以及标注文件。 https://pan.baidu.com/s/1MEjNh6evha2hcdrQXjNv8w 提取码:yzza

处理

下载完毕后把 Development kit 留着备用,我们会得到训练集与验证集的两个压缩包,分别是 ILSVRC2012_img_train.tar 和 ILSVRC2012_img_val.tar。 分别将其解压到原文件夹(当然也可以自己新建文件夹)。

对于train的压缩包,解压之后其实还是1000个tar压缩包(对应1000个类别),需要再次解压,解压脚本unzip.sh如下(PS:可能需要自己改一下目录 dir ):(这里也可以用解压软件一键解压)

dir=./train for x in `ls $dir/*tar` do filename=`basename $x .tar` mkdir $dir/$filename tar -xvf $x -C $dir/$filename done rm *.tar

执行脚本之后,我们就获得了1000个文件夹和对应的图片数据了。 对于训练集,不同类别的数据躺在不同的文件夹里,用起来很方便(同一文件夹的视为一类)。但是验证集没有对应的标签,需要额外处理。 验证集的标签在 Development kit (文件名为 ILSVRC2012_devkit_t12.tar.gz)中的ILSVRC2012_devkit_t12\data\ILSVRC2012_validation_ground_truth.txt 中: 在这里插入图片描述 但是新的问题又来了,那就是这个数字和文件夹的名字虽然是一一对应的,但还是需要额外的映射……好在映射关系储存在和txt文件同目录下的 meta.mat 文件中。我们希望验证集的文件结构长得和训练集一样,即 : 在这里插入图片描述 因此,我们首先解压 ILSVRC2012_devkit_t12压缩包(与验证集在同一个文件夹下),把我们需要的东西取出来: 之后,在ILSVRC2012_devkit_t12和ILSVRC2012_img_val的根目录下创建并运行如下 python 脚本:

from scipy import io import os import shutil def move_valimg(val_dir='./ILSVRC2012_img_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()

然后就得到和训练集一样文件结构的验证集了。

有问题欢迎留言交流!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3