【无标题】

项目场景:Pytorch细粒度图像分类

描述:dataloader的一些操作,在此记录一下

定义Data_Loader类,后续可以直接应用

  • 项目场景:Pytorch细粒度图像分类
  • 1.读取csv文档内容
    • 1.1读取csv文档内容
    • 1.2拆解每一行的内容
  • 2.转换成完整路径
  • 3.转换成标准标签
  • 4.这才开始使用torch自带的DataLoader
  • 5.图像预处理

1.读取csv文档内容

1.1读取csv文档内容

返回每一行的数据,用列表储存,一行内的数据用’,'隔开

  csv_path = "G:/train_label.csv"
  with open(csv_path, 'r', encoding='utf-8') as f:
       imgs_info = f.readlines()
       imgs_info = list(map(lambda x: x.strip().split('\t'), imgs_info))

1.2拆解每一行的内容

将列表转为字符串,再通过’,'分割字符串
这里index+1是因为csv中第一行,也就是在列表索引的第0个,是标题,不算数据。所以在提取数据的时候从列表索引的下一号开始。

img_path, label = ''.join(self.imgs_info[index + 1]).split(',')

2.转换成完整路径

刚刚提取出来的path只是图像文件名,不包括完整路径

PATH_train = "G:/plant_dataset/train/images/"
img_path = PATH_train + img_path

3.转换成标准标签

提取出来的标签是字符串,要转换成标准的数字标签,有很多种方法,这里用简单的字典实现。

unit_rooms = {'scab': 0, 'healthy': 1, 'frog_eye_leaf_spot': 2, 'rust': 3,
              'complex': 4, 'powdery_mildew': 5
              }
label = unit_rooms[label]

注意最好从0开始计数,不然构建网络的时候可能会报错,我这里是6个分类,标签是[0,1,2,3,4,5]

4.这才开始使用torch自带的DataLoader

先对刚刚的类创建一个实例

train_dataset = Data_Loader(csv_path, True)
train_loader = torch.utils.data.DataLoader(dataset=train_dataset,
                                               batch_size=10,
                                               shuffle=False)
# for image, label in train_loader:
#     print(image.shape)
#     print(label)

5.图像预处理

待更

你可能感兴趣的:(pytorch+python,小知识点,pytorch,实验,python,pillow)