数据资源-ImageNet数据集解析及分享

AI研习图书馆,发现不一样的世界

数据资源-ImageNet数据集解析及分享

ILSVRC2012数据解析

数据资源-ImageNet数据集解析及分享

简介

数据资源-ImageNet数据集解析及分享

ILSVRC2012数据集,即大名鼎鼎ImageNet2012竞赛的数据集,在图像分类数据集中属于最常用的跑分数据集和预训练数据集。

本文主要介绍该数据集的具体结构、数据使用方法,以及一些数据处理代码。

主要内容可以参考ILSVRC2012_devkit_t12.gzreadme.txt和中文翻译版

为了给大家提供便利,数据集已保存至百度网盘,公众号后台回复“ILSVRC2012”,即可获取下载链接~

数据集解析

下载的文件主要包括以下几个文件:

ILSVRC2012_img_train.tar

ILSVRC2012_img_val.tar

ILSVRC2012_img_test.tar

ILSVRC2012_devkit_t12.gz

前三个为图像压缩包,分别对应train / val / test三个子集。最后一个为数据说明相关文档。

下载地址可以参考imagenet2012数据集下载直接用迅雷下载,或参考Imagenet 完整数据集下载通过种子下载。

train数据

ILSVRC2012_img_train.tar

该文件中有1000个tar压缩包,分别对应1000个类别。每个tar解压后得到对应类别的图片。可以使用一个简单的python程序或shell脚本将数据分别压缩至对应名称的文件夹中。将1000个tar解压至traintar文件夹中,创建train文件夹,将对应图片解压至相应的文件夹中。

python脚本如下:

def un_tar(file_name, output_root='train'):
    # untar zip file to folder whose name is same as tar file
    tar = tarfile.open(file_name)
    names = tar.getnames()

    file_name = os.path.basename(file_name)
    extract_dir = os.path.join(output_root, file_name.split('.')[0])

    # create folder if nessessary
    if os.path.isdir(extract_dir):
        pass
    else:
        os.mkdir(extract_dir)

    for name in names:
        tar.extract(name, extract_dir)
    tar.close()


def untar_traintar(traintar='./traintar'):
    """
    untar images from traintar and save in corresponding folders
    organize like:
    /train
       /n01440764
           images
       /n01443537
           images
        .....
    """
    root, _, files = next(os.walk(traintar))
    for file in files:
        un_tar(os.path.join(root, file))

val数据

ILSVRC2012_img_val.tar中有50000张图片,并没有按照类别区分开,命名方式形如:

ILSVRC2012_val_00000001.JPEG

ILSVRC2012_val_00000002.JPEG

...

ILSVRC2012_val_00049999.JPEG

ILSVRC2012_val_00050000.JPEG

关于val数据集的标签,保存在ILSVRC2012_devkit_t12.gz中的data文件夹下的ILSVRC2012_validation_ground_truth.txt中,按照编号顺序每行用1-1000的数字表示一个类别。每个类别有50个样本。可以借助python中的scipy包访问mat文件的内容。scipy.io.loadmat

移动val数据的示例程序如下:

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 = scipy.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))

test数据

ILSVRC2012_img_test.tar总共有10万张测试图片,命名方式形如:

ILSVRC2012_test_00000001.JPEG

ILSVRC2012_test_00000002.JPEG

...

ILSVRC2012_test_00099999.JPEG

ILSVRC2012_test_00100000.JPEG

每个synset有100个测试图像,不公布测试图像的groud_truth。

开发工具集

除了说明性文件,比较有用的数据主要有val数据的标签文件data/ILSVRC2012_validation_ground_truth.txt和类别说明data/meta.mat

synsets的信息如下:

synsets =

1x1 struct array with fields:

ILSVRC2012_ID

WNID

words

gloss

num_children

children

wordnet_height

num_train_images

这个struct数组每个字段的意义如下:

  • 'ILSVRC2012_ID’是分配给每个synset的整数ID。所有的低等级synsets都被分配了1到1000之间的ID。所有高等级synsets的ID都大于1000。在“synsets”数组中,按照ILSVRC2012_ID对synsets进行排序,即synsets(i)。i.预测结果提交使用ILSVRC2012_ID作为synset标签。

  • 'WNID’是一个synset的WordNet ID。它是ImageNet或WordNet中synset的唯一标识。训练图像的tar文件使用WNID命名。此外,它还用于命名单个训练图像。

  • 'num_children’是该synset的子类数量。对于所有低等级synsets,它都是零;对于高等级synsets,它是非零的。

  • 'children’是该synset的子类的ILSVRC2012_IDs组成的向量。

  • 'wordnet_height’是指在完整ImageNet/WordNet层次结构中的到其子节点(子类)的最长路径的长度(完整ImageNet层次结构中的叶子节点的wordnet_height为0)。

层次结构根的ILSVRC2012_ID为1001,即synset“实体”。

小结

数据整理到如上所示的目录结构后,我们就可以使用keras框架中的ImageDataGeneratorflow_from_directory方法或者使用pytorch框架中的torchvision.datasets.ImageFolder来读取数据,便于下一步的处理。

2021-04-18 原文

数据资源-ImageNet数据集解析及分享的相关文章

数据资源-CIFAR10数据集解析及分享

AI研习图书馆,发现不一样的世界 CIFAR-10数据集解析 简介 CIFAR-10和CIFAR-100是来自于80 million张小型图片的数据集,图片收集者是Alex Krizhevsky, V ...

数据资源-MiniImageNet数据集解析及分享

AI研习图书馆,发现不一样的世界 MiniImageNet数据解析 简介 MiniImageNet数据集节选自ImageNet数据集.ImageNet是一个非常有名的大型视觉数据集,它的建立旨在促进视 ...

数据资源-深度学习与数据挖掘数据集

AI研习图书馆,发现不一样的世界 深度学习与数据挖掘数据资源 前言 数据整理是算法研究工作的重要基础,本文主要搜集整理了一些数据采集网站和常用数据集下载网址. 数据资源 一.常用数据收集网站 1.Pu ...

收藏:盘点机器学习的顶级数据资源TOP 8,如何做好深度学习,少些弯路少些坑?

公众号后台回复:管理1904,免费下载本月推荐精品管理类图书 公众号后台回复:人文历史1904,免费下载本月推荐精品人文历史类图书 加入"ICT销售和大客户联盟"(微信ID:ICT ...

分享一个宝藏网站,视频解析、资源搜索、实习工具通通都有

该网站可以说是全网资源站点最全的一个网站,而且都是一些大家工作中经常会用到的,实用的网站. 该网站集合了常用站点.视频直播.资源搜索.软件游戏.阅读漫画.音乐动听.实用工具.学习教育.办公素材等各类常 ...

【进口经验分享】上海海运进口咖啡粉胶囊清关流程和进口资质解析

胶囊咖啡是将咖啡豆先研磨成咖啡粉,再装进铝质胶囊的,杜绝了普通咖啡豆或者咖啡粉接触空气后变酸,氧化等问题.每次做出来的咖啡都很香,那是因为胶囊很好的保存了咖啡的新鲜度,可以这么说,每一杯都保留了咖啡豆 ...

【进口经验分享】宁波进口咖啡粉胶囊清关流程和进口资质解析

胶囊咖啡是将咖啡豆先研磨成咖啡粉,再装进铝质胶囊的,杜绝了普通咖啡豆或者咖啡粉接触空气后变酸,氧化等问题.每次做出来的咖啡都很香,那是因为胶囊很好的保存了咖啡的新鲜度,可以这么说,每一杯都保留了咖啡豆 ...

【进口经验分享】金华进口咖啡粉胶囊清关流程和进口资质解析

[进口经验分享]金华进口咖啡粉胶囊清关流程和进口资质解析 胶囊咖啡是将咖啡豆先研磨成咖啡粉,再装进铝质胶囊的,杜绝了普通咖啡豆或者咖啡粉接触空气后变酸,氧化等问题.每次做出来的咖啡都很香,那是因为胶囊 ...

【进口经验分享】进口日本咖啡粉胶囊清关流程和进口资质解析

胶囊咖啡是将咖啡豆先研磨成咖啡粉,再装进铝质胶囊的,杜绝了普通咖啡豆或者咖啡粉接触空气后变酸,氧化等问题.每次做出来的咖啡都很香,那是因为胶囊很好的保存了咖啡的新鲜度,可以这么说,每一杯都保留了咖啡豆 ...