概述

通用图像分类公开的标准数据集常用的有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数据集图片相关推荐

  1. python逐行读取json_如何用python读取json文件里指定的数据

    JSON文件who.json内容如下:{"name":"mss","version":"1.0.0","des ...

  2. Python学习干货,如何用Python进行数据分析?

    1.为什么选择Python进行数据分析? Python是一门动态的.面向对象的脚本语言,同时也是一门简约,通俗易懂的编程语言.Python入门简单,代码可读性强,一段好的Python代码,阅读起来像是 ...

  3. python怎么读_如何用Python读写文件

    前面我们已经介绍了很多Python相关的基础知识,大家是不是对Python已经有了进一步认识了呢?作为人工智能时代的热门编程语言,开始接触并学习Python的孩子越来越多,家长们都不想让自己的孩子落于 ...

  4. python与excel表格-如何用python处理excel表格

    openpyxl是一个第三方库,可以处理xlsx格式的Excel文件.pip install openpyxl安装. 读取Excel文件 需要导入相关函数 from openpyxl import l ...

  5. 怎么用python处理excel文件-如何用python处理excel表格

    openpyxl是一个第三方库,可以处理xlsx格式的Excel文件.pip install openpyxl安装. 读取Excel文件 需要导入相关函数 from openpyxl import l ...

  6. python处理excel表格-如何用python处理excel表格

    openpyxl是一个第三方库,可以处理xlsx格式的Excel文件.pip install openpyxl安装. 读取Excel文件 需要导入相关函数 from openpyxl import l ...

  7. Python趣味编程 | 看看如何用Python生成素描风格的自拍照,并且加上Logo

    来源:关于数据分析与可 可能对于女生来说,有一张手绘风格的自拍照也是一件值得开心的事儿,或许对男生来说也是一样的道理,今天小编就来分享一下如何用Python来生成一张手绘风格的自拍照,并且加上我们所要 ...

  8. python 英语分词_如何用Python做中文分词?

    打算绘制中文词云图?那你得先学会如何做中文文本分词.跟着我们的教程,一步步用Python来动手实践吧. 需求 在<如何用Python做词云>一文中,我们介绍了英文文本的词云制作方法.大家玩 ...

  9. 用python画耳朵_如何用python画猪头

    用python画猪头的方法:首先设置画布和画笔,代码为[a.screensize(400,300)a.setup(width=400,height=300)]:然后画脸型,代码为[.goto(-100 ...

最新文章

  1. 30年后,请再来看霍金的“人工智能威胁论”
  2. selenium作业题
  3. java音乐播放器文库_android音乐播放器开发教程
  4. lr分析器的设计与实现实验报告_《计算机导论》课程实验报告(一维数组)
  5. Drawing绘图halcon算子,持续更新
  6. C语言之malloc和free总结
  7. java并发-内存模型与volatile
  8. python和json转换_【Python】python和json数据相互转换,json读取和写入,repr和eval()使用...
  9. 今天中午过的不爽的原因分析
  10. 由SQL数据库转换Redis的实例
  11. Oracle、plsql安装以及使用教程
  12. 接口性能测试方案分析
  13. 电脑分屏没有声音_电脑用HDMI线分屏后,耳机或音箱没声音之完美解决!
  14. 手机wps怎么设置打印横竖_WPS中横竖打印怎么设置
  15. 操作系统中的FCFS(First Come First Served)先来先服务算法,java实现
  16. 30KP30A高功率瞬态二极管参数
  17. jquery广告浮动插件
  18. Python脚本抢购茅台,一键式傻瓜教程,不会python 也能用
  19. 茶文化网站html模板,茶文化网页模板图片
  20. 试论社会学专业定×××方法课程教学现状及改革途径

热门文章

  1. 解决mac 休眠后唤醒死机问题
  2. 【2020年高被引学者】 陶大程 悉尼大学
  3. Excel简单函数运用
  4. html基本标记练习钱塘湖春行,实验1HTML基本标记的练习.doc
  5. 信奥中的数学 相关资料汇总(2022.07.08)
  6. Android 渐变色背景样式
  7. 淘宝商品详情接口抓取
  8. win10开安卓模拟器蓝屏
  9. python+VBA实现照片转Excel
  10. 全国大学生软件测试大赛Web应用测试(五)Jmeter性能测试环境配置