zoukankan      html  css  js  c++  java
  • CIFAR-10 dataset 的下载与使用、转图片

    基本信息

    CIFAR-10 是一个包含60000张图片的数据集。其中每张照片为32*32的彩色照片,每个像素点包括RGB三个数值,数值范围 0 ~ 255。
    所有照片分属10个不同的类别,分别是 ‘airplane’, ‘automobile’, ‘bird’, ‘cat’, ‘deer’, ‘dog’, ‘frog’, ‘horse’, ‘ship’, ‘truck’
    其中五万张图片被划分为训练集,剩下的一万张图片属于测试集。

    下载数据集

    打开下面的链接进入官网下载
    http://www.cs.toronto.edu/~kriz/cifar.html
    在这里插入图片描述
    下载完成后先解压缩,之后会得到如下几个文件
    在这里插入图片描述
    data_batch_1 ~ data_batch_5 是划分好的训练数据,每个文件里包含10000张图片,test_batch 是测试集数据,也包含10000张图片。他们的结构是一样的,下面就用 data_batch_1 作为例子进行说明。

    读取数据

    import pickle
    
    def load_file(filename):
        with open(filename, 'rb') as fo:
            data = pickle.load(fo, encoding='latin1')
        return data
    

    首先定义读取数据的函数,这几个文件都是通过 pickle 产生的,所以在读取的时候也要用到这个包。
    这里面返回的data是一个字典,先看看这个字典里面有哪些键吧。

    data = load_file('test_batch')
    print(data.keys())
    

    输出结果

    dict_keys(['batch_label', 'labels', 'data', 'filenames'])
    
    • batch_label

    对应的值是一个字符串,用来表明当前文件的一些基本信息。

    如果是 data_batch_1 这个文件,里面的值就是

    pythontraining batch 1 of 5
      
    如果是 test_batch 这个文件,里面的值就是

    pythontesting batch 1 of 1

    • labels

    对应的值是一个长度为10000的列表,每个数字取值范围 0~9,代表当前图片所属类别

    • data

    10000 * 3072 的二维数组,每一行代表一张图片的像素值。(32323=3072)

    • filenames

    长度为10000的列表,里面每一项是代表图片文件名的字符串。


    batches.meta 文件可以用相同的方法读取,里面存的是一些基本信息。

    • num_cases_per_batch

    10000

    • label_names

    ['airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck']

    • num_vis

    3072


    转为图片

     # -*- coding: utf-8 -*-
    from scipy.misc import imsave
    import numpy as np
    import pickle
    
    # 解压缩,返回解压后的字典
    def unpickle(file):
        fo = open(file, 'rb')
        dict = pickle.load(fo, encoding='latin1')
        fo.close()
        return dict
    
    # 生成训练集图片,如果需要png格式,只需要改图片后缀名即可。
    for j in range(1, 6):
        dataName = "data_batch_" + str(j)  # 读取当前目录下的data_batch12345文件,dataName其实也是data_batch文件的路径,本文和脚本文件在同一目录下。
        Xtr = unpickle(dataName)
        print(dataName + " is loading...")
    
        for i in range(0, 10000):
            img = np.reshape(Xtr['data'][i], (3, 32, 32))  # Xtr['data']为图片二进制数据
            img = img.transpose(1, 2, 0)  # 读取image
            picName = 'train/' + str(Xtr['labels'][i]) + '_' + str(i + (j - 1)*10000) + '.jpg'  # Xtr['labels']为图片的标签,值范围0-9,本文中,train文件夹需要存在,并与脚本文件在同一目录下。
            imsave(picName, img)
        print(dataName + " loaded.")
    
    print("test_batch is loading...")
    
    # 生成测试集图片
    testXtr = unpickle("test_batch")
    for i in range(0, 10000):
        img = np.reshape(testXtr['data'][i], (3, 32, 32))
        img = img.transpose(1, 2, 0)
        picName = 'test/' + str(testXtr['labels'][i]) + '_' + str(i) + '.jpg'
        imsave(picName, img)
    print("test_batch loaded.")
    

    在这里插入图片描述

  • 相关阅读:
    【洛谷P4557】【JSOI2018】—战争(Minkowski Sum)
    【洛谷P4557】【JSOI2018】—战争(Minkowski Sum)
    【BZOJ3879】—SvT(后缀自动机+虚树/后缀自动机+单调栈)
    【BZOJ3879】—SvT(后缀自动机+虚树/后缀自动机+单调栈)
    多测师讲解pyhon__hashlib_高级讲师肖sir
    多测师讲解python函数 _open_高级讲师肖sir
    多测师讲解python函数 _zip_高级讲师肖sir
    多测师讲解内置函数 _format_高级讲师肖sir
    多测师讲解python _函数return_高级讲师肖sir
    多测师讲解python _函数中变量_高级讲师肖sir
  • 原文地址:https://www.cnblogs.com/gmhappy/p/11864016.html
Copyright © 2011-2022 走看看