cifar-10学习——1、获取样本图片和标签模拟实际场景训练

最近想弄点样本来做个简单的图片分类,期望能找到所有的样本图片文件和标签文件,这样就可以模拟实际场景下进行机器学习了。在网上找了一番,都是打包的数据,也有解析出样本图片的,但是都不是很全,例如缺少标签。下面就尝试从cifar-10中获取所有图片和样本数据。

cifar-10 数据集介绍请看官网:

http://www.cs.toronto.edu/~kriz/cifar.html


样本共有10个分类:飞机、汽车、鸟、猫、鹿、狗、青蛙、马、船、卡车

数据集有60000张 32x32 像素彩色图片(RGB)

注意这里的RGB很重要,在训练过程中要和MNIST区分开,因为MNIST是单色的而cifar-10是RGB的。

每个类别图片有6000张,10个类别图片共60000张 = 训练图片50000张 + 测试图片10000张。

先从官网下载样本数据集如下:


好了,有个样本数据集我们现在将样本解析成图片保存到本地,我们希望图片的命名方式可以显示出其类别,例如:1_cat.png,78_airplan.png。

打开spyder开始编写代码 cifar-10可视化.py:

import pickle as p  
import numpy as np  
from PIL import Image  
import os

#加载数据
def load_CIFAR_batch(filename):  
    with open(filename, 'rb') as f:  
        datadict = p.load(f,encoding='latin1')  
        X = datadict['data']  
        Y = datadict['labels']  
        X = X.reshape(10000, 3, 32, 32)  
        Y = np.array(Y)  
        return X, Y  
  
#将标签转换成英文       
def getLabelType(typeIndex,label):
    index = label[typeIndex]
    if index == 0:
        return "airplane"
    if index == 1:
        return "automobile"
    if index == 2:
        return "bird"
    if index == 3:
        return "cat"
    if index == 4:
        return "deer"
    if index == 5:
        return "dog"
    if index == 6:
        return "frog"
    if index == 7:
        return "horse"
    if index == 8:
        return "ship"
    if index == 9:
        return "truck"
    
#创建每个batch图片保存的文件夹   
def mkdir(path):  
    folder = os.path.exists(path)  
    if not folder:              
        os.makedirs(path)
        print("创建文件夹"+path)
        return 1
    else:
        return 0
  
    
#保存图片和标签
def saveImgAndLabel(tag):
    saveDir = "./batch_images_"+str(tag)
    if mkdir(saveDir) == 0:
        return 
    if tag == "test":
        imgX, labelX = load_CIFAR_batch("./test_batch") #加载测试数据集
    else:
        imgX, labelX = load_CIFAR_batch("./data_batch_"+str(tag)) #加载训练数据集
    for i in range(0,10000): 
        imgs = imgX[i]  
        img0 = imgs[0]  
        img1 = imgs[1]  
        img2 = imgs[2]  
        #生成image对象RGB 
        i0 = Image.fromarray(img0) 
        i1 = Image.fromarray(img1)  
        i2 = Image.fromarray(img2)  
        img = Image.merge("RGB",(i0,i1,i2)) 
        #这里是生成英文标签的名字
        label = getLabelType(i,labelX)
        name = str(i)+'_'+label+'.png'
        img.save(saveDir+"/"+name,"png") 
        print(name)

#程序入口
if __name__ == "__main__":  
    for i in range(1,7):
        if i == 6:
            saveImgAndLabel('test')
        else:
            saveImgAndLabel(i)
    print("保存完毕.")  
        
    

运行完成后当前目录如下:


我们打开看一下:



ok,60000张彩色图片带标签都生成了,现在看这些图片感觉直观多了,我们可以针对这些样本开始自己的训练了。

下一篇我们再拿这些样本(假设这些样本是自己实际场景的)进行训练。一步一步从最基本、最原始的开始。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值