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 filetar = 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 nessessaryif os.path.isdir(extract_dir):passelse: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 foldersorganize like:/train/n01440764images/n01443537images....."""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) -> WINDorganize like:/val/n01440764images/n01443537images....."""# load synset, val ground truth and val images listsynset = 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 -> WINDval_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 imagesoutput_dir = os.path.join(root, WIND)if os.path.isdir(output_dir):passelse: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_IDWNIDwordsglossnum_childrenchildrenwordnet_heightnum_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来读取数据,便于下一步的处理。

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

  1. 糖药病数据集分类_使用optuna和mlflow进行心脏病分类器调整

    糖药病数据集分类 背景 (Background) Data science should be an enjoyable process focused on delivering insights ...

  2. A brief introduction to weakly supervised learning(简要介绍弱监督学习)

    文章转载自http://www.cnblogs.com/ariel-dreamland/p/8566348.html A brief introduction to weakly supervised ...

  3. Hadoop学习笔记一 简要介绍

    Hadoop学习笔记一 简要介绍 这里先大致介绍一下Hadoop.     本文大部分内容都是从官网Hadoop上来的.其中有一篇介绍HDFS的pdf文档,里面对Hadoop介绍的比较全面了.我的这一 ...

  4. 基于Adaboost实现鸢尾花数据集分类

    写在之前 提交内容分为两大部分: 一为Adaboost算法实现,代码在文件夹<算法实现>中,<提升方法笔记>为个人学习笔记. 二为基于Adaboost模型实现鸢尾花数据集分类, ...

  5. 【关键词提取】第二篇:数据集、实现代码介绍

    原文地址:http://www.cnblogs.com/lessmore/category/1009890.html 转载请保留本行,欢迎交流. 目录: 第一篇:综述 第二篇:数据集.实现代码介绍 第 ...

  6. 一层神经网络实现鸢尾花数据集分类

    一层神经网络实现鸢尾花数据集分类 1.数据集介绍 2.程序实现 2.1 数据集导入 2.2 数据集乱序 2.3 数据集划分成永不相见的训练集和测试集 3.4 配成[输入特征,标签]对,每次喂入一小撮( ...

  7. 【HSI】高光谱的数据集分类深度学习实战及代码理解

    [HSI]高光谱的数据集分类深度学习实战及代码理解 文章目录 [HSI]高光谱的数据集分类深度学习实战及代码理解 一.配置文件编写 二.高光谱图像的处理 2.1图像数据变换 2.2 数据整合 2.3 ...

  8. 朴素贝叶斯(西瓜数据集分类,社区恶意留言分类,垃圾邮件分类,新浪新闻分类),AODE分类器 代码实现

    朴素贝叶斯(西瓜数据集分类,社区恶意留言分类,垃圾邮件分类,新浪新闻分类),AODE分类器 代码实现 以下代码为本人学习后,修改或补充后的代码实现,数据集和原代码请参考:https://github. ...

  9. 用逻辑回归实现鸢尾花数据集分类(1)

    鸢尾花数据集的分类问题指导 -- 对数几率回归(逻辑回归)问题研究 (1) 这一篇Notebook是应用对数几率回归(Logit Regression)对鸢尾花数据集进行品种分类的.首先会带大家探索一 ...

最新文章

  1. 最大公约数和最小公倍数的欧几里得算法
  2. 第二届清华大学iCenter量化策略挑战赛开幕!
  3. WPF怎么寻找在ItemTemplate内部的各种控件
  4. 网络犯罪分子为何针对中小企业?—Vecloud微云
  5. LeetCode Algorithm 217. 存在重复元素
  6. phonegap免费视频
  7. Less中的命名空间
  8. 十五.激光和惯导LIO-SLAM框架学习之惯导与雷达外参标定(1)
  9. 大数据---数据分析师的完整流程与知识结构体系
  10. oracle缓存怎么看,Oracle从缓存里面查找真实的执行计划
  11. ReactNative之 Activity class {xxx/xxx.MainActivity} does not exist
  12. 这是?国内跨境电商降本增收营销神器
  13. position: sticky 属性
  14. js获取服务器响应时间,【JS】浏览器所允许的http请求最长的响应时间?
  15. 国内最火的10款Java开源项目
  16. 全球与中国汽车牛皮革市场“十四五”前景规划及运营趋势研究报告2022-2028年
  17. 《腾讯网UED体验设计之旅》
  18. Visual Studio安装SVN过程及作用
  19. 横版格斗——技能动作概念
  20. C#结合天敏VC4000采集卡视频监控

热门文章

  1. 教你Zbrush的Geometry HD
  2. 使用AVPlayer自定义支持全屏的播放器(二)
  3. 数字黑洞:任意一个5位数,比如:34256,把它的各位数字打乱,重新排列,可以得到 * 一个最大的数:65432,一个最小的数23456。
  4. 写在2013的尾巴 即 写在蛇年的尾巴
  5. Visio1——Visio2019对任意手绘不规则图形进行颜色填充
  6. java购物小票_Java学习02-26(购物小票)
  7. python画图-pylab
  8. Python实现微信跳一跳高分技巧
  9. 解决图片渲染报错[渲染层网络层错误] Failed to load local image resourcethe server responded with a status of 500 (HTT
  10. Nginx实现URL重写