常用数据集整理(持续更新ing)
在做实验过程中经常用到的数据集整理一下,按照学习过程中遇到的数据集的先后顺序进行整理,希望能对科研有所帮助。本博文将随着学习过程持续性更新,有其他常用数据集的,可以在下方留言,持续整理和补充。分享一个拥有较多数据集的网站:paper with code
目录
1. ImageNet
1.1 ImageNet简介
ImageNet在2009年计算机视觉与模式识别(CVPR)会议上发布。目前,ImageNet整个数据集包含14,197,122 张图片, 21841 类(截至2021.6.22),其中常用的子集包含1000类,120万张图片。
ImageNet就像一个网络一样,拥有多个Node(节点)。每一个node相当于一个item或者subcategory。据官网消息,一个node含有至少500个对应物体的可供训练的图片/图像。它实际上就是一个巨大的可供图像/视觉训练的图片库。
ImageNet的结构基本上是金字塔型:目录->子目录->图片集。
Imagenet数据集是目前深度学习图像领域应用得非常多的一个领域,关于图像分类、定位、检测等研究工作大多基于此数据集展开。
1.2 ImageNet下载方式
ImageNet数据下载地址:ImageNet数据下载
1.3 ImageNet数据集样例
ImageNet数据图像如下所示:
1.4 ImageNet数据集应用举例
ImageNet数据集可以用来进行图像分类实验,具体论文包括:
[1]Mark Chen, Alec Radford, Rewon Child, Jeff Wu, and Heewoo Jun. Generative pretraining from pixels. In ICML, 2020.
[2]J. Deng, W. Dong, R. Socher, L.J. Li, Kai Li, and Li Fei-Fei (2009): ImageNet: A large-scale hierarchical image database. In IEEE Conference on Computer Vision and Pattern Recognition, 2009. CVPR 2009. 248 – 255.
2. CIFAR-10
2.1 CIFAR-10简介
CIFAR-10 是由 Hinton 的学生 Alex Krizhevsky 和 Ilya Sutskever 整理的一个用于识别普适物体的小型数据集。一共包含 10 个类别的 RGB 彩色图 片:飞机( airplane )、汽车( automobile )、鸟类( bird )、猫( cat )、鹿( deer )、狗( dog )、蛙类( frog )、马( horse )、船( ship )和卡车( truck )。图片的尺寸为 32×32 ,数据集中一共有 50000 张训练图片和 10000 张测试图片。
该数据集共有60000张彩色图像,这些图像是32*32,分为10个类,每类6000张图。这里面有50000张用于训练,构成了5个训练批,每一批10000张图;另外10000用于测试,单独构成一批。测试批的数据里,取自10类中的每一类,每一类随机取1000张。抽剩下的就随机排列组成了训练批。注意一个训练批中的各类图像并不一定数量相同,总的来看训练批,每一类都有5000张图。
2.2 CIFAR-10下载方式
CIFAR-10数据集一共有3种版本,(python,matlab,binary version 适用于C语言)
http://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz
http://www.cs.toronto.edu/~kriz/cifar-10-matlab.tar.gz
http://www.cs.toronto.edu/~kriz/cifar-10-binary.tar.gz
2.3 CIFAR-10数据集样例
CIFAR-10数据集图像如下所示:
2.4 CIFAR-10数据集应用举例
下载python版本的数据之后的文件如下所示:
读取图像数据至direction中的代码:
def unpickle(file):
import pickle
with open(file, 'rb') as fo:
dict = pickle.load(fo, encoding='bytes')
return dict
这样的话,每个batch文件包含一个字典,每个字典包含有:
Data
一个10000×3072的numpy数组,数据类型是无符号整形uint8。这个数组的每一行存储了32×32大小的彩色图像(32×32×3通道=3072)。前1024个数是red通道,然后分别是green,blue。另外,图像是以行的顺序存储的,也就是说前32个数就是这幅图的像素矩阵的第一行。
Labels
一个范围在0-9的含有10000个数的列表(一维的数组)。第i个数就是第i个图像的类标。
batches.meta
数据集除了6个batch之外,还有一个文件batches.meta。它包含一个python字典对象,内容有:一个包含10个元素的列表,每一个描述了labels array中每个数字对应类标的名字。比如:label_names[0] == “airplane”, label_names[1] == “automobile”。
通过上述代码段,以读取‘data_batch_1’文件为例,阐述读到的数据的格式。通过代码读取的数据存储在一个dictionary类型的变量dict中,将dict的内容进行输出,得到的结果格式如下(下图纯原创!):
接下来需要思考的是:如何将图的数据文件还原为原图像。分别生成训练数据集和测试数据集,代码如下:
# coding :UTF-8
# 文件功能: 代码实现CIFAR-10数据文件转换为原图像的功能
# 开发人员: dpp
# 开发时间: 2021/6/23 11:19 下午
# 文件名称: CIFAR-10-transform.py
# 开发工具: PyCharm
import imageio # 引入imageio包
import numpy as np
# 解压 返回解压后的字典
def unpickle(file):
import pickle as pk
fo = open(file, 'rb')
dict = pk.load(fo, encoding='iso-8859-1')
fo.close()
return dict
# 生成训练集图片
for j in range(1, 6):
dataName = "CIFAR-10-datafile/data_batch_" + str(j) # 读取CIFAR-10-datafile文件夹目录下的data_batch1~data_batch5文件。
Xtr = unpickle(dataName)
print(dataName + " is loading...")
for i in range(0, 10000):
img = np.reshape(Xtr['data'][i], (3, 32, 32)) # Xtr['data']为图片二进制数据
img = img.transpose(1, 2, 0) # 读取image
picName = 'CIFAR-10-train/' + str(Xtr['labels'][i]) + '_' + str(i + (j - 1) * 10000) + '.jpg'
# Xtr['labels']为图片的标签,值范围0-9,本文中,train文件夹需要存在,并与脚本文件在同一目录下。
imageio.imsave(picName, img)
print(dataName + " loaded.")
print("test_batch is loading...")
# 生成测试集图片
testXtr = unpickle("CIFAR-10-datafile/test_batch")
for i in range(0, 10000):
img = np.reshape(testXtr['data'][i], (3, 32, 32))
img = img.transpose(1, 2, 0)
picName = 'CIFAR-10-test/' + str(testXtr['labels'][i]) + '_' + str(i) + '.jpg'
imageio.imsave(picName, img)
print("test_batch loaded.")
实验文件结构如下所示:
转换成原始图片之后的训练数据集train为:
转换成原始图片之后的测试数据集test为:
(待更新。。。)