dataset:取数据以及其对应的label,并未其添加索引
提供一种方式去获取数据及其label
实现:
(1)如何获取每一个数据及其label
(2)告诉我们总共有多少的数据
dataloader:为后面的网络提供不同的数据形式
(1)把图片放在以label命名的文件夹
(2)图片与label分开两个文件夹,label存储在txt文件,包含坐标以及坐标信息,是一个ocr的数据集
(3)以label命名的图片放在文件夹中
from torch.utils.data import Dataset
import cv2
from PIL import Image
import os
class MyData(Dataset):
def __init__(self,root_dir,label_dir):
self.root_dir = root_dir
self.label_dir = label_dir
self.path = os.path.join(self.root_dir, self.label_dir)
self.img_path = os.listdir(self.path)
def __getitem__(self, idx):
img_name = self.img_path[idx]
img_item_path = os.path.join(self.root_dir, self.label_dir, img_name)
img = Image.open(img_item_path)
label = self.label_dir
return img, label
def __len__(self):
return len(self.img_path)
root_dir = "dataset/train"
ants_label_dir = "ants_image"
bees_label_dir = "bees_image"
ants_dataset = MyData(root_dir, ants_label_dir)
bees_dataset = MyData(root_dir, bees_label_dir)
train_dataset = ants_dataset + bees_dataset
img, label = train_dataset[0]
img.show()
(1)读取路径时,注意: img_path = “C:\Users\ThinkPad\PycharmProjects\pythonProject\dataset\train\ants\0013035.jpg "
改成:img_path = “C:\Users\ThinkPad\PycharmProjects\pythonProject\dataset\train\ants\0013035.jpg”
像这种路径,在window下要注意将”"变成“\”。
(2)class类中的self学问:self相当于指定了一个类中的全局变量
由于class中可以又很多个函数,但函数与函数中的变量不能相互传递的,self的使用实现了,self指定的变量给后面的函数使用
(3) import cv2 出错,使用 pip install opencv-python在terminal里安装