首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >初识Cifar10

初识Cifar10

作者头像
Tom2Code
发布2022-06-08 13:49:52
发布2022-06-08 13:49:52
1.7K0
举报
文章被收录于专栏:TomTom

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是我们的测试数据集

继续阅读官网的介绍,我们可以看到官网给了我们关于如何“食用”这些数据的教程:

代码语言:javascript
复制
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的数据集进行拆包

代码语言:javascript
复制
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的数据集的处理。

-完-

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Tom的小院 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档