通用图像分类公开的标准数据集常用的有
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([email protected] )
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
欢迎关注下方“非著名资深码农“公众号进行交流~
本条目发布于
2018年12月26日
。属于
paddle
分类,被贴了
cifar10
、
Paddle
、
pickle
、
图像分类
标签。
作者是
yanjingang
。
←
Kaggle
小猪学AI—图像分类之猫狗识别
→
IMU—H30九轴AHRS
Nvidia Jetson AGX Orin系统刷写
TensorRT 10.x NOTFOUND TENSORRT_NVPARSERS_LIBRARY 问题
RS16在Ubuntu22下无法显示点云问题
Autoware—Universe初探
Autoware—概述
NVMe SSD磁盘寿命评估方法
自动驾驶线控底盘行业研究报告(2024)
ROS—laser_filters屏蔽无效雷达数据