getting_started.md 10.6 KB
Newer Older
W
WuHaobo 已提交
1 2
# 开始使用
---
G
gaotingquan 已提交
3
请参考[安装指南](./install.md)配置运行环境,并根据[快速开始](./quick_start)文档准备flower102数据集,本章节下面所有的实验均以flower102数据集为例。
W
WuHaobo 已提交
4

G
gaotingquan 已提交
5 6 7 8 9
PaddleClas目前支持的训练/评估环境如下:
```shell
└── CPU/单卡GPU
    ├── Linux
    └── Windows
W
WuHaobo 已提交
10

G
gaotingquan 已提交
11 12 13 14 15 16 17
└── 多卡GPU
    └── Linux
```

## 1. 基于CPU/单卡GPU上的训练与评估

在基于CPU/单卡GPU上训练与评估,推荐使用`tools/train.py``tools/eval.py`脚本。关于Linux平台多卡GPU环境下的训练与评估,请参考[2. 基于Linux+GPU的模型训练与评估](#2)
18

G
gaotingquan 已提交
19
<a name="1.1"></a>
20 21 22 23 24
### 1.1 模型训练

准备好配置文件之后,可以使用下面的方式启动训练。

```
G
gaotingquan 已提交
25 26 27
python tools/train.py \
    -c configs/quick_start/MobileNetV3_large_x1_0_finetune.yaml \
    -o pretrained_model="" \
28 29 30
    -o use_gpu=True
```

G
gaotingquan 已提交
31
其中,`-c`用于指定配置文件的路径,`-o`用于指定需要修改或者添加的参数,其中`-o pretrained_model=""`表示不使用预训练模型,`-o use_gpu=True`表示使用GPU进行训练。如果希望使用CPU进行训练,则需要将`use_gpu`设置为`False`
32

G
gaotingquan 已提交
33
更详细的训练配置,也可以直接修改模型对应的配置文件。具体配置参数参考[配置文档](config.md)
34

G
gaotingquan 已提交
35
运行上述命令,可以看到输出日志,示例如下:
36

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

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

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

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

G
gaotingquan 已提交
49
训练期间也可以通过VisualDL实时观察loss变化,详见[VisualDL](https://github.com/PaddlePaddle/VisualDL)
W
WuHaobo 已提交
50

51
### 1.2 模型微调
W
WuHaobo 已提交
52

G
gaotingquan 已提交
53
根据自己的数据集路径设置好配置文件后,可以通过加载预训练模型的方式进行微调,如下所示。
54 55

```
G
gaotingquan 已提交
56 57 58 59
python tools/train.py \
    -c configs/quick_start/MobileNetV3_large_x1_0_finetune.yaml \
    -o pretrained_model="./pretrained/MobileNetV3_large_x1_0_pretrained" \
    -o use_gpu=True
60 61
```

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

我们也提供了大量基于`ImageNet-1k`数据集的预训练模型,模型列表及下载地址详见[模型库概览](../models/models_intro.md)
65

G
gaotingquan 已提交
66
<a name="1.3"></a>
67 68
### 1.3 模型恢复训练

G
gaotingquan 已提交
69
如果训练任务因为其他原因被终止,也可以加载断点权重文件,继续训练:
70 71

```
G
gaotingquan 已提交
72 73 74 75 76
python tools/train.py \
    -c configs/quick_start/MobileNetV3_large_x1_0_finetune.yaml \
    -o checkpoints="./output/MobileNetV3_large_x1_0_gpupaddle/0/ppcls" \
    -o last_epoch=5 \
    -o use_gpu=True
77 78
```

G
gaotingquan 已提交
79 80 81
其中配置文件不需要做任何修改,只需要在继续训练时设置`checkpoints`参数即可,表示加载的断点权重文件路径,使用该参数会同时加载保存的断点权重和学习率、优化器等信息。

**注意**
littletomatodonkey's avatar
littletomatodonkey 已提交
82
* 参数`-o last_epoch=5`表示将上一次训练轮次数记为`5`,即本次训练轮次数从`6`开始计算,该值默认为-1,表示本次训练轮次数从`0`开始计算。
G
gaotingquan 已提交
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97

* `-o checkpoints`参数无需包含断点权重文件的后缀名,上述训练命令会在训练过程中生成如下所示的断点权重文件,若想从断点`0`继续训练,则`checkpoints`参数只需设置为`"./output/MobileNetV3_large_x1_0_gpupaddle/0/ppcls"`,PaddleClas会自动补充后缀名。
    ```shell
    output/
    └── MobileNetV3_large_x1_0
        ├── 0
        │   ├── ppcls.pdopt
        │   └── ppcls.pdparams
        ├── 1
        │   ├── ppcls.pdopt
        │   └── ppcls.pdparams
        .
        .
        .
    ```
98

G
gaotingquan 已提交
99
<a name="1.4"></a>
100 101
### 1.4 模型评估

G
gaotingquan 已提交
102
可以通过以下命令进行模型评估。
103 104

```bash
G
gaotingquan 已提交
105
python tools/eval.py \
106
    -c ./configs/eval.yaml \
G
gaotingquan 已提交
107
    -o ARCHITECTURE.name="MobileNetV3_large_x1_0" \
108 109 110
    -o pretrained_model=path_to_pretrained_models
```

G
gaotingquan 已提交
111
可以通过更改`configs/eval.yaml`中的`ARCHITECTURE.name`参数和`pretrained_model`参数来配置评估模型,也可以通过`-o`参数更新配置,如上所示。
112

G
gaotingquan 已提交
113
**注意:** 加载预训练模型时,需要指定预训练模型文件的路径,但无需包含文件后缀名,PaddleClas会自动补齐`.pdparams`的后缀,如[1.3 模型恢复训练](#1.3)
114

G
gaotingquan 已提交
115
<a name="2"></a>
116 117
## 2. 基于Linux+GPU的模型训练与评估

G
gaotingquan 已提交
118
如果机器环境为Linux+GPU,那么推荐使用`paddle.distributed.launch`启动模型训练脚本(`tools/train.py`)、评估脚本(`tools/eval.py`),可以更方便地启动多卡训练与评估。
W
WuHaobo 已提交
119 120

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

G
gaotingquan 已提交
122
参考如下方式启动模型训练,`paddle.distributed.launch`通过设置`selected_gpus`指定GPU运行卡号:
W
wangshipeng01 已提交
123

W
WuHaobo 已提交
124 125
```bash
# PaddleClas通过launch方式启动多卡多进程训练
G
gaotingquan 已提交
126 127

export CUDA_VISIBLE_DEVICES=0,1,2,3
W
WuHaobo 已提交
128 129 130

python -m paddle.distributed.launch \
    --selected_gpus="0,1,2,3" \
W
WuHaobo 已提交
131
    tools/train.py \
G
gaotingquan 已提交
132
        -c ./configs/quick_start/MobileNetV3_large_x1_0_finetune.yaml
W
WuHaobo 已提交
133 134
```

G
gaotingquan 已提交
135
其中,`-c`用于指定配置文件的路径,可通过配置文件修改相关训练配置信息,也可以通过添加`-o`参数来更新配置:
W
WuHaobo 已提交
136 137 138 139

```bash
python -m paddle.distributed.launch \
    --selected_gpus="0,1,2,3" \
W
WuHaobo 已提交
140
    tools/train.py \
G
gaotingquan 已提交
141 142 143
        -c ./configs/quick_start/MobileNetV3_large_x1_0_finetune.yaml \
        -o pretrained_model="" \
        -o use_gpu=True
W
WuHaobo 已提交
144
```
G
gaotingquan 已提交
145
`-o`用于指定需要修改或者添加的参数,其中`-o pretrained_model=""`表示不使用预训练模型,`-o use_gpu=True`表示使用GPU进行训练。
W
WuHaobo 已提交
146

G
gaotingquan 已提交
147
输出日志信息的格式同上,详见[1.1 模型训练](#1.1)
148 149 150

### 2.2 模型微调

G
gaotingquan 已提交
151
根据自己的数据集配置好配置文件之后,可以加载预训练模型进行微调,如下所示。
W
WuHaobo 已提交
152 153

```
G
gaotingquan 已提交
154 155
export CUDA_VISIBLE_DEVICES=0,1,2,3

156 157 158
python -m paddle.distributed.launch \
    --selected_gpus="0,1,2,3" \
    tools/train.py \
G
gaotingquan 已提交
159 160
        -c ./configs/quick_start/MobileNetV3_large_x1_0_finetune.yaml \
        -o pretrained_model="./pretrained_model/ \ MobileNetV3_large_x1_0_pretrained"
W
WuHaobo 已提交
161 162
```

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

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

167 168 169

### 2.3 模型恢复训练

G
gaotingquan 已提交
170
如果训练任务因为其他原因被终止,也可以加载断点权重文件继续训练。
S
shippingwang 已提交
171 172

```
G
gaotingquan 已提交
173 174
export CUDA_VISIBLE_DEVICES=0,1,2,3

175 176 177
python -m paddle.distributed.launch \
    --selected_gpus="0,1,2,3" \
    tools/train.py \
G
gaotingquan 已提交
178
        -c ./configs/quick_start/MobileNetV3_large_x1_0_finetune.yaml \
179
        -o checkpoints="./output/ResNet/0/ppcls"
G
gaotingquan 已提交
180 181
        -o last_epoch=5 \
        -o use_gpu=True
182
```
S
shippingwang 已提交
183

G
gaotingquan 已提交
184
其中配置文件不需要做任何修改,只需要在训练时设置`checkpoints`参数与`last_epoch`参数即可,该参数表示加载的断点权重文件路径,使用该参数会同时加载保存的模型参数权重和学习率、优化器等信息,详见[1.3 模型恢复训练](#1.3)
W
fix  
wangshipeng01 已提交
185 186


187
### 2.4 模型评估
W
fix  
wangshipeng01 已提交
188

G
gaotingquan 已提交
189
可以通过以下命令进行模型评估。
W
WuHaobo 已提交
190 191

```bash
192 193 194 195
python -m paddle.distributed.launch \
    --selected_gpus="0" \
    tools/eval.py \
        -c ./configs/eval.yaml \
G
gaotingquan 已提交
196
        -o ARCHITECTURE.name="MobileNetV3_large_x1_0" \
197
        -o pretrained_model=path_to_pretrained_models
W
WuHaobo 已提交
198
```
199

G
gaotingquan 已提交
200
参数说明详见[1.4 模型评估](#1.4)
S
fix  
shippingwang 已提交
201

littletomatodonkey's avatar
littletomatodonkey 已提交
202

littletomatodonkey's avatar
littletomatodonkey 已提交
203
## 3. 使用预训练模型进行模型预测
S
fix  
shippingwang 已提交
204

littletomatodonkey's avatar
littletomatodonkey 已提交
205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226
模型训练完成之后,可以加载训练得到的预训练模型,进行模型预测。在模型库的 `tools/infer/infer.py` 中提供了完整的示例,只需执行下述命令即可完成模型预测:

```python
python tools/infer/infer.py \
    --i=待预测的图片文件路径 \
    --m=模型名称 \
    --p=persistable 模型路径 \
    --use_gpu=True \
    --load_static_weights=False
```

参数说明:
+ `image_file`(简写 i):待预测的图片文件路径或者批量预测时的图片文件夹,如 `./test.jpeg`
+ `model`(简写 m):模型名称,如 `ResNet50_vd`
+ `pretrained_model`(简写 p):权重文件路径,如 `./pretrained/ResNet50_vd_pretrained/`
+ `use_gpu` : 是否开启GPU训练,默认值:`True`
+ `load_static_weights` : 是否加载静态图训练得到的预训练模型,默认值:`False`


## 4. 使用inference模型模型推理

通过导出inference模型,PaddlePaddle支持使用预测引擎进行预测推理。接下来介绍如何用预测引擎进行推理:
C
cuicheng01 已提交
227
首先,对训练好的模型进行转换:
littletomatodonkey's avatar
littletomatodonkey 已提交
228

S
shippingwang 已提交
229 230
```bash
python tools/export_model.py \
G
gaotingquan 已提交
231 232 233 234 235 236
    --model=MobileNetV3_large_x1_0 \
    --pretrained_model=./output/MobileNetV3_large_x1_0/best_model/ppcls \
    --output_path=./exported_model
```

其中,参数`--model`用于指定模型名称,`--pretrained_model`用于指定模型文件路径,该路径仍无需包含模型文件后缀名(如[1.3 模型恢复训练](#1.3)),`--output_path`用于指定转换后模型的存储路径。
S
fix  
shippingwang 已提交
237

littletomatodonkey's avatar
littletomatodonkey 已提交
238
**注意**:文件`export_model.py:line53`中,`shape`参数为模型输入图像的`shape`,默认为`224*224`,请根据实际情况修改,如下所示:
G
gaotingquan 已提交
239 240 241 242 243 244
```python
50 # Please modify the 'shape' according to actual needs
51 @to_static(input_spec=[
52     paddle.static.InputSpec(
53         shape=[None, 3, 224, 224], dtype='float32')
54 ])
S
shippingwang 已提交
245
```
G
gaotingquan 已提交
246 247 248

上述命令将生成模型结构文件(`__model__`)和模型权重文件(`__variables__`),然后可以使用预测引擎进行推理:

S
fix  
shippingwang 已提交
249
```bash
W
WuHaobo 已提交
250
python tools/infer/predict.py \
S
shippingwang 已提交
251
    -i 图片路径 \
G
gaotingquan 已提交
252 253 254
    -m __model__文件路径 \
    -p __variables__文件路径 \
    --use_gpu=True \
255
    --use_tensorrt=False
S
fix  
shippingwang 已提交
256
```
G
gaotingquan 已提交
257 258 259 260 261
其中:
+ `image_file`(简写 i):待预测的图片文件路径,如 `./test.jpeg`
+ `model_file`(简写 m):模型文件路径,如 `./MobileNetV3_large_x1_0/__model__`
+ `params_file`(简写 p):权重文件路径,如 `./MobileNetV3_large_x1_0/__variables__`
+ `use_tensorrt`:是否使用 TesorRT 预测引擎,默认值:`True`
littletomatodonkey's avatar
littletomatodonkey 已提交
262
+ `use_gpu`:是否使用 GPU 预测,默认值:`True`
G
gaotingquan 已提交
263

littletomatodonkey's avatar
littletomatodonkey 已提交
264
* 如果你希望评测模型速度,建议使用该脚本(`tools/infer/predict.py`),同时开启TensorRT加速预测。