【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}')
本文记于飞浆图像分割七日训练营期间,仅做参考,如有错误欢迎指正。