当前位置: 代码迷 >> 综合 >> 【PaddlePaddle】语义分割数据集的加载
  详细解决方案

【PaddlePaddle】语义分割数据集的加载

热度:40   发布时间:2024-03-08 04:17:26.0

【PaddlePaddle】语义分割数据集的加载

模型训练首先需要对数据集进行加载,加载数据的同时可以对数据进行数据增强操作,本文主要介绍如何使用PaddlePaddle(飞桨)来加载已制作好的数据集。

1.通过路径加载数据列表

首先要制作list文件存放图像和标签的路径,然后通过对list文件的内容读取来加载图像数据。
list文件可以按照下图所示进行撰写:
在这里插入图片描述所示为图像与其对应标签的存储位置,如果有多张图片,可以按照图示继续于下一行添加。通过如下代码即可加载源数据和标签的路径,同时random.shuffel可以对数据顺序进行打乱。

def read_list():data_list = []with open(self.image_list_file) as infile:for line in infile:data_path = os.path.join(self.image_folder, line.split()[0])label_path = os.path.join(self.image_folder, line.split()[1])data_list.append((data_path, label_path))random.shuffle(data_list)        return data_list

在对路径进行读取后便可通过opencv直接加载数据。

for data_path, label_path in self.data_list:data = cv2.imread(data_path, cv2.IMREAD_COLOR)data = cv2.cvtColor(data, cv2.COLOR_BGR2RGB)label = cv2.imread(label_path, cv2.IMREAD_GRAYSCALE)yield data, label 

2.创建数据队列

dataloader = fluid.io.DataLoader.from_generator(capacity=10, use_multiprocess=True)

可以通过官方文档中的from_generator接口产生数据加载队列的实例,capacity参数用于设置一次传入数据的量,use_multiprocess用于控制是否使用多线程访问,其他更多参数可以参阅飞浆API文档DataLoader
然后可以对具体的抽样方式进行设置

dataloader.set_sample_generator(basic_dataloader, batch_size=5, places=place)

之后便可使用加载好的数据进行训练,或者以下的代码可以帮助你查看是否读取成功:

for idx, (data, label) in enumerate(dataloader):print(f'Iter {idx}, Data shape: {data.shape}, Label shape: {label.shape}')

本文记于飞浆图像分割七日训练营期间,仅做参考,如有错误欢迎指正。

  相关解决方案