图片分类 STL-10 数据集下载及使用指南

转载自安全验证 - 知乎

这次给大家介绍的 STL10数据集,是图片分类任务早期常用的基准数据集之一,虽然只有10种样本,图片尺寸也偏小,但是标注类型比较平衡,各种种类都有各500张(train)/800张(test),用于模型训练可以达到比较好的准确度。一起来看看。

下载地址:STL-10 dataset

一、数据集简介

发布方:Adam Coates

发布时间:2011

背景:

STL-10数据集是一个用于开发无监督特征学习、深度学习、自监督学习算法的图像识别数据集。

其灵感来自CIFAR-10数据集,每个类别的标注图像数量相比CIFAR-10中的要少,但提供了大量的无标注图像来做无监督预训练,其主要的挑战是利用无标签图像来构建先验知识。

简介:

STL-10的图像来自ImageNet,共有113000张96 x 96分辨率的RGB图像,其中训练集为5000张,测试集为8000张,其余100000张均为无标签图像。

二、数据集详细信息

1. 标注类别

idname
1airplane
2bird
3car
4cat
5deer
6dog
7horse
8monkey
9ship
10truck

2. 数据量

训练集包含5000张有标注的图像,每个类别500张,图像来自ImageNet。

测试集包含8000张有标注的图像,每个类别800张,图像来自ImageNet。

无标签集包含100000张无标注的图像,除包含以上10个类别外,还包括其他类别的动物以及车辆,图像来自ImageNet。

3. 训练流程

官方将训练集分为了10个fold,每个fold包含1000张图片。训练时应在每个fold上均训练一次,然后在测试集上评测模型性能。

4. 可视化

三、数据集文件结构解读

1. 目录结构

STL-10 Dataset/
├── train_X.bin            #训练集图像数据
├── train_y.bin            #训练集图像标注
├── test_X.bin             #测试集图像数据
├── test_y.bin             #测试集图像数据
├── unlabeled_X.bin        #无标签图像数据
├── class_names.txt        #数据集类别名称
└── fold_indices.txt       #训练集的fold划分信息STL-10 Dataset/

 2. 元信息格式

class_names.txt中存储了类别名称信息,每一行对应一个类别,具体内容如下:

airplane
bird
car
cat
deer
dog
horse
monkey
ship
truck

fold_indices.txt中存储了训练集的fold划分信息,每一行对应一个fold所包含的1000张图像的index。index从0开始,对应train_X.bin中的图像顺序。其前三行的部分内容如下:

3629 980 2693 3595 2169 817 2970 3494 1904 4503 3204 4305 1261 1199 ...
2633 4392 2850 4016 2255 3160 4632 891 3531 2671 1340 1651 3493 4439 ...
1355 3916 3348 3417 2726 3245 41 3239 313 1053 4002 3881 3328 3494 ...
...

3. 标注格式

训练集、测试集以及无标签图像的数据均存储在后缀为"_X.bin"的二进制文件中,存储格式为列优先,一次一个通道 (前96x96的值是R通道,接下来的96X96是G通道,最后是B通道),值在0-255之间。

训练集和测试集的标注存储在后缀为"_y.bin"的二进制文件中,值在1-10之间。

#读取数据脚本
import numpy as np

image_path = 'train_X.bin' #test_X.bin/unlabeled_X.bin
label_path = 'train_y.bin' #test_y.bin
with open(image_path, 'rb') as f:
    images = np.fromfile(f, dtype=np.uint8)
    images = images.reshape(-1, 3, 96, 96).transpose(0, 3, 2, 1) 

with open(label_path , 'rb') as f:
    labels = np.fromfile(f, dtype=np.uint8)
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STL-10数据集是一个包含10个类别的图像数据集,包括飞机、鸟、汽车、猫、鹿、狗、青蛙、马、船和卡车。每个类别包含5000张32x32的彩色图像,其中500张用于训练,100张用于验证,剩余的用于测试。 在本教程中,我们将学习如何加载STL-10数据集。 1.下载数据集 首先,我们需要下载STL-10数据集。可以从以下网站下载:http://ai.stanford.edu/~acoates/stl10/ 2.解压缩数据集 下载完成后,将文件解压缩到指定的目录中。 3.加载数据集 我们可以使用Python中的NumPy和pickle模块来加载STL-10数据集。下面是一个示例代码: ```python import numpy as np import pickle def load_stl10_data(path): data = {} data['train_X'] = [] data['train_y'] = [] data['test_X'] = [] data['test_y'] = [] data['unlabeled_X'] = [] with open(path+'/train_X.bin', 'rb') as f: data['train_X'] = np.fromfile(f, dtype=np.uint8).reshape((5000, 3, 96, 96)).transpose((0,3,2,1)).astype(np.float32) with open(path+'/train_y.bin', 'rb') as f: data['train_y'] = np.fromfile(f, dtype=np.uint8).astype(np.int32)-1 with open(path+'/test_X.bin', 'rb') as f: data['test_X'] = np.fromfile(f, dtype=np.uint8).reshape((8000, 3, 96, 96)).transpose((0,3,2,1)).astype(np.float32) with open(path+'/test_y.bin', 'rb') as f: data['test_y'] = np.fromfile(f, dtype=np.uint8).astype(np.int32)-1 with open(path+'/unlabeled_X.bin', 'rb') as f: data['unlabeled_X'] = np.fromfile(f, dtype=np.uint8).reshape((100000, 3, 96, 96)).transpose((0,3,2,1)).astype(np.float32) return data data = load_stl10_data('path/to/stl10') ``` 在此代码中,我们首先定义了一个空字典data,用于存储STL-10数据集的各个部分。然后,我们打开训练集、测试集和未标记的数据文件,并使用np.fromfile函数将其加载到NumPy数组中。由于数据是以二进制格式存储的,我们需要指定dtype=np.uint8。数据数组的形状为(num_samples,3,96,96),其中num_samples是样本数。我们需要将数组的维度重新排列为(num_samples,96,96,3)。最后,我们将数据类型转换为np.float32,并将标签减去1,以从0开始对标签进行索引。 4.使用数据集 现在,我们已经成功加载了STL-10数据集,我们可以使用它来训练模型或进行其他任务。例如,我们可以使用Matplotlib库来显示数据集中的图像: ```python import matplotlib.pyplot as plt # 显示训练集中的第一张图像 plt.imshow(data['train_X'][0]/255.) plt.show() ``` 这将显示训练集中的第一张图像。请注意,我们需要将像素值除以255,以将其缩放到0到1之间的范围内。 总结 在本教程中,我们学习了如何加载STL-10数据集,这是一个包含10个类别的图像数据集。我们使用Python中的NumPy和pickle模块来加载数据集,并使用Matplotlib库来显示图像。现在,我们可以使用STL-10数据集来训练模型或进行其他任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值