usage.md 5.4 KB
Newer Older
W
wuzewu 已提交
1
# 训练/评估/可视化
Z
Zeyu Chen 已提交
2

W
wuzewu 已提交
3
PaddleSeg提供了 `训练`/`评估`/`可视化` 等三个功能的使用脚本。三个脚本都支持通过不同的Flags来开启特定功能,也支持通过Options来修改默认的[训练配置](./config.md)。三者的使用方式非常接近,如下:
W
wuzewu 已提交
4 5 6 7 8 9

```shell
# 训练
python pdseg/train.py ${FLAGS} ${OPTIONS}
# 评估
python pdseg/eval.py ${FLAGS} ${OPTIONS}
W
wuzewu 已提交
10
# 可视化
W
wuzewu 已提交
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
python pdseg/vis.py ${FLAGS} ${OPTIONS}
```

`Note`:

> * FLAGS必须位于OPTIONS之前,否会将会遇到报错,例如如下的例子:
>
> ```shell
> # FLAGS "--cfg configs/cityscapes.yaml" 必须在 OPTIONS "BATCH_SIZE 1" 之前
> python pdseg/train.py BATCH_SIZE 1 --cfg configs/cityscapes.yaml
> ```

## FLAGS

|FLAG|支持脚本|用途|默认值|备注|
|-|-|-|-|-|
|--cfg|ALL|配置文件路径|None||
W
wuzewu 已提交
28
|--use_gpu|ALL|是否使用GPU进行训练|False||
W
wuzewu 已提交
29
|--use_mpio|train/eval|是否使用多线程进行IO处理|False|打开该开关会占用一定量的CPU内存,但是可以提高训练速度。</br> NOTE:windows平台下不支持该功能, 建议使用自定义数据初次训练时不打开,打开会导致数据读取异常不可见。 </br> |
W
wuzewu 已提交
30
|--use_tb|train|是否使用TensorBoard记录训练数据|False||
W
wuzewu 已提交
31 32
|--log_steps|train|训练日志的打印周期(单位为step)|10||
|--debug|train|是否打印debug信息|False|IOU等指标涉及到混淆矩阵的计算,会降低训练速度|
W
wuzewu 已提交
33
|--tb_log_dir|train|TensorBoard的日志路径|None||
W
wuzewu 已提交
34 35 36 37 38 39 40 41 42
|--do_eval|train|是否在保存模型时进行效果评估|False||
|--vis_dir|vis|保存可视化图片的路径|"visual"||
|--also_save_raw_results|vis|是否保存原始的预测图片|False||

## OPTIONS

详见[训练配置](./config.md)

## 使用示例
Z
Zeyu Chen 已提交
43
下面通过一个简单的示例,说明如何基于PaddleSeg提供的预训练模型启动训练。我们选择基于COCO数据集预训练的unet模型作为预训练模型,在一个Oxford-IIIT Pet数据集上进行训练。
W
wuzewu 已提交
44 45 46 47
**Note:** 为了快速体验,我们使用Oxford-IIIT Pet做了一个小型数据集,后续数据都使用该小型数据集。

### 准备工作
在开始教程前,请先确认准备工作已经完成:
Z
Zeyu Chen 已提交
48
1. 正确安装了PaddlePaddle
W
wuzewu 已提交
49 50
2. PaddleSeg相关依赖已经安装

W
wuzewu 已提交
51
如果有不确认的地方,请参考[安装说明](./installation.md)
W
wuzewu 已提交
52 53 54

### 下载预训练模型
```shell
W
wuzewu 已提交
55
# 下载预训练模型并进行解压
W
wuzewu 已提交
56
python pretrained_model/download_model.py unet_bn_coco
W
wuzewu 已提交
57
```
W
wuzewu 已提交
58 59
### 下载mini_pet数据集
我们使用了Oxford-IIIT中的猫和狗两个类别数据制作了一个小数据集mini_pet,用于快速体验
W
wuzewu 已提交
60
```shell
W
wuzewu 已提交
61 62
# 下载预训练模型并进行解压
python dataset/download_pet.py
W
wuzewu 已提交
63 64
```

Z
Zeyu Chen 已提交
65 66
### 模型训练

W
wuzewu 已提交
67
为了方便体验,我们在configs目录下放置了mini_pet所对应的配置文件`unet_pet.yaml`,可以通过`--cfg`指向该文件来设置训练配置。
W
wuzewu 已提交
68

W
wuzewu 已提交
69
我们选择GPU 0号卡进行训练,这可以通过环境变量`CUDA_VISIBLE_DEVICES`来指定。
W
wuzewu 已提交
70 71

```
Z
Zeyu Chen 已提交
72
export CUDA_VISIBLE_DEVICES=0
W
wuzewu 已提交
73 74
python pdseg/train.py --use_gpu \
                      --do_eval \
W
wuzewu 已提交
75 76
                      --use_tb \
                      --tb_log_dir train_log \
W
wuzewu 已提交
77 78
                      --cfg configs/unet_pet.yaml \
                      BATCH_SIZE 4 \
W
wuzewu 已提交
79
                      TRAIN.PRETRAINED_MODEL_DIR pretrained_model/unet_bn_coco \
W
wuzewu 已提交
80
                      TRAIN.SYNC_BATCH_NORM True \
W
wuzewu 已提交
81 82 83 84 85
                      SOLVER.LR 5e-5
```

`NOTE`:

W
wuzewu 已提交
86
> * 上述示例中,一共存在三套配置方案: PaddleSeg默认配置/unet_pet.yaml/OPTIONS,三者的优先级顺序为 OPTIONS > yaml > 默认配置。这个原则对于train.py/eval.py/vis.py都适用
W
wuzewu 已提交
87 88 89 90 91
>
> * 如果发现因为内存不足而Crash。请适当调低BATCH_SIZE。如果本机GPU内存充足,则可以调高BATCH_SIZE的大小以获得更快的训练速度

### 训练过程可视化

W
wuzewu 已提交
92
当打开do_eval和use_tb两个开关后,我们可以通过TensorBoard查看训练的效果
Z
Zeyu Chen 已提交
93

W
wuzewu 已提交
94 95 96 97 98 99 100 101 102 103
```shell
tensorboard --logdir train_log --host {$HOST_IP} --port {$PORT}
```

NOTE:
1. 上述示例中,$HOST_IP为机器IP地址,请替换为实际IP,$PORT请替换为可访问的端口
2. 数据量较大时,前端加载速度会比较慢,请耐心等待

启动TensorBoard命令后,我们可以在浏览器中查看对应的训练数据
`SCALAR`这个tab中,查看训练loss、iou、acc的变化趋势
W
wuzewu 已提交
104
![](./imgs/tensorboard_scalar.JPG)
W
wuzewu 已提交
105 106

`IMAGE`这个tab中,查看样本的预测情况
W
wuzewu 已提交
107
![](./imgs/tensorboard_image.JPG)
W
wuzewu 已提交
108 109 110 111 112 113 114 115 116 117

### 模型评估
训练完成后,我们可以通过eval.py来评估模型效果。由于我们设置的训练EPOCH数量为500,保存间隔为10,因此一共会产生50个定期保存的模型,加上最终保存的final模型,一共有51个模型。我们选择最后保存的模型进行效果的评估:
```shell
python pdseg/eval.py --use_gpu \
                     --cfg configs/unet_pet.yaml \
                     TEST.TEST_MODEL test/saved_models/unet_pet/final
```


W
wuzewu 已提交
118
### 模型可视化
W
wuzewu 已提交
119 120 121 122 123 124 125 126 127
通过vis.py来评估模型效果,我们选择最后保存的模型进行效果的评估:
```shell
python pdseg/vis.py --use_gpu \
                     --cfg configs/unet_pet.yaml \
                     TEST.TEST_MODEL test/saved_models/unet_pet/final
```
`NOTE`
1. 可视化的图片会默认保存在visual/visual_results目录下,可以通过`--vis_dir`来指定输出目录
2. 训练过程中会使用DATASET.VIS_FILE_LIST中的图片进行可视化显示,而vis.py则会使用DATASET.TEST_FILE_LIST