python 手动读取cifar10_如何用python解析cifar10数据集图片
概述
通用图像分类公开的标准数据集常用的有CIFAR、ImageNet、COCO等,常用的细粒度图像分类数据集包括CUB-200-2011、Stanford Dog、Oxford-flowers等。其中ImageNet数据集规模相对较大,大量研究成果基于ImageNet。ImageNet数据从2010年来稍有变化,常用的是ImageNet-2012数据集,该数据集包含1000个类别:训练集包含1,281,167张图片,每个类别数据732至1300张不等,验证集包含50,000张图片,平均每个类别50张图片。
由于ImageNet数据集较大,下载和训练较慢,为了方便快速学习图像分类,我们使用CIFAR10数据集。本文讲解如何将数据集反向重建为rgb彩色图片。
cifar10数据集共有60000张彩色图像,图像大小是3通道的32*32,分为10个类,每类6000张图。这里面有50000张用于训练,构成了5个训练批,每一批10000张图;另外10000用于测试,单独构成一批。测试批的数据里,取自10类中的每一类,每一类随机取1000张。抽剩下的就随机排列组成了训练批。注意一个训练批中的各类图像并不一定数量相同,总的来看训练批,每一类都有5000张图。
数据的下载:共有三个版本:
python: http://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz
MATLAB: http://www.cs.toronto.edu/~kriz/cifar-10-matlab.tar.gz
bin: http://www.cs.toronto.edu/~kriz/cifar-10-binary.tar.gz
下图是从每个类别中随机抽取了10张图片,展示了所有的类别。
解析
我们下载python版本的数据集 cifar-10-python.tar.gz 并解压,可以看到有5个trainbatch文件,1个testbatch文件:
文件使用pickle格式压缩,所以需要使用python的pickle库进行读取:
import cPickle
data = {}
with open(file, 'rb') as fo:
data = cPickle.load(fo)
print(data.keys())
#data是个dict,包含图片像素数据data和对应label数据{'data':[],'labels':[],'...'}
完整的读取并生成train/test图片的代码:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
File: read_cifar10.py
Desc: 读取cifar10数据集的图片和label,并生成以序号+label命名的图片
Author:yanjingang(yanjingang@mail.com)
Date: 2018/12/25 23:12
Cmd: nohup python read_cifar10.py >log/read_cifar10.log &
"""
import os
import random
import platform
import numpy
import subprocess
from PIL import Image
import utils
import cPickle
# cifar10训练集目录 from: http://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz
cifar10_path = './data/cifar-10-batches-py/'
train_batchs = [
cifar10_path + 'data_batch_1',
cifar10_path + 'data_batch_2',
cifar10_path + 'data_batch_3',
cifar10_path + 'data_batch_4',
cifar10_path + 'data_batch_5'
]
test_batchs = [cifar10_path + 'test_batch']
# 读取出的图片存放位置
output_path = './data/'
# label含义
label_list = ["airplane", "automobile", "bird", "cat", "deer", "dog", "frog", "horse", "ship", "truck"]
def reader_cifar10(batchs, path='train'):
"""读取cifar10数据集的图片和label,并生成以序号-label-labelname命名的图片"""
id = 0 # 图片集序号
for file in batchs:
data = {}
with open(file, 'rb') as fo:
data = cPickle.load(fo)
print(data.keys())
# print(data['data'])
for i in xrange(len(data['data'])): # 遍历图片像素数据
id += 1
# 读取单张图片数据
img = data['data'][i]
label = data['labels'][i]
label_name = label_list[label]
print(img)
print(len(img))
print(str(label) + ' : ' + label_name)
# 重建rgb彩色图片
img = img.reshape(3, 32, 32)
print(img)
print(img.shape)
r = Image.fromarray(img[0]).convert('L')
g = Image.fromarray(img[1]).convert('L')
b = Image.fromarray(img[2]).convert('L')
new_img = Image.merge('RGB', (r, g, b))
# 保存图片(序号-label-labelname.png)
utils.mkdir(output_path + path)
save_file = output_path + path + '/' + str(id) + '-' + str(label) + '-' + label_name + '.png'
new_img.save(save_file)
print save_file
# if id > 10:
# break
# break
if __name__ == '__main__':
# 读取训练集
# reader_cifar10(train_batchs, path='train')
# 读取测试集
reader_cifar10(test_batchs, path='test')
单图片日志:
*注:可以看到单img像素数据是一个3072长度的一维数组,先reshape成3*32*32的r/g/b数据格式再merge成一张彩图。
生成的本地图片:
yan 18.12.25 23:36
参考:https://blog.csdn.net/jinxiaonian11/article/details/80192161
python 手动读取cifar10_如何用python解析cifar10数据集图片相关推荐
- python逐行读取json_如何用python读取json文件里指定的数据
JSON文件who.json内容如下:{"name":"mss","version":"1.0.0","des ...
- Python学习干货,如何用Python进行数据分析?
1.为什么选择Python进行数据分析? Python是一门动态的.面向对象的脚本语言,同时也是一门简约,通俗易懂的编程语言.Python入门简单,代码可读性强,一段好的Python代码,阅读起来像是 ...
- python怎么读_如何用Python读写文件
前面我们已经介绍了很多Python相关的基础知识,大家是不是对Python已经有了进一步认识了呢?作为人工智能时代的热门编程语言,开始接触并学习Python的孩子越来越多,家长们都不想让自己的孩子落于 ...
- python与excel表格-如何用python处理excel表格
openpyxl是一个第三方库,可以处理xlsx格式的Excel文件.pip install openpyxl安装. 读取Excel文件 需要导入相关函数 from openpyxl import l ...
- 怎么用python处理excel文件-如何用python处理excel表格
openpyxl是一个第三方库,可以处理xlsx格式的Excel文件.pip install openpyxl安装. 读取Excel文件 需要导入相关函数 from openpyxl import l ...
- python处理excel表格-如何用python处理excel表格
openpyxl是一个第三方库,可以处理xlsx格式的Excel文件.pip install openpyxl安装. 读取Excel文件 需要导入相关函数 from openpyxl import l ...
- Python趣味编程 | 看看如何用Python生成素描风格的自拍照,并且加上Logo
来源:关于数据分析与可 可能对于女生来说,有一张手绘风格的自拍照也是一件值得开心的事儿,或许对男生来说也是一样的道理,今天小编就来分享一下如何用Python来生成一张手绘风格的自拍照,并且加上我们所要 ...
- python 英语分词_如何用Python做中文分词?
打算绘制中文词云图?那你得先学会如何做中文文本分词.跟着我们的教程,一步步用Python来动手实践吧. 需求 在<如何用Python做词云>一文中,我们介绍了英文文本的词云制作方法.大家玩 ...
- 用python画耳朵_如何用python画猪头
用python画猪头的方法:首先设置画布和画笔,代码为[a.screensize(400,300)a.setup(width=400,height=300)]:然后画脸型,代码为[.goto(-100 ...
最新文章
- 30年后,请再来看霍金的“人工智能威胁论”
- selenium作业题
- java音乐播放器文库_android音乐播放器开发教程
- lr分析器的设计与实现实验报告_《计算机导论》课程实验报告(一维数组)
- Drawing绘图halcon算子,持续更新
- C语言之malloc和free总结
- java并发-内存模型与volatile
- python和json转换_【Python】python和json数据相互转换,json读取和写入,repr和eval()使用...
- 今天中午过的不爽的原因分析
- 由SQL数据库转换Redis的实例
- Oracle、plsql安装以及使用教程
- 接口性能测试方案分析
- 电脑分屏没有声音_电脑用HDMI线分屏后,耳机或音箱没声音之完美解决!
- 手机wps怎么设置打印横竖_WPS中横竖打印怎么设置
- 操作系统中的FCFS(First Come First Served)先来先服务算法,java实现
- 30KP30A高功率瞬态二极管参数
- jquery广告浮动插件
- Python脚本抢购茅台,一键式傻瓜教程,不会python 也能用
- 茶文化网站html模板,茶文化网页模板图片
- 试论社会学专业定×××方法课程教学现状及改革途径