cifar10和cifar100(简介&可视化)

您所在的位置:网站首页 可视化包括哪些内容和方法呢图片 cifar10和cifar100(简介&可视化)

cifar10和cifar100(简介&可视化)

2024-07-10 18:34| 来源: 网络整理| 查看: 265

cifar

CIFAR数据集是 Visual Dictionary (Teaching computers to recognize objects) 的子集,由三个教授收集,主要来自google和各类搜索引擎的图片。

备注:cifar官网

1.cifar10

由60000张32*32彩色图像组成,图像有10个类,每个类有6000个图像。分别包含有50000个训练图像和10000个测试图像。

类型如下: image.png

2.cifar100

这个数据集和cifar10类似,它有100个类,每个类包含600个图像,600个图像中有500个训练图像和100个测试图像。100类实际是由20个类(每个类又包含5个子类)构成(5*20=100)。

类型如下:

image.png

3.数据结构(Python版本) cifar10

数据格式如下:

...

第一个字节是第一个图像的标签,它是一个0-9范围内的数字。接下来的3072个字节是图像像素的值。前1024个字节是红色通道值,下1024个绿色,最后1024个蓝色。

CIFAR-100

二进制版本与CIFAR-10的二进制版本相似,只是每个图像都有两个标签字节(粗略和细小)和3072像素字节,所以二进制文件如下所示:

... #查看cifar100 python版本的数据结构 def unpickle(file): import pickle with open(file, 'rb') as fo: dict = pickle.load(fo, encoding='bytes') return dict dict.keys() #dict_keys([b'data', b'coarse_labels', b'fine_labels', b'filenames', b'batch_label']) 4.可视化 pickle模块

pickle模块实现了基本的数据序列化和反序列化。

序列化过程将文本信息转变为二进制数据流,便于存储在硬盘之中,当需要读取文件的时候,从硬盘中读取数据。

反序列可以从文件中得到原始的数据,如字符串、列表、字典等数据。

PIL

负责将三色像素合并为一张图片保存

matplotlib.image

负责将单色道二维数组保存为一张图片

4.1 cifar10可视化: import numpy as np from PIL import Image import pickle import os import matplotlib.image as plimg CHANNEL = 3 WIDTH = 32 HEIGHT = 32 data = [] labels=[] classification = ['airplane','automobile','bird','cat','deer','dog','frog','horse','ship','truck'] for i in range(5): with open("./cifar-10-batches-py/data_batch_"+ str(i+1),mode='rb') as file: #数据集在当脚本前文件夹下 data_dict = pickle.load(file, encoding='bytes') data+= list(data_dict[b'data']) labels+= list(data_dict[b'labels']) img = np.reshape(data,[-1,CHANNEL, WIDTH, HEIGHT]) #代码创建文件夹,也可以自行创建 data_path = "./pic3/" if not os.path.exists(data_path): os.makedirs(data_path) for i in range(100): r = img[i][0] g = img[i][1] b = img[i][2] plimg.imsave("./pic4/" +str(i)+"r"+".png",r) plimg.imsave("./pic4/" +str(i)+"g"+".png",g) plimg.imsave("./pic4/" +str(i) +"b"+".png",b) ir = Image.fromarray(r) ig = Image.fromarray(g) ib = Image.fromarray(b) rgb = Image.merge("RGB", (ir, ig, ib)) name = "img-" + str(i) +"-"+ classification[labels[i]]+ ".png" rgb.save(data_path + name, "PNG")

image.png

4.2 cifar100

cifar100的文件结构和cifar10不同,数据只有一个文件夹里面有50000个图片,且有两个标签,可以从返回的dict的key查看其标签(前文有提到)。

知道其与cifar10后,改写前段代码即可实现。

# -*- coding:utf-8 -*- import pickle as p import numpy as np import matplotlib.pyplot as plt import matplotlib.image as plimg from PIL import Image def load_CIFAR_batch(filename): """ load single batch of cifar """ with open(filename, 'rb')as f: datadict = p.load(f,encoding='bytes') #X = datadict[b'data'] #Y = datadict[b'labels'] #X = X.reshape(10000, 3, 32, 32) X = datadict[b'data'] Y = datadict[b'coarse_labels']+datadict[b'fine_labels'] X = X.reshape(50000, 3, 32, 32) Y = np.array(Y) return X, Y if __name__ == "__main__": #imgX, imgY = load_CIFAR_batch("./cifar-10-batches-py/data_batch_1") imgX, imgY = load_CIFAR_batch("./cifar-100-python/train") print(imgX.shape) print("正在保存图片:") for i in range(imgX.shape[0]): imgs = imgX[i] if i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3