cifar-10是常用的深度学习图片库之一,本人深度学习超级小白一枚,在转图片这一手操作上不太懂,上网又是各种陈年老坑,因此在摸爬滚打最终成功之后写了这篇文章。注意,这篇文章大多讲楼主这样的超级萌新遇到的坑,比较熟悉python的朋友可以直接跳到最后看代码。注意本文所用的是cifar-10的python版,下载地址:https://pan.baidu.com/s/1F1wObA47RVKf44XrclYkLQ 提取码hixc

首先,需要import的:imageio,numpy,以及pickle。我的python是官网下载的python3.6.8windows版本,这几个直接在cmd里pip安装即可,如果速度奇慢,可以pip之后将显示出来的网址复制到迅雷里下载whl文件,速度堪比火箭,下载完后cmd进入下载文件所在的文件夹中然后pip install (此处填文件全名,后缀也得加上) 即可。

本人代码编辑用的pycharm。当然用什么编辑并不影响,值得一提的是对于pycharm超级萌新(楼主)来说开始使用时会有你下载的包import提示找不到的情况。解决方法这位大佬有写:

进入正题,pycharm创建python,然后新建python代码,将cifar解压后的好几个文件(例如test_batch)放到新项目文件夹下,然后再在这个文件夹下新建train和test文件夹。至此所有准备工作做完。

下面是代码:

#encoding:utf-8
import imageio
import numpy as np
# 解压缩,返回解压后的字典
def unpickle(file):
import pickle
fo = open(file, 'rb')
dict = pickle.load(fo,encoding='bytes')
fo.close()
return dict
# 生成训练集图片,如果需要png格式,只需要改图片后缀名即可。
for j in range(1, 6):
dataName = "data_batch_" + str(j) # 读取当前目录下的data_batch12345文件,dataName其实也是data_batch文件的路径,本文和脚本文件在同一目录下。
Xtr = unpickle(dataName)
print (dataName + " is loading...")
for i in range(0, 10000):
img = np.reshape(Xtr[b'data'][i], (3, 32, 32)) # Xtr['data']为图片二进制数据
img = img.transpose(1, 2, 0) # 读取image
picName = 'train/' + str(Xtr[b'labels'][i]) + '_' + str(i + (j - 1)*10000) + '.jpg' # Xtr['labels']为图片的标签,值范围0-9,本文中,train文件夹需要存在,并与脚本文件在同一目录下。
imageio.imwrite(picName, img)
print (dataName + " loaded.")
print ("test_batch is loading...")
# 生成测试集图片
testXtr = unpickle("test_batch")
for i in range(0, 10000):
img = np.reshape(testXtr[b'data'][i], (3, 32, 32))
img = img.transpose(1, 2, 0)
picName = 'test/' + str(testXtr[b'labels'][i]) + '_' + str(i) + '.jpg'
imageio.imwrite(picName, img)
print( "test_batch loaded.")1

实测可用,值得注意的是楼主之前搜到的网上的代码大都用了scipy里面的imread,imsave,但楼主自己尝试时了解到1.3版本scipy中已弃了它们,而1.2版本的scipy楼主没找到合适的,所以改用imageio。

将代码拷入pycharm后如果你的库都齐全,直接运行,等待几分钟后即可在train和test文件夹中找到图片啦。