欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

读取Cifar10数据 还原成图片时错位失真 问题发现及解决

程序员文章站 2022-07-08 08:54:09
...

背景

在下载了cifar10的数据后 进行了还原图像的处理,使用的是二进制文件的处理方式
但是还原出来的图片失真错位
读取Cifar10数据 还原成图片时错位失真 问题发现及解决

解决

每个图片的名字包括了 类别_序号.jpg
类别范围0-9
很显然数据是错误的

再次看了下载的数据 发现自己下载到的是python格式的数据~~~囧

官网说明:http://www.cs.toronto.edu/~kriz/cifar.html

cifar10 提供了三种不同类型的数据格式
python version, matlab version 以及 binary version
具体数据下载地址
python version:http://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz
matlab version:http://www.cs.toronto.edu/~kriz/cifar-10-matlab.tar.gz
binary version:http://www.cs.toronto.edu/~kriz/cifar-10-binary.tar.gz

python/matlab的格式是一致的:

包含了data_batch_1, data_batch_2, …, data_batch_5以及test_batch
通过下述函数可以解析 的到一个dict

def unpickle(file):
    import pickle
    with open(file, 'rb') as fo:
        dict = pickle.load(fo, encoding='bytes')
    return dict

这个字典的格式如下:

  • data —一个100003072的numpy数组,数据类型是无符号整形uint8。这个数组的每一行存储了3232大小的彩色图像(32323通道=3072)。前1024个数是red通道,然后分别是green,blue。另外,图像是以行的顺序存储的,也就是说前32个数就是这幅图的像素矩阵的第一行。
  • labels —一个范围在0-9的含有10000个数的列表(一维的数组)。第i个数就是第i个图像的类标。

此外除了data_batch外还有一个batches.meta的文件也可解析成字典

  • label_names — 一个包含10个元素的列表,每一个描述了labels array中每个数字对应类标的名字。比如:label_names[0] = “airplane”, label_names[1] = “automobile”

binary格式:

包含了data_batch_1.bin, data_batch_2.bin, …, data_batch_5.bin, 以及 test_batch.bin. (注意.bin结尾)
格式如下

<1 x label><3072 x pixel>
...
<1 x label><3072 x pixel>

也就是说,第一个字节是指类标,在0-9之间。接下来就是3072个字节,内容与上面python版本的的一样。每个文件都有10000这样的3073个字节,没有任何分隔行,所以每个文件都是30730000字节的长度。

这就是对cifar10数据的格式介绍

当时就是因为在下载时没有仔细查看下下来的格式类型 导致了用binary的处理方式去处理了python的数据 从而图像失真错位

重新下载了binary格式的数据 再一次解析图片 成功!

读取Cifar10数据 还原成图片时错位失真 问题发现及解决

相关标签: tensorflow cifar10