# 10分钟快速上手使用
## 目录
* [前置说明](#1)
* [PaddleX的模型训练](#11)
* [PaddleX的其他用法](#12)
* [使用示例](#2)
* 安装PaddleX
* 准备蔬菜分类数据集
* 定义训练/验证图像处理流程transforms
* 定义dataset加载图像分类数据集
* 使用MoibleNetV3_small模型开始训练
* 训练过程使用VisualDL查看训练指标变化
* 加载训练保存的模型预测
* [更多使用教程](#3)
##
前置说明
### PaddleX的模型训练
跟随以下3个步骤,即可快速完成训练代码开发:
| 步骤 | |说明 |
| :--- | :--------------- | :-------------- |
| 第1步| 定义transforms | 用于定义模型训练、验证、预测过程中,
输入图像的预处理和数据增强操作 |
| 第2步| 定义datasets | 用于定义模型要加载的训练、验证数据集 |
| 第3步| 定义模型开始训练 | 选择需要的模型,进行训练 |
> **注意**:不同模型的transforms、datasets和训练参数都有较大差异。可直接根据[模型训练教程](../tutorials/train)获取更多模型的训练代码。
### PaddleX的其它用法
- 使用VisualDL查看训练过程中的指标变化
- 加载训练保存的模型进行预测
## 使用示例
接下来展示如何通过PaddleX在一个小数据集上进行训练。示例代码源于Github [tutorials/train/image_classification/mobilenetv3_small.py](../tutorials/train/image_classification/mobilenetv3_small.py),用户可自行下载至本地运行。
**1. 安装PaddleX**
PaddleX的安装以及安装问题的解决可以参考PaddleX的[安装文档](./install.md)。
**2. 准备蔬菜分类数据集**
```commandline
wget https://bj.bcebos.com/paddlex/datasets/vegetables_cls.tar.gz
tar xzvf vegetables_cls.tar.gz
```
**3. 定义训练/验证图像处理流程transforms**
因为训练时加入了数据增强操作,因此在训练和验证过程中,模型的数据处理流程需要分别进行定义。如下所示,代码在`train_transforms`中加入了[RandomCrop](./apis/transforms/transforms.md#randomcrop)和[RandomHorizontalFlip](./apis/transforms/transforms.md#randomhorizontalflip)两种数据增强方式, 更多方法可以参考[数据增强文档](./apis/transforms/transforms.md)。
```python
from paddlex import transforms as T
train_transforms = T.Compose([
T.RandomCrop(crop_size=224),
T.RandomHorizontalFlip(),
T.Normalize()])
eval_transforms = T.Compose([
T.ResizeByShort(short_size=256),
T.CenterCrop(crop_size=224),
T.Normalize()
])
```
**4. 定义`dataset`加载图像分类数据集**
定义数据集,`pdx.datasets.ImageNet`表示读取ImageNet格式的分类数据集:
```python
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',
file_list='vegetables_cls/val_list.txt',
label_list='vegetables_cls/labels.txt',
transforms=eval_transforms)
```
- [paddlex.datasets.ImageNet接口说明](./apis/datasets.md#1)
- [ImageNet数据格式说明](./data/format/classification.md)
**5. 使用MobileNetV3_small模型开始训练**
本文档中使用百度基于蒸馏方法得到的MobileNetV3预训练模型,模型结构与MobileNetV3一致,但精度更高。PaddleX内置了20多种分类模型,查阅[PaddleX 图像分类模型API](apis/models/classification.md#其它分类模型)了解更多分类模型。
```python
num_classes = len(train_dataset.labels)
model = pdx.cls.MobileNetV3_small(num_classes=num_classes)
model.train(num_epochs=10,
train_dataset=train_dataset,
train_batch_size=32,
eval_dataset=eval_dataset,
lr_decay_epochs=[4, 6, 8],
save_dir='output/mobilenetv3_small',
use_vdl=True)
```
**6. 训练过程使用VisualDL查看训练指标变化**
训练过程中,模型在训练集和验证集上的指标均会以标准输出流形式输出到命令终端。当用户设定`use_vdl=True`时,也会使用VisualDL格式将指标打点到`save_dir`目录下的`vdl_log`文件夹,在终端运行如下命令启动visualdl并查看可视化的指标变化情况。
```commandline
visualdl --logdir output/mobilenetv3_small --port 8001
```
服务启动后,通过浏览器打开https://0.0.0.0:8001或https://localhost:8001 即可。
如果您使用的是AIStudio平台进行训练,不能通过此方式启动visualdl,请参考AIStudio VisualDL启动教程使用
**7. 加载训练保存的模型预测**
模型在训练过程中,会每间隔一定轮数保存一次模型,在验证集上评估效果最好的一轮会保存在`save_dir`目录下的`best_model`文件夹。通过如下方式可加载模型,进行预测:
```python
import paddlex as pdx
model = pdx.load_model('output/mobilenetv3_small/best_model')
result = model.predict('vegetables_cls/bocai/100.jpg')
print("Predict Result: ", result)
```
预测结果输出如下,
```
Predict Result: Predict Result: [{'score': 0.9999393, 'category': 'bocai', 'category_id': 0}]
```
- [load_model接口说明](./apis/prediction.md)
- [分类模型predict接口说明](./apis/models/classification.md#predict)
更多使用教程
- 1.[目标检测模型训练](../tutorials/train)
- 2.[语义分割模型训练](../tutorials/train)
- 3.[实例分割模型训练](../tutorials/train)
- 4.[模型太大,想要更小的模型,试试模型裁剪吧!](../tutorials/slim/prune)