ILSVRC2012数据集(分类部分)简要介绍和初步处理

ILSVRC2012数据集(分类部分)简要介绍和初步处理ILSVRC2012 数据集 分类部分 简要介绍和初步处理简介即大名鼎鼎 ImageNet2012 竞赛的数据集 在图像分类数据集中属于最常用的跑分数据集和预训练数据集 主要内容可以参考 ILSVRC2012 devkit t12 gz 的 readme txt 和中文翻译版内容详解下载的文件主要包括以下几个文件 ILSVRC2012 img train tarILSVRC201 img va

ILSVRC2012数据集(分类部分)简要介绍和初步处理

简介

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

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

内容详解

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

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 /n0 images /n0 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 /n0 images /n0 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_00.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来读取数据,便于下一步的处理。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/178483.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午5:11
下一篇 2026年3月26日 下午5:12


相关推荐

  • dify中如何接入阿里云的大模型

    dify中如何接入阿里云的大模型

    2026年3月12日
    3
  • sinc函数原型滤波器窗口matlab,sinc函数

    sinc函数原型滤波器窗口matlab,sinc函数sinc 函数和 rect 函数互为傅里叶变换物理上 单一矩形脉冲 rect t 的频谱是 sinc 函数 单缝的夫琅和费衍射花样是 sinc 函数附 sinc2 函数 sinc2 x sinc x 另一方面 Sinc 函数特性定义为 图 5b 噪声的幅度由公式 7a 的倒数给出 图 7 sinc 功能 产生 sinc 函数波形 调用格式 x sinc t 2015 10 21

    2026年3月20日
    2
  • leetcode 通配符匹配_部分匹配查询中有关通配符

    leetcode 通配符匹配_部分匹配查询中有关通配符给定一个字符串 (s) 和一个字符模式 § ,实现一个支持 ‘?’ 和 ‘*’ 的通配符匹配。‘?’ 可以匹配任何单个字符。‘*’ 可以匹配任意字符串(包括空字符串)。两个字符串完全匹配才算匹配成功。说明:s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *。示例 1:输入:s = “aa”p = “a”输出: false解释: “a” 无法匹配 “aa” 整个字符串。示例 2:输入:s = “aa”p = “*

    2022年8月8日
    6
  • thinkphp3.2.2邮箱发送

    thinkphp3.2.2邮箱发送

    2021年9月22日
    53
  • Laravel 出现 No application encryption key has been specified.

    Laravel 出现 No application encryption key has been specified.

    2021年10月20日
    42
  • pci-e mini pci-e 接口区别_创维42E510E怎么进总线

    pci-e mini pci-e 接口区别_创维42E510E怎么进总线固态硬盘的出现,彻底打破了机械硬盘多年来在电脑硬件领域的统治地位。相比于机械硬盘,固态硬盘更高的传输性能,让普通用户和发烧玩家的使用体验均得到了成倍的提升。在这场存储的革命中,为了实现更快的速度、更广的使用环境和更好的体验,硬盘接口技术也在不断进化革新,从早期的IDE、SCSI接口到主流的SATA、SAS接口,再到M.2、PCIe接口。原文链接:https://blog.csdn.net/A993852/article/details/108957202PCI-E接口PCI-E接口:在传统SATA

    2025年10月6日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号