datasets数据读取器

#切分数据集
img_dir = train_parameters['img_dir']
file_name = train_parameters['file_name']
df = pd.read_csv(file_name)
df = df.sample(frac=1)
train_list = []
val_list = []
for i in range(len(df)):
    if (i <= len(df)*0.8):
        dirlist = img_dir + '/' + df.iloc[i][0] + '.jpg'
        label = df.iloc[i][1]
        datainfo = [dirlist, label]
        train_list.append(datainfo)
    else:
        dirlist = img_dir + '/' + df.iloc[i][0] + '.jpg'
        label = df.iloc[i][1]
        datainfo = [dirlist, label]
        val_list.append(datainfo)

# print(len(train_list))
# print(train_list[1][1])

定义数据集

'''
继承paddle.io.Dataset类
'''

IMAGE_SIZE = [3,224,224]
class Datasets(Dataset):
def init(self, data, mode='train'):
'''
步骤二:实现构造函数,定义数据读取,划分训练和测试、验证数据集
'''

    super(Datasets, self).__init__()

    self.data = data
    self.mode = mode
    if self.mode == 'train':
        self.transforms = T.Compose([
            # T.RandomResizedCrop(IMAGE_SIZE),
            # T.RandomHorizontalFlip(0.5),
            # T.ToTensor(),
            # T.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
            #对输入图像进行裁剪,保持图片中心点不变。transform = CenterCrop(224)。
            T.CenterCrop(224),
            #随机调整图像的亮度,对比度,饱和度和色调。 transform = ColorJitter(0.4, 0.4, 0.4, 0.4)
            T.ColorJitter(0.4, 0.4, 0.4, 0.4), 
            #依据degrees参数指定的角度范围,按照均匀分布随机产生一个角度对图像进行旋转。
            T.RandomRotation(60),  
            #将形状为 (H x W x C)的输入数据 PIL.Image 或 numpy.ndarray 转换为 (C x H x W)。
            T.ToTensor(),
            #图像归一化处理,支持两种方式: 1. 用统一的均值和标准差值对图像的每个通道进行归一化处理; 2. 对每个通道指定不同的均值和标准差值进行归一化处理。
            T.Normalize(mean=[0.485, 0.456, 0.406],std=[0.229, 0.224, 0.225],)   
        ])

    elif self.mode == 'valid':
        self.transforms = T.Compose([
            # T.Resize(IMAGE_SIZE[0]),
            # T.RandomCrop(IMAGE_SIZE),
            # T.ToTensor(),
            # T.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
            #对输入图像进行裁剪,保持图片中心点不变。transform = CenterCrop(224)。
            T.CenterCrop(224),  
            #随机调整图像的亮度,对比度,饱和度和色调。 transform = ColorJitter(0.4, 0.4, 0.4, 0.4)
            T.ColorJitter(0.4, 0.5, 0.6, 0.7), 
            #依据degrees参数指定的角度范围,按照均匀分布随机产生一个角度对图像进行旋转。
            T.RandomRotation(60),  
            #将形状为 (H x W x C)的输入数据 PIL.Image 或 numpy.ndarray 转换为 (C x H x W)。
            T.ToTensor(),
            #图像归一化处理,支持两种方式: 1. 用统一的均值和标准差值对图像的每个通道进行归一化处理; 2. 对每个通道指定不同的均值和标准差值进行归一化处理。
            T.Normalize(mean=[0.485, 0.456, 0.406],std=[0.229, 0.224, 0.225],)   
        ])


def __getitem__(self, index):
    '''
    实现getitem方法,定义指定index时如何获取数据,并返回单条数(训练数据,对应的标签)
    '''
    image = Image.open(self.data[index][0])
    if image.mode != 'RGB':
        image = image.convert('RGB')
        
    data = self.transforms(image)
    label = np.array([self.data[index][1]-1]).astype('int64')
    return data, label

def __len__(self):
    return len(self.data)

`

上一篇:Java基础语法<六> 数组 Arrays


下一篇:加载数据集