getting_started.md 6.6 KB
Newer Older
W
WuHaobo 已提交
1 2
# 开始使用
---
littletomatodonkey's avatar
littletomatodonkey 已提交
3
请事先参考[安装指南](install.md)配置运行环境,并根据[数据说明](./data.md)文档准备ImageNet1k数据,本章节下面所有的实验均以ImageNet1k数据集为例。
W
WuHaobo 已提交
4

littletomatodonkey's avatar
littletomatodonkey 已提交
5
## 1. Windows或者CPU上训练与评估
W
WuHaobo 已提交
6

littletomatodonkey's avatar
littletomatodonkey 已提交
7 8 9 10
如果在windows系统或者CPU上进行训练与评估,推荐使用`tools/train_multi_platform.py``tools/eval_multi_platform.py`脚本。

### 1.1 模型训练

littletomatodonkey's avatar
littletomatodonkey 已提交
11
准备好配置文件之后,可以使用下面的方式启动训练。
littletomatodonkey's avatar
littletomatodonkey 已提交
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

```
python tools/train_multi_platform.py \
    -c configs/ResNet/ResNet50.yaml \
    -o model_save_dir=./output/ \
    -o use_gpu=True
```

其中,`-c`用于指定配置文件的路径,`-o`用于指定需要修改或者添加的参数,`-o model_save_dir=./output/`表示将配置文件中的`model_save_dir`修改为`./output/``-o use_gpu=True`表示使用GPU进行训练。如果希望使用CPU进行训练,则需要将`use_gpu`设置为`False`

也可以直接修改模型对应的配置文件更新配置。具体配置参数参考[配置文档](config.md)

* 输出日志示例如下:

    * 如果在训练使用了mixup或者cutmix的数据增广方式,那么日志中只会打印出loss(损失)、lr(学习率)以及该minibatch的训练时间。

    ```
    train step:890  loss:  6.8473 lr: 0.100000 elapse: 0.157s
    ```

    * 如果训练过程中没有使用mixup或者cutmix的数据增广,那么除了loss(损失)、lr(学习率)以及该minibatch的训练时间之外,日志中也会打印出top-1与top-k(默认为5)的信息。

    ```
    epoch:0    train    step:13    loss:7.9561    top1:0.0156    top5:0.1094    lr:0.100000    elapse:0.193s
    ```

训练期间可以通过VisualDL实时观察loss变化,启动命令如下:
W
WuHaobo 已提交
39 40

```bash
littletomatodonkey's avatar
littletomatodonkey 已提交
41
visualdl --logdir ./scalar --host <host_IP> --port <port_num>
W
WuHaobo 已提交
42 43
```

littletomatodonkey's avatar
littletomatodonkey 已提交
44
### 1.2 模型微调
W
WuHaobo 已提交
45

littletomatodonkey's avatar
littletomatodonkey 已提交
46 47 48 49 50 51 52 53 54 55 56 57
* 根据自己的数据集配置好配置文件之后,可以通过加载预训练模型进行微调,如下所示。

```
python tools/train_multi_platform.py \
    -c configs/ResNet/ResNet50.yaml \
    -o pretrained_model="./pretrained/ResNet50_pretrained"
```

其中`pretrained_model`用于设置加载预训练权重的地址,使用时需要换成自己的预训练模型权重路径,也可以直接在配置文件中修改该路径。

### 1.3 模型恢复训练

littletomatodonkey's avatar
littletomatodonkey 已提交
58
* 如果训练任务因为其他原因被终止,也可以加载断点权重继续训练。
littletomatodonkey's avatar
littletomatodonkey 已提交
59 60 61 62 63 64 65

```
python tools/train_multi_platform.py \
    -c configs/ResNet/ResNet50.yaml \
    -o checkpoints="./output/ResNet/0/ppcls"
```

littletomatodonkey's avatar
littletomatodonkey 已提交
66
其中配置文件不需要做任何修改,只需要在训练时添加`checkpoints`参数即可,表示加载的断点权重路径,使用该参数会同时加载保存的断点权重和学习率、优化器等信息。
littletomatodonkey's avatar
littletomatodonkey 已提交
67 68 69 70


### 1.4 模型评估

littletomatodonkey's avatar
littletomatodonkey 已提交
71 72
* 可以通过以下命令完成模型评估。

littletomatodonkey's avatar
littletomatodonkey 已提交
73 74 75 76 77 78 79
```bash
python tools/eval_multi_platform.py \
    -c ./configs/eval.yaml \
    -o ARCHITECTURE.name="ResNet50_vd" \
    -o pretrained_model=path_to_pretrained_models
```

littletomatodonkey's avatar
littletomatodonkey 已提交
80
可以更改`configs/eval.yaml`中的`ARCHITECTURE.name`字段和`pretrained_model`字段来配置评估模型,也可以通过-o参数更新配置。
littletomatodonkey's avatar
littletomatodonkey 已提交
81 82 83 84

**注意:** 加载预训练模型时,需要指定预训练模型的前缀,例如预训练模型参数所在的文件夹为`output/ResNet50_vd/19`,预训练模型参数的名称为`output/ResNet50_vd/19/ppcls.pdparams`,则`pretrained_model`参数需要指定为`output/ResNet50_vd/19/ppcls`,PaddleClas会自动补齐`.pdparams`的后缀。


littletomatodonkey's avatar
littletomatodonkey 已提交
85
## 2. 基于Linux+GPU的模型训练与评估
littletomatodonkey's avatar
littletomatodonkey 已提交
86 87

如果机器环境为Linux+GPU,那么推荐使用PaddleClas 提供的模型训练与评估脚本:`tools/train.py``tools/eval.py`,可以更快地完成训练与评估任务。
W
WuHaobo 已提交
88 89

### 2.1 模型训练
littletomatodonkey's avatar
littletomatodonkey 已提交
90 91

按照如下方式启动模型训练。
W
wangshipeng01 已提交
92

W
WuHaobo 已提交
93 94 95 96 97 98
```bash
# PaddleClas通过launch方式启动多卡多进程训练
# 通过设置FLAGS_selected_gpus 指定GPU运行卡号

python -m paddle.distributed.launch \
    --selected_gpus="0,1,2,3" \
W
WuHaobo 已提交
99
    tools/train.py \
littletomatodonkey's avatar
littletomatodonkey 已提交
100
        -c ./configs/ResNet/ResNet50_vd.yaml
W
WuHaobo 已提交
101 102
```

C
cuicheng01 已提交
103
可以通过添加-o参数来更新配置:
W
WuHaobo 已提交
104 105 106 107

```bash
python -m paddle.distributed.launch \
    --selected_gpus="0,1,2,3" \
W
WuHaobo 已提交
108
    tools/train.py \
littletomatodonkey's avatar
littletomatodonkey 已提交
109
        -c ./configs/ResNet/ResNet50_vd.yaml \
S
shippingwang 已提交
110
        -o use_mix=1 \
littletomatodonkey's avatar
littletomatodonkey 已提交
111
        --vdl_dir=./scalar/
W
WuHaobo 已提交
112 113
```

littletomatodonkey's avatar
littletomatodonkey 已提交
114
输出日志信息的格式同上。
littletomatodonkey's avatar
littletomatodonkey 已提交
115 116 117 118

### 2.2 模型微调

* 根据自己的数据集配置好配置文件之后,可以通过加载预训练模型进行微调,如下所示。
W
WuHaobo 已提交
119 120

```
littletomatodonkey's avatar
littletomatodonkey 已提交
121 122 123 124 125
python -m paddle.distributed.launch \
    --selected_gpus="0,1,2,3" \
    tools/train.py \
        -c configs/ResNet/ResNet50.yaml \
        -o pretrained_model="./pretrained/ResNet50_pretrained"
W
WuHaobo 已提交
126 127
```

littletomatodonkey's avatar
littletomatodonkey 已提交
128
其中`pretrained_model`用于设置加载预训练权重的地址,使用时需要换成自己的预训练模型权重路径,也可以直接在配置文件中修改该路径。
W
fix  
wangshipeng01 已提交
129

littletomatodonkey's avatar
littletomatodonkey 已提交
130
* [30分钟玩转PaddleClas教程](./quick_start.md)中包含大量模型微调的示例,可以参考该章节在特定的数据集上进行模型微调。
S
shippingwang 已提交
131

littletomatodonkey's avatar
littletomatodonkey 已提交
132 133 134

### 2.3 模型恢复训练

littletomatodonkey's avatar
littletomatodonkey 已提交
135
* 如果训练任务,因为其他原因被终止,也可以加载断点权重继续训练。
S
shippingwang 已提交
136 137

```
littletomatodonkey's avatar
littletomatodonkey 已提交
138 139 140 141 142 143
python -m paddle.distributed.launch \
    --selected_gpus="0,1,2,3" \
    tools/train.py \
        -c configs/ResNet/ResNet50.yaml \
        -o checkpoints="./output/ResNet/0/ppcls"
```
S
shippingwang 已提交
144

littletomatodonkey's avatar
littletomatodonkey 已提交
145
其中配置文件不需要做任何修改,只需要在训练时添加`checkpoints`参数即可,表示加载的断点权重路径,使用该参数会同时加载保存的模型参数权重和学习率、优化器等信息。
W
fix  
wangshipeng01 已提交
146 147


littletomatodonkey's avatar
littletomatodonkey 已提交
148
### 2.4 模型评估
W
fix  
wangshipeng01 已提交
149

littletomatodonkey's avatar
littletomatodonkey 已提交
150
* 可以通过以下命令完成模型评估。
W
WuHaobo 已提交
151 152

```bash
littletomatodonkey's avatar
littletomatodonkey 已提交
153 154 155 156 157 158
python -m paddle.distributed.launch \
    --selected_gpus="0" \
    tools/eval.py \
        -c ./configs/eval.yaml \
        -o ARCHITECTURE.name="ResNet50_vd" \
        -o pretrained_model=path_to_pretrained_models
W
WuHaobo 已提交
159
```
littletomatodonkey's avatar
littletomatodonkey 已提交
160

littletomatodonkey's avatar
littletomatodonkey 已提交
161
可以更改configs/eval.yaml中的`ARCHITECTURE.name`字段和pretrained_model字段来配置评估模型,也可以通过-o参数更新配置。
S
fix  
shippingwang 已提交
162

littletomatodonkey's avatar
littletomatodonkey 已提交
163

S
refine  
shippingwang 已提交
164
## 三、模型推理
S
fix  
shippingwang 已提交
165

S
shippingwang 已提交
166
PaddlePaddle提供三种方式进行预测推理,接下来介绍如何用预测引擎进行推理:
C
cuicheng01 已提交
167
首先,对训练好的模型进行转换:
littletomatodonkey's avatar
littletomatodonkey 已提交
168

S
shippingwang 已提交
169 170
```bash
python tools/export_model.py \
171 172 173
    --model=模型名字 \
    --pretrained_model=预训练模型路径 \
    --output_path=预测模型保存路径
S
fix  
shippingwang 已提交
174

S
shippingwang 已提交
175
```
C
cuicheng01 已提交
176
之后,通过预测引擎进行推理:
S
fix  
shippingwang 已提交
177
```bash
W
WuHaobo 已提交
178
python tools/infer/predict.py \
S
shippingwang 已提交
179 180 181 182
    -m model文件路径 \
    -p params文件路径 \
    -i 图片路径 \
    --use_gpu=1 \
littletomatodonkey's avatar
littletomatodonkey 已提交
183
    --use_tensorrt=False
S
fix  
shippingwang 已提交
184
```
C
cuicheng01 已提交
185
更多使用方法和推理方式请参考[分类预测框架](../extension/paddle_inference.md)