quick_start.md 6.0 KB
Newer Older
J
jiangjiajun 已提交
1 2
# 10分钟快速上手使用

J
Jason 已提交
3
本文档在一个小数据集上展示了如何通过PaddleX进行训练,您可以阅读PaddleX的**使用教程**来了解更多模型任务的训练使用方式。本示例同步在AIStudio上,可直接[在线体验模型训练](https://aistudio.baidu.com/aistudio/projectdetail/439860)
J
jiangjiajun 已提交
4

J
jiangjiajun 已提交
5
PaddleX中的所有模型训练跟随以下3个步骤,即可快速完成训练代码开发!
J
jiangjiajun 已提交
6

J
jiangjiajun 已提交
7 8 9 10 11 12 13 14 15 16
| 步骤 |                  |说明             |
| :--- | :--------------- | :-------------- |
| 第1步| <a href=#定义训练验证图像处理流程transforms>定义transforms</a>  | 用于定义模型训练、验证、预测过程中,<br>输入图像的预处理和数据增强操作 |
| 第2步| <a href="#定义dataset加载图像分类数据集">定义datasets</a>  | 用于定义模型要加载的训练、验证数据集 |
| 第3步| <a href="#使用MoibleNetV3_small_ssld模型开始训练">定义模型开始训练</a> | 选择需要的模型,进行训练 |

> **注意**:不同模型的transforms、datasets和训练参数都有较大差异,更多模型训练,可直接根据文档教程获取更多模型的训练代码。[模型训练教程](train/index.html)

PaddleX的其它用法

J
jiangjiajun 已提交
17
- <a href="#训练过程使用VisualDL查看训练指标变化">使用VisualDL查看训练过程中的指标变化</a>
J
jiangjiajun 已提交
18 19 20 21 22
- <a href="#加载训练保存的模型预测">加载训练保存的模型进行预测</a>


<a name="安装PaddleX"></a>
**1. 安装PaddleX**  
J
jiangjiajun 已提交
23
> 安装相关过程和问题可以参考PaddleX的[安装文档](./install.md)。
J
jiangjiajun 已提交
24
```
J
jiangjiajun 已提交
25
pip install paddlex -i https://mirror.baidu.com/pypi/simple
J
jiangjiajun 已提交
26 27
```

J
jiangjiajun 已提交
28 29
<a name="准备蔬菜分类数据集"></a>
**2. 准备蔬菜分类数据集**  
J
jiangjiajun 已提交
30
```
J
jiangjiajun 已提交
31 32
wget https://bj.bcebos.com/paddlex/datasets/vegetables_cls.tar.gz
tar xzvf vegetables_cls.tar.gz
J
jiangjiajun 已提交
33 34
```

J
jiangjiajun 已提交
35 36
<a name="定义训练验证图像处理流程transforms"></a>
**3. 定义训练/验证图像处理流程transforms**  
J
jiangjiajun 已提交
37

J
jiangjiajun 已提交
38
由于训练时数据增强操作的加入,因此模型在训练和验证过程中,数据处理流程需要分别进行定义。如下所示,代码在`train_transforms`中加入了[RandomCrop](apis/transforms/cls_transforms.html#RandomCrop)[RandomHorizontalFlip](apis/transforms/cls_transforms.html#RandomHorizontalFlip)两种数据增强方式, 更多方法可以参考[数据增强文档](apis/transforms/augment.md)
J
jiangjiajun 已提交
39 40 41 42 43 44 45 46 47 48 49 50 51 52
```
from paddlex.cls import transforms
train_transforms = transforms.Compose([
    transforms.RandomCrop(crop_size=224),
    transforms.RandomHorizontalFlip(),
    transforms.Normalize()
])
eval_transforms = transforms.Compose([
    transforms.ResizeByShort(short_size=256),
    transforms.CenterCrop(crop_size=224),
    transforms.Normalize()
])
```

J
jiangjiajun 已提交
53 54 55 56 57 58 59
<a name="定义dataset加载图像分类数据集"></a>
**4. 定义`dataset`加载图像分类数据集**  

定义数据集,`pdx.datasets.ImageNet`表示读取ImageNet格式的分类数据集
- [paddlex.datasets.ImageNet接口说明](apis/datasets/classification.md)
- [ImageNet数据格式说明](data/format/classification.md)

J
jiangjiajun 已提交
60 61 62 63 64 65 66 67 68
```
train_dataset = pdx.datasets.ImageNet(
    data_dir='vegetables_cls',
    file_list='vegetables_cls/train_list.txt',
    label_list='vegetables_cls/labels.txt',
    transforms=train_transforms,
    shuffle=True)
eval_dataset = pdx.datasets.ImageNet(
    data_dir='vegetables_cls',
J
jiangjiajun 已提交
69
    file_list='vegetables_cls/val_list.txt',
J
jiangjiajun 已提交
70
    label_list='vegetables_cls/labels.txt',
J
jiangjiajun 已提交
71
    transforms=eval_transforms)
J
jiangjiajun 已提交
72 73
```

J
jiangjiajun 已提交
74 75 76
<a name="使用MoibleNetV3_small_ssld模型开始训练"></a>
**5. 使用MobileNetV3_small_ssld模型开始训练**  

J
jiangjiajun 已提交
77
本文档中使用百度基于蒸馏方法得到的MobileNetV3预训练模型,模型结构与MobileNetV3一致,但精度更高。PaddleX内置了20多种分类模型,查阅[PaddleX模型库](appendix/model_zoo.md)了解更多分类模型。
J
jiangjiajun 已提交
78 79
```
num_classes = len(train_dataset.labels)
Z
Zeyu Chen 已提交
80
model = pdx.cls.MobileNetV3_small_ssld(num_classes=num_classes)
J
jiangjiajun 已提交
81

J
jiangjiajun 已提交
82
model.train(num_epochs=20,
J
jiangjiajun 已提交
83 84 85 86
            train_dataset=train_dataset,
            train_batch_size=32,
            eval_dataset=eval_dataset,
            lr_decay_epochs=[4, 6, 8],
J
jiangjiajun 已提交
87
            save_dir='output/mobilenetv3_small_ssld',
J
jiangjiajun 已提交
88 89 90
            use_vdl=True)
```

J
jiangjiajun 已提交
91 92
<a name="训练过程使用VisualDL查看训练指标变化"></a>
**6. 训练过程使用VisualDL查看训练指标变化**  
J
jiangjiajun 已提交
93

J
jiangjiajun 已提交
94
模型在训练过程中,训练指标和在验证集上的指标,均会以标准输出流形式,输出到命令终端。在用户设定`use_vdl=True`的前提下,也会使用VisualDL格式打点到`save_dir`目录下的`vdl_log`文件夹,用户可都终端通过如下命令启动visualdl,查看可视化的指标变化趋势。
J
jiangjiajun 已提交
95
```
J
jiangjiajun 已提交
96
visualdl --logdir output/mobilenetv3_small_ssld --port 8001
J
jiangjiajun 已提交
97
```
J
jiangjiajun 已提交
98 99 100 101 102 103
服务启动后,通过浏览器打开https://0.0.0.0:8001或https://localhost:8001即可。

> 如果您使用的是AIStudio平台进行训练,不能通过此方式启动visualdl,请参考AIStudio VisualDL启动教程使用

<a name="加载训练保存的模型预测"></a>
**7. 加载训练保存的模型预测**  
J
jiangjiajun 已提交
104

J
jiangjiajun 已提交
105 106 107
模型在训练过程中,会每间隔一定轮数保存一次模型,在验证集上评估效果最好的一轮会保存在`save_dir`目录下的`best_model`文件夹。通过如下方式可加载模型,进行预测。
- [load_model接口说明](apis/load_model.md)
- [分类模型predict接口说明](apis/models/classification.html#predict)
J
jiangjiajun 已提交
108 109
```
import paddlex as pdx
J
jiangjiajun 已提交
110 111 112
model = pdx.load_model('output/mobilenetv3_small_ssld/best_model')
result = model.predict('vegetables_cls/bocai/100.jpg')
print("Predict Result: ", result)
J
jiangjiajun 已提交
113
```
J
jiangjiajun 已提交
114
预测结果输出如下,
J
jiangjiajun 已提交
115
```
J
jiangjiajun 已提交
116
Predict Result: Predict Result: [{'score': 0.9999393, 'category': 'bocai', 'category_id': 0}]
J
jiangjiajun 已提交
117 118
```

J
jiangjiajun 已提交
119 120
<a name="更多使用教程"></a>
**更多使用教程**
J
jiangjiajun 已提交
121 122
- 1.[目标检测模型训练](tutorials/train/detection.md)
- 2.[语义分割模型训练](tutorials/train/segmentation.md)
J
jiangjiajun 已提交
123
- 3.[实例分割模型训练](tutorials/train/instance_segmentation.md)
F
FlyingQianMM 已提交
124
- 4.[模型太大,想要更小的模型,试试模型裁剪吧!](tutorials/compress/classification.md)