tutorial_cn.md 5.61 KB
Newer Older
Sugon_ldc's avatar
Sugon_ldc committed
1
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
[English](tutorial.md) | 简体中文

这里我们对参数配置、训练、评估、部署等进行了详细的介绍。

## 1. 参数配置
配置文件的结构如下所示:
```bash
├── _base_                   # 一级基础配置,后面所有的二级配置都需要继承它,你可以在这里设置自定义的数据路径,确保它有足够的空间来存储数据。
│   └── global_configs.yml
├── lung_coronavirus         # 每个数据集/器官有个独立的文件夹,这里是 COVID-19 CT scans 数据集的路径。
│   ├── lung_coronavirus.yml # 二级配置,继承一级配置,关于损失、数据、优化器等配置在这里。
│   ├── README.md  
│   └── vnet_lung_coronavirus_128_128_128_15k.yml    # 三级配置,关于模型的配置,不同的模型可以轻松拥有相同的二级配置。
└── schedulers              # 用于规划两阶段的配置,暂时还没有使用它。
    └── two_stage_coarseseg_fineseg.yml
```


## 2. 数据准备
我们使用数据准备脚本来进行一键自动化的数据下载、预处理变换、和数据集切分。只需要运行下面的脚本就可以一键准备好数据:
```
python tools/prepare_lung_coronavirus.py  # 以 CONVID-19 CT scans 为例。
```

## 3. 训练、评估
准备好配置之后,只需要一键运行 [run-vnet.sh](../run-vnet.sh) 就可以进行训练和评估。让我们看看这个脚本中的命令是什么样子的:

```bash
# 设置使用的单卡 GPU id
export CUDA_VISIBLE_DEVICES=0

# 设置配置文件名称和保存路径
yml=vnet_lung_coronavirus_128_128_128_15k
save_dir=saved_model/${yml}
mkdir save_dir

# 训练模型
python3 train.py --config configs/lung_coronavirus/${yml}.yml \
--save_dir  $save_dir \
--save_interval 500 --log_iters 100 \
--num_workers 6 --do_eval --use_vdl \
--keep_checkpoint_max 5  --seed 0  >> $save_dir/train.log

# 评估模型
python3 val.py --config configs/lung_coronavirus/${yml}.yml \
--save_dir  $save_dir/best_model --model_path $save_dir/best_model/model.pdparams

```


## 4. 模型部署
得到训练好的模型之后,我们可以将它导出为静态图来进行推理加速,下面的步骤就可以进行导出和部署,详细的教程则可以参考[这里](../deploy/python/README.md)

```bash
cd MedicalSeg/

# 用训练好的模型进行静态图导出
python export.py --config configs/lung_coronavirus/vnet_lung_coronavirus_128_128_128_15k.yml --model_path /path/to/your/trained/model

# 使用 Paddle Inference 进行推理
python deploy/python/infer.py \
    --config /path/to/model/deploy.yaml \
    --image_path /path/to/image/path/or/dir/
    --benchmark True   # 在安装了 AutoLog 之后,打开benchmark可以看到推理速度等信息,安装方法可以见 ../deploy/python/README.md

```
如果有“Finish” 输出,说明导出成功,并且可以进行推理加速。

## 5. 在自己的数据上训练
如果你想在自己的数据集上训练,你需要增加一个[数据集代码](../medicalseg/datasets/lung_coronavirus.py), 一个 [数据预处理代码](../tools/prepare_lung_coronavirus.py), 一个和这个数据集相关的[配置目录](../configs/lung_coronavirus), 一份 [训练脚本](../run-vnet.sh)。下面我们分步骤来看这些部分都需要增加什么:

### 5.1 增加配置目录
首先,我们如下图所示,增加一个和你的数据集相关的配置目录:
```
├── _base_
│   └── global_configs.yml
├── lung_coronavirus
│   ├── lung_coronavirus.yml
│   ├── README.md
│   └── vnet_lung_coronavirus_128_128_128_15k.yml
```

### 5.2 增加数据集预处理文件
所有数据需要经过预处理转换成 numpy 数据并进行数据集划分,参考这个[数据预处理代码](../tools/prepare_lung_coronavirus.py)
```python
├── lung_coronavirus_phase0  # 预处理后的文件路径
   ├── images
      ├── imagexx.npy
      ├── ...
   ├── labels
      ├── labelxx.npy
      ├── ...
   ├── train_list.txt       # 训练数据,格式:  /path/to/img_name_xxx.npy /path/to/label_names_xxx.npy
   └── val_list.txt         # 评估数据,格式:  img_name_xxx.npy label_names_xxx.npy
```

### 5.3 增加数据集文件
所有的数据集都继承了 MedicalDataset 基类,并通过上一步生成的 train_list.txt 和 val_list.txt 来获取数据。代码示例在[这里](../medicalseg/datasets/lung_coronavirus.py)

### 5.4 增加训练脚本
训练脚本能自动化训练推理过程,我们提供了一个[训练脚本示例](../run-vnet.sh) 用于参考,只需要复制,并按照需要修改就可以进行一键训练推理:
```bash
# 设置使用的单卡 GPU id
export CUDA_VISIBLE_DEVICES=3

# 设置配置文件名称和保存路径
config_name=vnet_lung_coronavirus_128_128_128_15k
yml=lung_coronavirus/${config_name}
save_dir_all=saved_model
save_dir=saved_model/${config_name}
mkdir -p $save_dir

# 模型训练
python3 train.py --config configs/${yml}.yml \
--save_dir  $save_dir \
--save_interval 500 --log_iters 100 \
--num_workers 6 --do_eval --use_vdl \
--keep_checkpoint_max 5  --seed 0  >> $save_dir/train.log

# 模型评估
python3 val.py --config configs/${yml}.yml \
--save_dir  $save_dir/best_model --model_path $save_dir/best_model/model.pdparams \

# 模型导出
python export.py --config configs/${yml}.yml \
--model_path $save_dir/best_model/model.pdparams

# 模型预测
python deploy/python/infer.py  --config output/deploy.yaml --image_path data/lung_coronavirus/lung_coronavirus_phase0/images/coronacases_org_007.npy  --benchmark True

```