CV入门小实验
首先cifar10是一个数据集
CIFAR-10 是由 Hinton 的学生 Alex Krizhevsky 和 Ilya Sutskever 整理的一个用于识别普适物体的小型数据集。一共包含 10 个类别的 RGB 彩色图 片:飞机( airplane )、汽车( automobile )、鸟类( bird )、猫( cat )、鹿( deer )、狗( dog )、蛙类( frog )、马( horse )、船( ship )和卡车( truck )。图片的尺寸为 32×32 ,数据集中一共有 50000 张训练图片和 10000 张测试图片。CIFAR-10 的图片样例如图所示。

来自于cifar10的官网介绍的图片
与 MNIST 数据集中对比, CIFAR-10 具有以下不同点: • CIFAR-10 是 3 通道的彩色 RGB 图像,而 MNIST 是灰度图像。 • CIFAR-10 的图片尺寸为 32×32, 而 MNIST 的图片尺寸为 28×28,比 MNIST 稍大。 • 相比于手写字符, CIFAR-10 含有的是现实世界中真实的物体,不仅噪声很大,而且物体的比例、 特征都不尽相同,这为识别带来很大困难。直接的线性模型如 Softmax 在 CIFAR-10 上表现得很差。

官网有三个版本的下载地址
我们今天使用python来解析这些图片,所以我们下载对应的python version

下载之后解压打开就是这个样子的
data_batch_1到5分别对用的是我们的训练数据集
test_batch是我们的测试数据集
继续阅读官网的介绍,我们可以看到官网给了我们关于如何“食用”这些数据的教程:
def unpickle(file):
import pickle
with open(file, 'rb') as fo:
dict = pickle.load(fo, encoding='bytes')
return dict这是一个食用数据集的python函数

通过这个函数加载之后,我们可以得到两个属性分别是data和labels
我们可以打印一下每份数据里的信息

可以看到其实主要有4个属性分别是
b’batch_label’ :所属文件集
b’labels’ :图片标签
b’data’ :图片数据
b’filename’ :图片名称
下面我们就写程序,对cifar10的数据集进行拆包
import pickle
import numpy as np
import cv2
import os
def unpicle(file):
with open(file,'rb') as fo:
dict=pickle.load(fo,encoding='bytes')
return dict
label_name=["airplane","automobile","bird","cat","deer","dog","frog","horse","ship","truck"]
import glob
train_list=glob.glob("cifar-10-python/test_batch")
print(train_list)
save_path='cifar-10-python/test'
for l in train_list:
print(l)
l_dict=unpicle(l)
print(l_dict.keys())
for im_idx,im_data in enumerate(l_dict[b'data']):
im_label=l_dict[b'labels'][im_idx]
im_name=l_dict[b'filenames'][im_idx]
#print(im_label,im_name)
im_label_name=label_name[im_label]
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,(100,100)))
# cv2.waitKey(0)
if not os.path.exists("{}/{}".format(save_path,im_label_name)):
# 如果文件夹不存在 则创建
os.mkdir("{}/{}".format(save_path,im_label_name))
print(im_label_name+"directory make successfully")
cv2.imwrite("{}/{}/{}".format(save_path,im_label_name,im_name.decode("utf-8")),im_data)6-9行代码使用的是cifar10官网自带的函数
这个代码主要是对测试数据进行拆包
遍历每个数据集,然后对图片进行处理,并且创立对应的文件夹,使对应的图片类型在对应的文件夹下

至此,我们就完成了对cifar10的数据集的处理。
-完-