• ImageNet数据集用法


    1. 数据下载

    1.1 方法一:官网下载

    ImageNet​www.image-net.org/

    在官方网站注册账号,注册时最好使用教育邮箱(.edu )之后。按照流程申请,收到邮件之后可以就可以在 Download界面里下数据啦~
    推荐下载12年的数据,因为比较经典。不如果你如果凑巧财力雄厚,也可以考虑最顶上那个ImageNet21k,它相比12年的数据大的离谱。

    点进去之后,下载如下三个压缩包(图片分类任务用这三个足够了)

    1.2 方法二


    如果你觉得这么下不方便/网速太慢容易断,可以在这个网址自行找12年的版本下载(别全下了呀)

    ImageNet 10 图像识别数据集 - 数据集下载 - 超神经​hyper.ai/datasets/4889


    2. 数据解压

    下载完毕后把 Development kit 留着备用,我们会得到训练集与验证集的两个压缩包,分别是 ILSVRC2012_img_train.tarILSVRC2012_img_val.tar

    首先创建两个用于放训练集和测试集的文件夹,然后解压:

    1. mkdir train
    2. mkdir val
    3. tar xvf ILSVRC2012_img_train.tar -C ./train
    4. tar xvf ILSVRC2012_img_val.tar -C ./val

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

    1. dir=./train
    2. for x in `ls $dir/*tar` do
    3. filename=`basename $x .tar`
    4. mkdir $dir/$filename
    5. tar -xvf $x -C $dir/$filename
    6. done
    7. rm *.tar

    执行脚本之后,我们就获得了1000个文件夹和对应的图片数据啦~截至目前,我们已经把所有的 JPEG 图片搞了出来。


    3. 数据标签

    对于训练集,不同类别的数据躺在不同的文件夹里,用起来很方便(同一文件夹的视为一类)。但是验证集没有对应的标签,需要额外处理。

    验证集的标签在 Development kit (文件名为 ILSVRC2012_devkit_t12.tar.gz)中的ILSVRC2012_devkit_t12\data\ILSVRC2012_validation_ground_truth.txt 中:


    但是新的问题又来了,那就是这个数字和文件夹的名字虽然是一一对应的,但还是需要额外的映射……好在映射关系储存在和txt文件同目录下的 meta.mat 文件中。我们希望验证集的文件结构长得和训练集一样,即 :

    • /val
      • /n01440764
        • images
      • /n01443537
        • images


    因此,我们首先解压 devkit 压缩包,把我们需要的东西取出来:

    tar -xzf ILSVRC2012_devkit_t12.tar.gz


    之后,在imagenet目录(devkit和val的根目录下)创建并运行如下 python 脚本

    1. from scipy import io
    2. import os
    3. import shutil
    4. def move_valimg(val_dir='./val', devkit_dir='./ILSVRC2012_devkit_t12'):
    5. """
    6. move valimg to correspongding folders.
    7. val_id(start from 1) -> ILSVRC_ID(start from 1) -> WIND
    8. organize like:
    9. /val
    10. /n01440764
    11. images
    12. /n01443537
    13. images
    14. .....
    15. """
    16. # load synset, val ground truth and val images list
    17. synset = io.loadmat(os.path.join(devkit_dir, 'data', 'meta.mat'))
    18. ground_truth = open(os.path.join(devkit_dir, 'data', 'ILSVRC2012_validation_ground_truth.txt'))
    19. lines = ground_truth.readlines()
    20. labels = [int(line[:-1]) for line in lines]
    21. root, _, filenames = next(os.walk(val_dir))
    22. for filename in filenames:
    23. # val image name -> ILSVRC ID -> WIND
    24. val_id = int(filename.split('.')[0].split('_')[-1])
    25. ILSVRC_ID = labels[val_id-1]
    26. WIND = synset['synsets'][ILSVRC_ID-1][0][1][0]
    27. print("val_id:%d, ILSVRC_ID:%d, WIND:%s" % (val_id, ILSVRC_ID, WIND))
    28. # move val images
    29. output_dir = os.path.join(root, WIND)
    30. if os.path.isdir(output_dir):
    31. pass
    32. else:
    33. os.mkdir(output_dir)
    34. shutil.move(os.path.join(root, filename), os.path.join(output_dir, filename))
    35. if __name__ == '__main__':
    36. move_valimg()


    4. 用Pytorch加载


    使用 torchvision.datasets.ImageFolder() 就可以直接加载处理好的数据集啦!

    1. import os
    2. import torch
    3. import torchvision.datasets as datasets
    4. root = 'data/imagenet'
    5. def get_imagenet(root, train = True, transform = None, target_transform = None):
    6. if train:
    7. root = os.path.join(root, 'train')
    8. else:
    9. root = os.path.join(root, 'val')
    10. return datasets.ImageFolder(root = root,
    11. transform = transform,
    12. target_transform = target_transform)
  • 相关阅读:
    KF与EKF代码demo(几分钟就能让人人都会使用)
    信息化发展49
    20. 有效的括号
    TiO2包覆聚苯乙烯纳米杂化微球/超顺磁性Fe3O4/聚苯乙烯复合微球/纳米TiO2复合粒子的相关性能
    C2. Powering the Hero (hard version)
    HCIE-Security Day43:SSL 虚拟私有网络技术
    js运算符
    第一章 - Windows安装VMware Workstation Pro
    10个Pandas数据查询案例
    LeetCode 428. Serialize and Deserialize N-ary Tree【树,BFS,DFS】困难
  • 原文地址:https://blog.csdn.net/daodaipsrensheng/article/details/127751365