PytorchCNN项目搭建3--- Cifar10数据集的处理
整体的代码在我的github上面可以查阅
-
在实际卷积神经网络关于图像处理的实验中,我们常常直接处理的是图像本身,而不是数据集,所以我们需要学会怎么把图像转换为数据集,然后进行训练,今天的主要内容就是把图像转换为熟悉的数据集~
-
以Cifar10数据集为例,先从官网下载Cifar10数据集,然后把数据集转换成图片,再把图像转换成数据集。
前期准备:
实验设备说明:
- 我使用的是远程服务器,pycharm编程
- 先建立PytorchCNN文件夹,之后的各种文件和文件夹都会在这个文件中
1. Cifar10数据集从官网下载
Cifar10数据集共有60000张图片,其中包含50000张训练图片和10000张测试图片,每张图片为3*32*32(3通道,图片大小为32*32),
打开Cifar10官网,从Vision下载所需的部分,然后可以按照官网的教程学习后面的压缩过程。
注意:
- 因为数据集比较大,所以最好把数据集下载到根目录下面,每次使用的时候直接调用,可以节省空间。我把Cifar10放在了自己的根目录’/DATASET/Cifar10/’
- 我们可以看到,数据集中共包含6个文件, data_batch_1, data_batch_2, …, data_batch_5, 和 test_batch,每个batch为10000张图片,下面就对每个文件进行处理
2. 把训练集转换为图片, 并把图片路径及名称保存到txt文件中,还把训练集按照一定的概率分为训练数据集和验证数据集
'''seg dataset to pic'''
def Trainset2Pic(cfg):
classes = ('airplane', 'car', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck')
valid_pic_txt = open(cfg.PARA.cifar10_paths.valid_data_txt, 'w')# 设置为‘w'模式,并且放在最开始,则每次进行时,都会清空重写。
train_pic_txt = open(cfg.PARA.cifar10_paths.train_data_txt, 'w')
for i in range(1, 6):
label_batch = ('A', 'B', 'C', 'D', 'E')
traindata_file = os.path.join(cfg.PARA.cifar10_paths.original_trainset_path, 'data_batch_' + str(i))
with open(traindata_file, 'rb') as f:
train_dict = pkl.load(f,encoding='bytes') # encoding=bytes ,latin1,train_dict为字典,包括四个标签值:b'batch_label',b'labels',b'data',b'filenames'
data_train = np.array(train_dict[b'data']).reshape(10000, 3, 32, 32)
label_train = np.array(train_dict[b'labels'])
num_val = int(data_train.shape[0]*cfg.PARA.cifar10_paths.validation_rate)#验证集的个数
val_list = random.sample(list(range(0,int(data_train.shape[0]))), num_val)
for j in range(10000):
imgs = data_train[j]
r = Image.fromarray(imgs[0])
g = Image.fromarray(imgs[1])
b = Image.fromarray(imgs[2])
img