在这次比赛中,数据集分为几个文件,第一个是data图片数据集,大小不一并且有的是灰度图像,处理时要考虑种类;第二个是类别表格;第三个是图片名称对应的类别;在者是每种类别对应的数字编码0-19。处理时要匹配data图片读取顺序和表格中的数据。为了这个比赛先学的几天python所以在写代码的过程中很多都不懂,查阅了很多资料。
1.头文件
import os
import csv
import numpy as np
from scipy.misc import imread
import scipy.misc as misc
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
from PIL import Image
from sklearn.decomposition import PCA
2.读取list.csv将每张图片的名称和类别数字读取出来,并且用dict字典对应,为的是后面读取图片时能够匹配。这里我用了list先存储,之后再转为numpy。
对csv文件读取参考https://www.cnblogs.com/liujinhong/p/5937527.html
https://www.cnblogs.com/unnameable/p/7366437.html
x = []
y = []
dic = dict()
#get the classes
with open('list.csv',mode='r',encoding='utf-8') as f:
csv_reader = csv.reader(f)
for row in csv_reader:
a = row[0]
b = int(row[1])
dic[a] = b
3.读取data文件夹,将图片读入内存,先将图片转为灰度图convert,然后在调整大小imresize,这里调整大小有很多方式,否则出错。调整大小为(224,224),resnet用的是224*224,我也就跟着调整为这么大。
这里图像操作和读取文件参考了这些博客
读取https://www.cnblogs.com/zangyu/p/5764905.html和
https://blog.csdn.net/renelian1572/article/details/78761278
操作https://blog.csdn.net/wuxiaobingandbob/article/details/51751899和
http://www.jb51.net/article/128156.htm
连接字符串https://www.cnblogs.com/chenjingyi/p/5741901.html
#get the dataset
i = 0
for filename in os.listdir(r"./data"):
x1 = np.array(Image.open("./data/" + filename).convert('L'))
x2 = misc.imresize(x1, [224, 224], interp = 'nearest')
x.append(x2)
name = filename.split('.', 1)
y.append(dic[name[0]])
#print(name[0])
#print(dic[name[0]])
#if(i > 10):
# break
#i = i + 1
4.将list转换为numpy参考https://blog.csdn.net/baiyu9821179/article/details/53365476
#list to numpy
xx = np.array(x)
yy = np.array(y)
yy = np.uint8(yy)
5.防止图片有顺序,所以打乱数据集,这里可以将数据和类别一起同步打乱。
这里参考了https://www.cnblogs.com/jermmyhsu/p/8195658.html
#shuffle the dataset
permutation = np.random.permutation(xx.shape[0])
x_train = xx[permutation,:,:]
y_train = yy[permutation]
6.保存数据,给深度学习使用
np.save("image1.npy", x_train)
np.save("classes1.npy", y_train)