图像分割 把用labelme标注生成的数据集改成PaddleSeg支持的数据集格式

图像分割 把用labelme标注生成的数据集改成PaddleSeg支持的数据集格式

labelme标注后生成的数据集文件格式

img.png 
label.png 
label_names.txt 
label_viz.png

PaddleSeg建立自定义数据集的文件格式

图像分割 把用labelme标注生成的数据集改成PaddleSeg支持的数据集格式_第1张图片

摘自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:])

摘自全流程,从零搞懂基于PaddlePaddle的图像分割

关于数据集的配置文件格式

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

文章如有问题,劳请大家指正。
欢迎交流!

你可能感兴趣的:(paddle,python,深度学习,paddlepaddle)