README.md 4.3 KB
Newer Older
D
Dun 已提交
1
DeepLab运行本目录下的程序示例需要使用PaddlePaddle Fluid v1.3.0版本或以上。如果您的PaddlePaddle安装版本低于此要求,请按照安装文档中的说明更新PaddlePaddle安装版本,如果使用GPU,该程序需要使用cuDNN v7版本。
D
Dun 已提交
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40


## 代码结构
```
├── models.py # 网络结构定义脚本
├── train.py   # 训练任务脚本
├── eval.py    # 评估脚本
└── reader.py    # 定义通用的函数以及数据预处理脚本
```

## 简介

DeepLabv3+ 是DeepLab语义分割系列网络的最新作,其前作有 DeepLabv1,DeepLabv2, DeepLabv3,
在最新作中,DeepLab的作者通过encoder-decoder进行多尺度信息的融合,同时保留了原来的空洞卷积和ASSP层,
其骨干网络使用了Xception模型,提高了语义分割的健壮性和运行速率,在 PASCAL VOC 2012 dataset取得新的state-of-art performance,89.0mIOU。

![](./imgs/model.png)


## 数据准备



本文采用Cityscape数据集,请前往[Cityscape官网](https://www.cityscapes-dataset.com)注册下载。
下载以后的数据目录结构如下
```
data/cityscape/
|-- gtFine
|   |-- test
|   |-- train
|   `-- val
|-- leftImg8bit
    |-- test
    |-- train
    `-- val
```

# 预训练模型准备

D
Dun 已提交
41
我们为了节约更多的显存,在这里我们使用Group Norm作为我们的归一化手段。
D
Dun 已提交
42 43
如果需要从头开始训练模型,用户需要下载我们的初始化模型
```
D
Dun 已提交
44 45
wget https://paddle-deeplab.bj.bcebos.com/deeplabv3plus_gn_init.tgz
tar -xf deeplabv3plus_gn_init.tgz && rm deeplabv3plus_gn_init.tgz
D
Dun 已提交
46 47 48
```
如果需要最终训练模型进行fine tune或者直接用于预测,请下载我们的最终模型
```
D
Dun 已提交
49 50
wget https://paddle-deeplab.bj.bcebos.com/deeplabv3plus_gn.tgz
tar -xf deeplabv3plus_gn.tgz && rm deeplabv3plus_gn.tgz
D
Dun 已提交
51 52 53 54 55 56 57 58 59 60 61 62
```


## 模型训练与预测

### 训练
执行以下命令进行训练,同时指定weights的保存路径,初始化路径,以及数据存放位置:
```
python ./train.py \
    --batch_size=1 \
    --train_crop_size=769 \
    --total_step=50 \
D
Dun 已提交
63
    --norm_type=gn \
D
Dun 已提交
64 65 66 67 68 69 70 71 72 73 74 75 76
    --init_weights_path=$INIT_WEIGHTS_PATH \
    --save_weights_path=$SAVE_WEIGHTS_PATH \
    --dataset_path=$DATASET_PATH
```
使用以下命令获得更多使用说明:
```
python train.py --help
```
以上命令用于测试训练过程是否正常,仅仅迭代了50次并且使用了1的batch size,如果需要复现
原论文的实验,请使用以下设置:
```
python ./train.py \
    --batch_size=8 \
D
Dun 已提交
77 78
    --parallel=True \
    --norm_type=gn \
D
Dun 已提交
79 80
    --train_crop_size=769 \
    --total_step=90000 \
D
Dun 已提交
81 82 83
    --base_lr=0.001 \
    --init_weights_path=deeplabv3plus_gn_init \
    --save_weights_path=output \
D
Dun 已提交
84 85
    --dataset_path=$DATASET_PATH
```
D
Dun 已提交
86 87 88
如果您的显存不足,可以尝试减小`batch_size`,同时等比例放大`total_step`, 保证相乘的值不变,这得益于Group Norm的特性,改变 `batch_size` 并不会显著影响结果,而且能够节约更多显存, 比如您可以设置`--batch_size=4 --total_step=180000`

如果您希望使用多卡进行训练,可以同比增加`batch_size`,减小`total_step`, 比如原来单卡训练是`--batch_size=4 --total_step=180000`,使用4卡训练则是`--batch_size=16 --total_step=45000`
D
Dun 已提交
89 90 91 92 93

### 测试
执行以下命令在`Cityscape`测试数据集上进行测试:
```
python ./eval.py \
D
Dun 已提交
94 95
    --init_weights=deeplabv3plus_gn \
    --norm_type=gn \
D
Dun 已提交
96 97
    --dataset_path=$DATASET_PATH
```
98
需要通过选项`--model_path`指定模型文件。测试脚本的输出的评估指标为mean IoU。
D
Dun 已提交
99 100 101 102 103


## 实验结果
训练完成以后,使用`eval.py`在验证集上进行测试,得到以下结果:
```
D
Dun 已提交
104
load from: ../models/deeplabv3plus_gn
D
Dun 已提交
105
total number 500
D
Dun 已提交
106
step: 500, mIoU: 0.7881
D
Dun 已提交
107 108 109
```

## 其他信息
D
Dun 已提交
110

D
Dun 已提交
111 112 113 114
|数据集 | norm type | pretrained model | trained model | mean IoU
|---|---|---|---|---|
|CityScape | batch norm | [deeplabv3plus_xception65_initialize.tgz](https://paddle-deeplab.bj.bcebos.com/deeplabv3plus_xception65_initialize.tgz) | [deeplabv3plus.tgz](https://paddle-deeplab.bj.bcebos.com/deeplabv3plus.tgz) | 0.7873 |
|CityScape | group norm | [deeplabv3plus_gn_init.tgz](https://paddle-deeplab.bj.bcebos.com/deeplabv3plus_gn_init.tgz) | [deeplabv3plus_gn.tgz](https://paddle-deeplab.bj.bcebos.com/deeplabv3plus_gn.tgz) | 0.7881 |
D
Dun 已提交
115 116 117 118

## 参考

- [Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation](https://arxiv.org/abs/1802.02611)