1.分类训练之数据准备-CIFAR10数据解析

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)每一行代码都进行了标注,同时增加了显示图片的功能,每一步解析的格式,有不清楚的地方都可以打印出来

如果觉得不错,请点个关注,谢谢!!!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呆呆珝

您的打赏是我的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值