ImageNet数据集 下载

article/2025/11/5 23:13:24

文章目录

  • 1. ImageNet 说明
  • 2. ILSVRC2012 说明
  • 3. ImageNet下载方式
  • 4. ImageNet数据组织与使用

1. ImageNet 说明

ImageNet官网:http://image-net.org/

ImageNet 由斯坦福李飞飞教授带领创建,ImageNet 本身有2万多个的类别,超过 1400 万张图片,其中超过 100 万张图片有明确类别标注和物体位置标注。

ImageNet 按照 WordNet 层级结构组织数据,首先介绍一下 WordNet。在 WordNet 中每一个概念(concept)都会由很多个词(word)或者短语(word phrase)来描述,就好比说 “动物 animal” 作为一个 concept,可以包含 “domestic animal 家畜”、“work animal 役畜” 等 work phrase,而 “domestic animal 家畜” 又可以继续细分为 “domestic dog”、“dog” 等。因此将每一个 concept 记作一个 “synonym set 或 synset”(同义词集合)。WordNet 中包含超过 100,000 个 synset,其中 80,000+ 是名词。WordNet 以 Synset 为基本单位来组织单词,可以认为 WordNet 是一个树状结构,从其根结点到叶子结点是一个不断细分的过程,并且每个结点都是一个 Synset。

ImageNet 包含 82,115 个 Synset(均为 WordNet 中的名词),平均在每个 Synset 上都设置了 1,000 张图像。

在这里插入图片描述
适用任务:图像分类,目标检测,目标定位、视频目标检测、场景分类

特别解释ILSVRC (ImageNet Large-Scale Visual Recognition Challenge) 是一个基于 ImageNet 的比赛,每年都会从ImageNet中抽取部分数据作为比赛数据集。ILSVRC 从 2010 年开始举行,每年一次,到 2017 年最后一届结束,因此 “ILSVRC+年份” 也用来特指某一年比赛的数据集(属于ImageNet的子集),基于 ILSVRC 比赛的子数据集也是各种论文中最常用的数据集。

2. ILSVRC2012 说明

很多论文都常用 ILSVRC2012 作为实验数据集,ILSVRC2012 包含1000个类别(ImageNet 的 1000 个 Synset),每个类别大约有1000张图片。其中测试集未公开标注信息,因此常用验证集来进行模型的测试。
在这里插入图片描述
ILSVRC2012 的类别编号和类别名称参考:类别名称对应表

ILSVRC2012类别数 (Number of classes)图片数 (Number of images)文件大小 (Size on disk)标注
训练集1000类约120万张图片~140GB公开
验证集1000类5万张图片~6GB公开
测试集1000类10万张图片~13GB未公开

在官网下载ILSVRC2012时,可以看到训练数据集(Training images)被分为了 (Task1 & 2) 和 (Task 3),其中 (Task 1 & 2) 是用于图像识别任务的。
在这里插入图片描述
验证集(Validation images)对应的标注信息在Development kit (Task 1 & 2)中,下载压缩包后解压,找到ILSVRC2012_devkit_t12/data文件夹,里面的ILSVRC2012_validation_ground_truth.txt就是验证集对应的标注label。
在这里插入图片描述

3. ImageNet下载方式

ImageNet不可用于商业目的,因此需要认证edu邮箱,直接用学校邮箱认证的话请求会立马通过,如果用其他后缀的普通邮箱需要审核1~5天还不一定能审核通过。用学校邮箱认证之后会收到邮件,从邮件内提供的链接就可以进入数据的Download页面,ILSVRC下面按照年份分类,一般最常用的就是ILSVRC 2012,可以根据自己的需要选择年份。进入之后在Images条目下就是Train/Val/Test数据。

step1:进入Download页面 - 按需选择ILSVRC年份:
在这里插入图片描述
step2:在Images部分就是训练/验证/测试数据集
在这里插入图片描述
关于下载方式,如果不方便从官网下载,可以选择以下备用方案:

  • 方式1:https://hyper.ai/datasets/4889
  • 方式2:迅雷种子下载,提取码 x7jn
  • 方式3:ImageNet LSVRC 2012 Training Set (Object Detection)

4. ImageNet数据组织与使用

仍以 ILSVRC 2012 为例,在这里能够下载到关于 ILSVRC 2012 的所有数据文件。其中,带有 bbox 标识的用于目标检测任务,包括以下 4 个文件:
在这里插入图片描述
用于图像分类任务的包含以下 4 个文件:其中 train 分为了 traintrain_t3,分别对应着 task 1&2task 3
在这里插入图片描述
devkit 工具包包含以下 2 个文件:
在这里插入图片描述
训练集 ILSVRC2012_img_train 下包含两级目录,第一级目录包含 1000 个子文件夹,对应 1000 个类别。每个二级目录包含 1300 张图片,表示每个类别提供了 1300 个样本。每个子文件夹的名称为 n******,其下对应的图片名称也以文件夹名称为前缀,其后为图片序号。
在这里插入图片描述
在这里插入图片描述
验证集 ILSVRC2012_img_val 下包含 50K 张图片,可以看到验证集图片名称前缀没有类别信息。要获取验证集标签信息,需要从 ILSVRC2012_devkit_t12/data 中的 ILSVRC2012_validation_ground_truth.txt 得到。
在这里插入图片描述
1. 解压 train 和 val 数据,由于 test 数据未提供标签,因此这里不使用。

# 解压trian数据
tar -xvf ILSVRC2012_img_train.tar
# 解压val数据
mkdir ILSVRC2012_img_val
tar -xvf ILSVRC2012_img_val.tar -C ILSVRC2012_img_val
# 解压devkit
tar -xzvf ILSVRC2012_devkit_t12.tar.gz

2. 重新组织 val 数据,按照 train 数据的组织方式,对 val 数据进行处理,方便后续训练验证时对数据的加载。

def imagenet_val_process(images_dir, devkit_dir):"""move val images to correspongding class folders."""# 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(images_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))if __name__ == '__main__':img_dir = "/data/imagenet/ILSVRC2012_img_val"dev_dir = "/data/imagenet/ILSVRC2012_devkit_t12"imagenet_val_process(img_dir, dev_dir)

重新组织后的 val 数据与 train 数据的组织方式相同,按照二级目录的方式,包含 1000 个子文件夹(类别),每个子文件夹下包含 50 张用于验证的图片。
在这里插入图片描述

3. ImageNet 数据读取(PyTorch)

一种比较简单的读取方式是,使用 PyTorch 中自带的库 ImageFolder。ImageFolder 适合读取数据组织结构如下的数据集:

--| root
----| class1
------| img1.png
------| img2.png
------| ...
----| class2
------| ...
----| class3
------| ...

即数据按照两级目录组织,第一级目录是类别,第二级是每个类别对应的所有样本。

import torchvision.transforms as transforms
from torch.utils.data import DataLoader
from torchvision.datasets import ImageFolderdata_transform = transforms.Compose([transforms.Resize(299),transforms.CenterCrop(299),transforms.ToTensor(),transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])])# 使用ImageFolder读取
train_dataset = ImageFolder(root='/data/imagenet/ILSVRC2012_img_train',transform=data_transform)
train_dataset_loader = DataLoader(train_dataset, batch_size=4, shuffle=False, num_workers=4)print(train_dataset.imgs == train_dataset.samples)  # True
for i, (images, labels) in enumerate(train_dataset_loader):print(images.size())print(labels.size())

通过 ImageFolder 读取的结果,可以看到包含以下内容:
在这里插入图片描述

其中:

  • class:List,包含 1000 个类别名称
  • class_to_idx:Dict,每个类别名称字符串与其对应的类别序号
  • imgssamples:List,每个 List 元素为 Tuple,为每张图片的路径和其对应的类别序号
  • targets:List,每张图片对应的类别序号

施工中…


http://chatgpt.dhexx.cn/article/J3H7KMww.shtml

相关文章

机器学习数据集下载

几个常用的数据集下载网站: 1. kaggle数据集 网址:Find Open Datasets and Machine Learning Projects | KaggleDownload Open Datasets on 1000s of Projects Share Projects on One Platform. Explore Popular Topics Like Government, Sports, Med…

深度学习常用数据集介绍与下载(附网盘链接)

摘要 这篇博文总结了博主收集的深度学习常用的数据集,包含常用的分类、目标检测及人脸识别任务,对每个数据集给出了简要介绍、官网下载网站以及公众号获取的关键字。因为有的数据集较大,官网的下载速度可能比较慢,为了方便大家管…

ScanNet数据集下载

文章目录 前言1.数据集介绍2.数据集获取3.导出数据集 前言 笔者CV小白选手获取ScanNet数据集是真的闹心,好在最后获取成功啦!这里将这两天获取数据集的详细过程记录一下,希望能够帮助到更多人,一起学习进步!(o(&#…

kaggle数据集下载步骤

原文链接:https://blog.csdn.net/lxw234lxw/article/details/102968754 本文以APTOS 2019 Blindness Detection竞赛数据库为例,详解下载步骤。 目录 一、安装kaggle库 二、注册kaggle账号 三、找到需要下载的数据集,并接受规则。 四、下载jso…

公开数据集下载地址

这里写目录标题 一、目标检测,分割数据集1.COCO 数据集COCO2014COCO2017 2.PASCAL VOC数据集voc2007数据集:voc 2012数据集: 二、自动驾驶数据集1. BDD100K 数据集2.Nuscenes 一、目标检测,分割数据集 1.COCO 数据集 COCO是一个…

Java 18 正式发布

Oracle 正式推出Java 18,这是世界排名第一的编程语言和开发平台的最新版本。Java 18 (Oracle JDK 18) 提供了数以千计的性能、稳定性和安全性改进,包括对平台的九项增强,这将进一步提高开发人员的工作效率。 最新的 Java 开发工具包 (JDK) 提…

10种受欢迎的前后端相关开发工具

该篇博客翻译自Best Developer Tools for 2021。 1 GitKraken Git Client 连接Git服务器的GUI客户端,支持Windows、 Mac和Linux操作系统。如果你在使用Git时没有使用GitKraken,每天都会感到麻烦。从此刻起,GitKraken直观的UI帮你执行简单或复…

盘点——iOS应用开发常用工具

针对 iOS 平台的应用开发工作,通常都需要借助 IDE、 SDK 等开发工具以提升开发效率。iOS 平台的应用开发生态环境,正随着更多优秀开发者的加入,而变得越来越完善。那么,对于 iOS 应用开发者来说,该如何选出合适的 IDE 或 SDK 工具呢? 不论是 iOS 应用开发公司,还是个人…

Java语言入门概述

一、Java语言入门 一)Java语言概述 1、计算机的发展,软件开发介绍 概述: 软件:即一系列按照特定的顺序组织的计算机数据和指令的集合、软件分为系统软件和应用软件。 系统软件:系统软件就是指控制和协调计算机及外…

Java 后端开发必读的 6 本书!

以下内容来自公众号逆锋起笔,关注每日干货及时送达 如果你是一个小白,你打算自学JAVA,你如果想找到一份月薪1万的JAVA开发工程师的工作。那么很简单,你只需要花1个月的时间,学完我推荐的这6本书,再结合一些…

Ant、 Maven 、 Gradle—Java构建工具比较

根据相关报告,大多数Java开发人员使用Maven作为他们的主要构建工具,在67%的受访者中。排名第二和第三的分别是20%的Gradle和11%的Ant。 这三个构建工具一直排在Java开发人员的前三个构建工具中。在本文中,我们比较了Maven、Gradle和Ant&#…

利用JConsole工具监控java程序内存和JVM

项目部署成功后时间过不多久内存就撑爆了,所以需要检测工具来监控项目内存情况。 项目内存爆满 docker容器直接挂掉。启动命令上也加上了内存溢出生成dump日志。 -XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPath/logs/dump.log 解决问题思路大致有两种 &#x…

python的主流开发工具排名,最常用的python开发工具

有哪些值得推荐的 Python 开发工具? 第一款:最强终端 Upterm它是一个全平台的终端,可以说是终端里的IDE,有着强大的自动补全功能,之前的名字叫做:BlackWindow。 有人跟他说这个名字不利于社区推广,改名叫…

2022年推荐算法效率开发必备工具榜单

一.引言 一个优秀的算法工程师应该至少具备3类能力: 基础能力:包含数理统计、机器学习、概率论以及深度学习等相关知识 编程能力:python、C or Java 以及基本的 Sql、linux、shell 命令 核心能力:对数据的敏感程度&#xff0c…

java工具类_16 个超级实用的 Java 工具类

阅读本文大概需要 4 分钟。 出处:alterem juejin.im/post/5d4a25b351882505c105cc6e 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类。 以下工具类、方法按使用流行度排名,参考数据来源于…

Java程序员新手老手都离不开八大开发工具

1.Eclipse 尽管IntelliJ IDEA、NetBeans和一些其他的IDE正在日益普及,但是有调查表明,Eclipse仍然是几乎半数Java开发人员首选的开发环境。 Eclipse是IDE领域的瑞士军刀,有着大量定制的接口和无数的插件。它无处不在,后面本文将推…

Java程序员怎样考察报表工具的开发效率

前言 工具,本身就是为了解决各种重复性工作效率低下的问题而诞生的产物,报表工具也是工具,所以它的诞生,它的使命,也是为了提效!是为了提升数据信息化项目中报表的开发效率而诞生的 但不同的工具&#xf…

排名前 16 的 Java 工具类,你用过几个?

点击“开发者技术前线”,选择“星标” 让一部分开发者看到未来 转自:programcreek 链接:https://www.programcreek.com/ 在Java中,实用程序类是定义一组执行通用功能的方法的类。 这篇文章展示了最常用的Java实用工具类及其最常用…

Python输入整数n,求斐波拉契数列第n个数

递归方法: # 输入整数n,求斐波拉契数列第n个数。 # 思路: # 递归式算法: # 利用f(n) f(n-1) f(n-2)的特性来进行递归def fn(n):if n0:return 0if n1:return 1return fn(n-1)fn(n-2)print(fn(10):,fn(10), fn(3):,fn(3), fn(2):…

python输入一个整数,判断是不是素数(包括2),3种方法

刚开始写的时候,看了其他人的,发现他们都不能判断2,然后自己加了两句,很简单,浅浅发表一下第一篇文章 当然还有其他方法,比如 还有 但是,我觉得第一种是最简单的,你们觉得呢