CIFAR10数据介绍
该数据集共有60000张彩色图像,这些图像是32*32,分为10个类,每类6000张图。这里面有50000张用于训练,构成了5个训练批,每一批10000张图;另外10000用于测试,单独构成一批。测试批的数据里,取自10类中的每一类,每一类随机取1000张。抽剩下的就随机排列组成了训练批。注意一个训练批中的各类图像并不一定数量相同,总的来看训练批,每一类都有5000张图。
数据下载路径:
http://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz(适用于python)
下载解压后的文件结构
data_batch_*:训练数据,每一个包含10000张图片数据
test_batch:测试数据包含10000张图片数据
数据解析
CIFAR10数据解析成图片格式的数据,方便后续优化处理时,知道那些图片分类错误并进行改进。
import pickle
import glob
import numpy as np
import cv2
import os
def unpickle(file):
with open(file, 'rb') as fo:
dict = pickle.load(fo, encoding='bytes')
return dict
def read(train_list,save_path):
for l in train_list:
print(l)
# 字典格式的数据,数据包含数据类别/文件名/图片数据'batch_label':表示第几个文件(有5个data_batch),'labels','data':3*32*32,'filenames'
l_dict = unpickle(l)
# print(l_dict)
# print(l_dict.keys())
# 打印索引值和图片数据
for im_idx, im_data in enumerate(l_dict[b'data']):
# 利用索引值获取filename和label
im_label = l_dict[b'labels'][im_idx]
im_name = l_dict[b'filenames'][im_idx]
print(im_label, im_name, im_data)
# 获取类别名
im_label_name = label_name[im_label]
# 将数据转换成(w,h,c)的形式
im_data = np.reshape(im_data, [3, 32, 32])
im_data = np.transpose(im_data, (1, 2, 0))
#----------------------------------------------------------------
# 显示图片
#cv2.imshow("im_data",cv2.resize(im_data, (200, 200)))
#keyvalue = cv2.waitKey(10)
#if keyvalue & 0xFF == ord(' '):
#cv2.waitKey(0)
#elif keyvalue & 0xFF == ord('q'):
# exit(0)
#----------------------------------------------------------------
if not os.path.exists("{}/{}".format(save_path,im_label_name)):
os.mkdir("{}/{}".format(save_path, im_label_name))
cv2.imwrite("{}/{}/{}".format(save_path,im_label_name,im_name.decode("utf-8")), im_data)
if __name__ == '__main__':
# 类别名
label_name = ["airplane", "automobile", "bird", "cat", "deer", "dog", "frog", "horse", "ship", "truck"]
# 训练数据读取列表
train_list = glob.glob("/home/user/pytorch_code_classes/06/cifar-10-python/cifar-10-batches-py/data_batch*")
print(train_list)
# 训练数据保存路径
save_path = "/home/user/pytorch_code_classes/06/cifar-10-python/cifar-10-batches-py/train"
# 遍历数据进行解析并保存
read(train_list,save_path)
1)unpickle函数时CIFAR10官网给的解析函数,返回的是字典格式的数据
2)train_list:保存data_batch*的路径(可以自行修改)
save_path:保存解析后的图片路径(可以自行修改,需要先创建train文件夹)
3)要解析test数据,只需要更换train_list和save_path路径(需要先创建test文件夹)即可
4)每一行代码都进行了标注,同时增加了显示图片的功能,每一步解析的格式,有不清楚的地方都可以打印出来
如果觉得不错,请点个关注,谢谢!!!