读取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格式的数据 再一次解析图片 成功!

在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值