Skip to main content Link Menu Expand (external link) Copy Copied

图像分割:从 PaddleLabel 到 PaddleSeg

PaddleLabel 标注数据+PaddleSeg 训练预测=快速完成一次图像分割的任务


1. 数据准备

  • 首先使用PaddleLabel对自制的狗子数据集进行标注,其次使用Split Dataset功能分割数据集,最后导出数据集
  • PaddleLabel导出后的内容全部放到自己的建立的文件夹下,例如dog_seg_dataset,其目录结构如下:
├── dog_seg_dataset
│   ├── Annotations
│   ├── JPEGImages
│   ├── labels.txt
│   ├── test_list.txt
│   ├── train_list.txt
│   ├── val_list.txt

2. 训练

2.1 安装必备的库

2.1.1 安装 paddlepaddle

# 您的机器安装的是 CUDA9 或 CUDA10,请运行以下命令安装
pip install paddlepaddle-gpu -i https://mirror.baidu.com/pypi/simple
# 您的机器是CPU,请运行以下命令安装
# pip install paddlepaddle

2.1.2 安装 paddleseg 以及依赖项

git clone https://gitee.com/paddlepaddle/PaddleSeg.git
cd PaddleSeg
pip install -r requirements.txt
python setup.py install

2.2 准备自制的狗子分割数据集

cd ./PaddleSeg/data/
mkdir dog_seg_dataset
cd ../../
cp -r ./dog_seg_dataset/* ./PaddleSeg/data/dog_seg_dataset

2.3 修改配置文件

这里改了FCN模型的配置文件,改完后拷贝了一份放置到了configs目录下并重命名为mynet.yml,关于自定义数据集的配置可以参考PaddleSegGitHub上的说明配置文件说明

PaddleSeg/configs/mynet.yml

batch_size: 4 # 迭代一次送入网络的图片数量
iters: 10000 # 模型迭代次数

train_dataset:
  type: Dataset # 数据集格式,自定义数据集用Dataset
  dataset_root: ../data/dog_seg_dataset # 训练数据集存放的目录
  train_path: ../data/dog_seg_dataset/train_list.txt
  num_classes: 2 # 像素类别数(背景也算为一类
  transforms: # 数据变换与数据增强
    - type: ResizeStepScaling # 对图像按照某一个比例进行缩放,这个比例以scale_step_size为步长
      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: ../data/dog_seg_dataset # 验证数据集存放的目录
  val_path: ../data/dog_seg_dataset/val_list.txt
  transforms:
    - type: Normalize
  mode: val # 验证模式
  num_classes: 2

optimizer: # 设定优化器的类型
  type: sgd # 随机梯度下降
  momentum: 0.9 # 动量
  weight_decay: 0.0005 # 权值衰减,使用的目的是防止过拟合

lr_scheduler: # 学习率的相关设置
  type: PolynomialDecay # 一种学习率类型。共支持12种策略
  learning_rate: 0.01
  power: 0.9
  end_lr: 0

loss: # 损失函数设置
  types:
    - type: CrossEntropyLoss # 交叉熵损失函数
  coef: [1] # 当使用了多种损失函数,可在 coef 中为每种损失指定配比

model: # 使用何种语义分割模型
  type: FCN
  backbone: # 使用何种骨干网络
    type: HRNet_W48
    pretrained: https://bj.bcebos.com/paddleseg/dygraph/hrnet_w48_ssld.tar.gz # 预训练模型
  num_classes: 2
  pretrained: Null
  backbone_indices: [-1]

2.4 开始训练

export CUDA_VISIBLE_DEVICES=0

# 开始训练
# 边训练边测试
# --config 参数表示指定使用哪个配置文件
# --do_eval 参数表示一遍训练一遍验证
# --save_interval 参数表示每经过100个iters,进行一个模型的保存
python PaddleSeg/train.py \
       --config PaddleSeg/configs/mynet.yml \
       --do_eval \
       --use_vdl \
       --save_interval 100 \
       --save_dir PaddleSeg/output

3. 模型评估

3.1 评估

# 评估 默认使用训练过程中保存的model_final.pdparams
python PaddleSeg/val.py \
       --config PaddleSeg/configs/mynet.yml \
       --model_path PaddleSeg/output/best_model/model.pdparams

3.2 预测

# image_path参数表示选择预测的图片
# save_dir参数表示预测保存的结果地址
python PaddleSeg/predict.py \
       --config PaddleSeg/configs/mynet.yml \
       --model_path PaddleSeg/output/best_model/model.pdparams \
       --image_path PaddleSeg/data/dog_seg_dataset/JPEGImages/e619b17a9c1b9f085dc2712eb603171f.jpeg \
       --save_dir PaddleSeg/output/result

预测的原图是data/dog_seg_dataset/JPEGImages/e619b17a9c1b9f085dc2712eb603171f.jpeg

预测的结果PaddleSeg/output/result目录里面,如下图所示:

AI Studio 第三方教程推荐

快速体验演示案例