加载数据
* Dataset提供一种方式:来获取数据及其label,给数据进行编号
* Dataloader为神经网络提供不同的数据形式
- Dataset的组织形式有很多种,例如:
- 将label放在文件夹名上,如下:
#Dateset
# --train
# --ants
# --001.jpg
# --002.jpg
# .....
# --bees
# --124.jpg
# --125.jpg
# .....
# --val
# .....
* 将label单独放在txt文件中,如下:
#Dateset
# --train
# --train_images
# --001.jpg
# --002.jpg
# .....
# --124.jpg
# --125.jpg
# .....
# --train_labels
# --001.txt
# --002.txt
# .....
# --124.txt
# --125.txt
# .....
# --val
# .....
* 将label放在文件名上,如下:
#Dateset
# --train
# --train_images
# --ant001.jpg
# --ant002.jpg
# .....
# --bee124.jpg
# --bee125.jpg
# .....
# --val
# .....
数据集类
- 获取图片地址的方法
- 可以通过PIL包中的Image库来获取图片信息,展示图片等,如下:
- 如果我们想要获取图片,第一步是获取图片地址,可以先生成图片数据集的地址列表,再通过index索引来获取所有图片地址
- 可以通过os库中的listdir()函数来获取数据集文件夹的所有文件名(os库是python中用于文件操作的一个库),如下:
- 可以通过PIL包中的Image库来获取图片信息,展示图片等,如下:
- 定义构造方法,初始化图片路径、根文件路径、标签路径,生成图片名列表,如下:
def __init__(self, root_dir, label_dir):
# 初始化图片路径、根文件路径、标签路径
self.root_dir = root_dir # 将函数内的局部变量root_dir赋值给成员变量self.root_dir
self.label_dir = label_dir # 将函数内的局部变量label_dir赋值给成员变量self.label_dir
self.path = os.path.join(root_dir, label_dir) # 将root_dir和label_dir拼接成一个路径,赋值给成员变量self.path,并满足windows和linux的路径拼接
self.img_path = os.listdir(self.path) # 获取路径下的所有文件名,赋值给成员变量self.img_path
- 获取每一张图片的路径、图片名、label,并返回图片对象和label,如下:
def __getitem__(self, idx):
img_name = self.img_path_list[idx] # 获取第idx个图片名
img_item_path = os.path.join(self.path, img_name) # 将路径和图片名拼接成一个完整的路径
img = Image.open(img_item_path) # 读取图片
label = self.label_dir # 获取标签
return img, label # 返回图片和标签
- 通过数据集对象[ idx ],可以返回图片对象和label
- 两个数据集对象可以进行相加操作,返回的是一个拼接后的数据集,如下: