图像分割 把用labelme标注生成的数据集改成PaddleSeg支持的数据集格式
labelme标注后生成的数据集文件格式
img.png
label.png
label_names.txt
label_viz.png
PaddleSeg建立自定义数据集的文件格式
摘自PaddleSeg
labelme生成的数据集格式
格式转换代码(ps: 只是提取文件位置,没有移动文件)
def _sort_images(image_dir):
"""
对文件夹内的图像进行按照文件名排序
"""
images = []
labels = []
for image_name in os.listdir(image_dir):
if os.path.isdir(os.path.join(image_dir, image_name)):
images.append(os.path.join(os.path.join(image_dir, image_name), 'img.png'))
labels.append(os.path.join(os.path.join(image_dir, image_name), 'label.png'))
return sorted(images), sorted(labels)
"""
这里的分割符是\t,后面使用PaddleSeg的时候要注意修改相关代码,因为PaddleSeg读取文件时默认的分割符是空格。
当然也可以将这里的\t替换为空格。
"""
def write_file(mode, images, labels):
with open('./{}.txt'.format(mode), 'w') as f:
for i in range(len(images)):
#f.write('{}\t{}\n'.format(images[i], labels[i]))
f.write('{} {}\n'.format(images[i], labels[i]))
"""
由于所有文件都是散落在文件夹中,在训练时我们需要使用的是数据集和标签对应的数据关系,
所以我们第一步是对原始的数据集进行整理,得到数据集和标签两个数组,分别一一对应。
这样可以在使用的时候能够很方便的找到原始数据和标签的对应关系,否则对于原有的文件夹图片数据无法直接应用。
"""
images, labels = _sort_images(images_path)
eval_num = int(image_count * 0.15)
"""
由于图片数量有限,这里的测试集和验证集采用相同的一组图片。
"""
write_file('train', images[:-eval_num], labels[:-eval_num])
write_file('test', images[-eval_num:], labels[-eval_num:])
write_file('eval', images[-eval_num:], labels[-eval_num:])
关于数据集的配置文件格式
train_dataset:
type: Dataset#数据集类型
dataset_root: /home/aistudio #数据集所在根目录
train_path: train.txt #用于训练的数据集文件
num_classes: 2 #分割的种类
transforms: #用于数据集增强
- type: ResizeStepScaling
min_scale_factor: 0.5
max_scale_factor: 2.0
scale_step_size: 0.25
- type: RandomPaddingCrop
crop_size: [512, 512]
- type: RandomHorizontalFlip
- type: RandomDistort
brightness_range: 0.4
contrast_range: 0.4
saturation_range: 0.4
- type: Normalize
mode: train
val_dataset:
type: Dataset
dataset_root: /home/aistudio
val_path: eval.txt#用于验证的数据集文件
transforms:
- type: Normalize
mode: val
num_classes: 2
test_dataset:
type: Dataset
dataset_root: /home/aistudio
val_path: test.txt#用于测试的数据集文件
transforms:
- type: Normalize
mode: test
num_classes: 2
文章如有问题,劳请大家指正。
欢迎交流!